def un.shlv

bend-osdev-u32@0.1.0.0 · PROOF.bend:1361

import bend-osdev-u32@0.1.0.0/PROOF.bend as PROOF
import Base
import bend-osdev-u32@0.1.0.0/u32.bend as U

1361def un.shlv(n: Nat, +w: Word(n)) -> {Nat.add(Word.to_nat(n, Word.shl(n, w)), U.U32Nat.dbl(n, U.U32Nat.bit(un.top(n, w)))) == Nat.double(Word.to_nat(n, w)) : Nat}:
1362  match n:
1363    case 0n:
1364      {==}
1365    case 1n+ +p:
1366      match w:
1367        case WCon{+x, +t}:
1368          Equal.trans(Nat, Nat.add(Nat.double(Word.to_nat(p, Word.shl.put(p, x, t))), Nat.double(U.U32Nat.dbl(p, U.U32Nat.bit(un.topc(p, x, t))))), Nat.double(Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, t)))), Nat.double(Word.to_nat(1n+p, WCon{x, t})), Equal.trans(Nat, Nat.add(Nat.double(Word.to_nat(p, Word.shl.put(p, x, t))), Nat.double(U.U32Nat.dbl(p, U.U32Nat.bit(un.topc(p, x, t))))), Nat.double(Nat.add(Word.to_nat(p, Word.shl.put(p, x, t)), U.U32Nat.dbl(p, U.U32Nat.bit(un.topc(p, x, t))))), Nat.double(Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, t)))), ur.r13(Word.to_nat(p, Word.shl.put(p, x, t)), p, U.U32Nat.bit(un.topc(p, x, t))), Equal.cong(Nat, Nat, zz => Nat.double(zz), Nat.add(Word.to_nat(p, Word.shl.put(p, x, t)), U.U32Nat.dbl(p, U.U32Nat.bit(un.topc(p, x, t)))), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, t))), un.putv(p, x, t))), Equal.cong(Nat, Nat, zz => Nat.double(zz), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, t))), Word.to_nat(1n+p, WCon{x, t}), Equal.sym(Nat, Word.to_nat(1n+p, WCon{x, t}), Nat.add(U.U32Nat.bit(x), Nat.double(Word.to_nat(p, t))), un.wc(p, x, t))))

Uses (18)

Used by (2)