ProofShift.ws.shlk: def of bend-osdev-word64@0.1.1.0 Import: import bend-osdev-word64@0.1.1.0/proof_shift.bend as ProofShift Lines 291-297 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=291&end_line=297 import Base import bend-osdev-u32@0.1.0.0/u32.bend as U import bend-osdev-u32@0.1.0.0/LAWS.bend as UL # k shifts left: the value times 2^k, less 2^n times the bits carried out def ws.shlk(+n: Nat, k: Nat, +w: Word(n)) -> {Nat.add(Word.to_nat(n, ws.shl(n, k, w)), U.U32Nat.dbl(n, ws.ov(n, k, w))) == U.U32Nat.dbl(k, Word.to_nat(n, w)) : Nat}: match k: case 0n: ns.d0(n, Word.to_nat(n, w)) case 1n+ +p: Equal.trans(Nat, Nat.add(Word.to_nat(n, Word.shl(n, ws.shl(n, p, w))), U.U32Nat.dbl(n, Nat.add(U.U32Nat.bit(ws.top(n, ws.shl(n, p, w))), Nat.double(ws.ov(n, p, w))))), Nat.add(Word.to_nat(n, Word.shl(n, ws.shl(n, p, w))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.bit(ws.top(n, ws.shl(n, p, w)))), U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w))))), Nat.double(U.U32Nat.dbl(p, Word.to_nat(n, w))), Equal.cong(Nat, Nat, v => Nat.add(Word.to_nat(n, Word.shl(n, ws.shl(n, p, w))), v), U.U32Nat.dbl(n, Nat.add(U.U32Nat.bit(ws.top(n, ws.shl(n, p, w))), Nat.double(ws.ov(n, p, w)))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.bit(ws.top(n, ws.shl(n, p, w)))), U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w)))), UL.dbl_add(n, U.U32Nat.bit(ws.top(n, ws.shl(n, p, w))), Nat.double(ws.ov(n, p, w)))), Equal.trans(Nat, Nat.add(Word.to_nat(n, Word.shl(n, ws.shl(n, p, w))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.bit(ws.top(n, ws.shl(n, p, w)))), U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w))))), Nat.add(Nat.add(Word.to_nat(n, Word.shl(n, ws.shl(n, p, w))), U.U32Nat.dbl(n, U.U32Nat.bit(ws.top(n, ws.shl(n, p, w))))), U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w)))), Nat.double(U.U32Nat.dbl(p, Word.to_nat(n, w))), Equal.sym(Nat, Nat.add(Nat.add(Word.to_nat(n, Word.shl(n, ws.shl(n, p, w))), U.U32Nat.dbl(n, U.U32Nat.bit(ws.top(n, ws.shl(n, p, w))))), U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w)))), Nat.add(Word.to_nat(n, Word.shl(n, ws.shl(n, p, w))), Nat.add(U.U32Nat.dbl(n, U.U32Nat.bit(ws.top(n, ws.shl(n, p, w)))), U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w))))), UL.nat_add_assoc(Word.to_nat(n, Word.shl(n, ws.shl(n, p, w))), U.U32Nat.dbl(n, U.U32Nat.bit(ws.top(n, ws.shl(n, p, w)))), U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w))))), Equal.trans(Nat, Nat.add(Nat.add(Word.to_nat(n, Word.shl(n, ws.shl(n, p, w))), U.U32Nat.dbl(n, U.U32Nat.bit(ws.top(n, ws.shl(n, p, w))))), U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w)))), Nat.add(Nat.double(Word.to_nat(n, ws.shl(n, p, w))), U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w)))), Nat.double(U.U32Nat.dbl(p, Word.to_nat(n, w))), Equal.cong(Nat, Nat, v => Nat.add(v, U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w)))), Nat.add(Word.to_nat(n, Word.shl(n, ws.shl(n, p, w))), U.U32Nat.dbl(n, U.U32Nat.bit(ws.top(n, ws.shl(n, p, w))))), Nat.double(Word.to_nat(n, ws.shl(n, p, w))), ws.shlv(n, ws.shl(n, p, w))), Equal.trans(Nat, Nat.add(Nat.double(Word.to_nat(n, ws.shl(n, p, w))), U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w)))), Nat.add(Nat.double(Word.to_nat(n, ws.shl(n, p, w))), Nat.double(U.U32Nat.dbl(n, ws.ov(n, p, w)))), Nat.double(U.U32Nat.dbl(p, Word.to_nat(n, w))), Equal.cong(Nat, Nat, v => Nat.add(Nat.double(Word.to_nat(n, ws.shl(n, p, w))), v), U.U32Nat.dbl(n, Nat.double(ws.ov(n, p, w))), Nat.double(U.U32Nat.dbl(n, ws.ov(n, p, w))), ns.dbl_double(n, ws.ov(n, p, w))), Equal.trans(Nat, Nat.add(Nat.double(Word.to_nat(n, ws.shl(n, p, w))), Nat.double(U.U32Nat.dbl(n, ws.ov(n, p, w)))), Nat.double(Nat.add(Word.to_nat(n, ws.shl(n, p, w)), U.U32Nat.dbl(n, ws.ov(n, p, w)))), Nat.double(U.U32Nat.dbl(p, Word.to_nat(n, w))), Equal.sym(Nat, Nat.double(Nat.add(Word.to_nat(n, ws.shl(n, p, w)), U.U32Nat.dbl(n, ws.ov(n, p, w)))), Nat.add(Nat.double(Word.to_nat(n, ws.shl(n, p, w))), Nat.double(U.U32Nat.dbl(n, ws.ov(n, p, w)))), ns.double_add(Word.to_nat(n, ws.shl(n, p, w)), U.U32Nat.dbl(n, ws.ov(n, p, w)))), Equal.cong(Nat, Nat, v => Nat.double(v), Nat.add(Word.to_nat(n, ws.shl(n, p, w)), U.U32Nat.dbl(n, ws.ov(n, p, w))), U.U32Nat.dbl(p, Word.to_nat(n, w)), ws.shlk(n, p, w))))))) Uses (20): 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.shl 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/LAWS.bend&name=dbl_add https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=nat_add_assoc 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.d0 https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ns.dbl_double 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.ov https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.shl https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.shlv https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.top