ProofShift.ws.shlv: def of bend-osdev-word64@0.1.1.0 Import: import bend-osdev-word64@0.1.1.0/proof_shift.bend as ProofShift Lines 277-289 of bend-osdev-word64@0.1.1.0/proof_shift.bend: https://jend.leeeet.dev/read.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&start_line=277&end_line=289 import Base import bend-osdev-u32@0.1.0.0/u32.bend as U # Word.shl: the doubled value, less 2^n for the top bit def ws.shlv(n: Nat, w: Word(n)) -> {Nat.add(Word.to_nat(n, Word.shl(n, w)), U.U32Nat.dbl(n, U.U32Nat.bit(ws.top(n, w)))) == Nat.double(Word.to_nat(n, w)) : Nat}: match n: case 0n: match w: case WNil{}: {==} case 1n+ +p: match w: case WCon{False{}, +t}: Equal.trans(Nat, Nat.add(Nat.double(Word.to_nat(p, Word.shl.put(p, False{}, t))), Nat.double(U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, False{}, t))))), Nat.double(Nat.add(Word.to_nat(p, Word.shl.put(p, False{}, t)), U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, False{}, t))))), Nat.double(Nat.add(U.U32Nat.bit(False{}), Nat.double(Word.to_nat(p, t)))), Equal.sym(Nat, Nat.double(Nat.add(Word.to_nat(p, Word.shl.put(p, False{}, t)), U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, False{}, t))))), Nat.add(Nat.double(Word.to_nat(p, Word.shl.put(p, False{}, t))), Nat.double(U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, False{}, t))))), ns.double_add(Word.to_nat(p, Word.shl.put(p, False{}, t)), U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, False{}, t))))), Equal.cong(Nat, Nat, v => Nat.double(v), Nat.add(Word.to_nat(p, Word.shl.put(p, False{}, t)), U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, False{}, t)))), Nat.add(U.U32Nat.bit(False{}), Nat.double(Word.to_nat(p, t))), ws.putv(p, False{}, t))) case WCon{True{}, +t}: Equal.trans(Nat, Nat.add(Nat.double(Word.to_nat(p, Word.shl.put(p, True{}, t))), Nat.double(U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, True{}, t))))), Nat.double(Nat.add(Word.to_nat(p, Word.shl.put(p, True{}, t)), U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, True{}, t))))), Nat.double(Nat.add(U.U32Nat.bit(True{}), Nat.double(Word.to_nat(p, t)))), Equal.sym(Nat, Nat.double(Nat.add(Word.to_nat(p, Word.shl.put(p, True{}, t)), U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, True{}, t))))), Nat.add(Nat.double(Word.to_nat(p, Word.shl.put(p, True{}, t))), Nat.double(U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, True{}, t))))), ns.double_add(Word.to_nat(p, Word.shl.put(p, True{}, t)), U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, True{}, t))))), Equal.cong(Nat, Nat, v => Nat.double(v), Nat.add(Word.to_nat(p, Word.shl.put(p, True{}, t)), U.U32Nat.dbl(p, U.U32Nat.bit(ws.topc(p, True{}, t)))), Nat.add(U.U32Nat.bit(True{}), Nat.double(Word.to_nat(p, t))), ws.putv(p, True{}, t))) Uses (19): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.cong https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.sym https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.trans https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.add https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.double https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.Con https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.Nil https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.shl https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.shl.put https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.to_nat https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/u32.bend&name=U32Nat.bit https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/u32.bend&name=U32Nat.dbl https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ns.double_add https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.putv https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.top https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.topc