PROOFMul.wm.s3: def of bend-osdev-word64@0.1.1.0 Import: import bend-osdev-word64@0.1.1.0/PROOF_mul.bend as PROOFMul Lines 156-157 of bend-osdev-word64@0.1.1.0/PROOF_mul.bend: https://jend.leeeet.dev/read.txt?path=bend-osdev-word64@0.1.1.0/PROOF_mul.bend&start_line=156&end_line=157 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 def wm.s3(+h: Nat, +n: Nat, +x: Nat, +y: Nat, +z: Nat, +en: {Nat.add(h, h) == n : Nat}, +h2: {Nat.is_le(2n, h) == True{} : Bool}, +hx: {Nat.is_lt(x, U.U32Nat.dbl(h, 1n)) == True{} : Bool}, +hy: {Nat.is_lt(y, U.U32Nat.dbl(h, 1n)) == True{} : Bool}, +hz: {Nat.is_lt(z, U.U32Nat.dbl(h, 1n)) == True{} : Bool}) -> {Nat.is_lt(Nat.add(Nat.add(x, y), z), U.U32Nat.dbl(n, 1n)) == True{} : Bool}: Equal.trans(Bool, Nat.is_lt(Nat.add(Nat.add(x, y), z), U.U32Nat.dbl(n, 1n)), Nat.is_lt(Nat.add(Nat.add(x, y), z), Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z))), True{}, Equal.sym(Bool, Nat.is_lt(Nat.add(Nat.add(x, y), z), Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z))), Nat.is_lt(Nat.add(Nat.add(x, y), z), U.U32Nat.dbl(n, 1n)), Equal.cong(Nat, Bool, zz => Nat.is_lt(Nat.add(Nat.add(x, y), z), zz), Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), U.U32Nat.dbl(n, 1n), Equal.trans(Nat, Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), Nat.add(Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))), U.U32Nat.dbl(n, 1n), Equal.trans(Nat, Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(U.U32Nat.dbl(h, 1n), U.U32Nat.dbl(h, 1n))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))), Equal.trans(Nat, Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(U.U32Nat.dbl(h, 1n), U.U32Nat.dbl(h, 1n))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Equal.trans(Nat, Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), 1n+y), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Equal.trans(Nat, Nat.add(2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), 1n+Nat.add(Nat.add(x, y), z)), Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), 1n+x), Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), 1n+y), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), 1n+y), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), wr.m1(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), h, Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))), x, y, z), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(zz, Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), 1n+y), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), 1n+x), U.U32Nat.dbl(h, 1n), UL.nat_lt_witness(x, U.U32Nat.dbl(h, 1n), hx))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(zz, Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z))), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y), 1n+y), U.U32Nat.dbl(h, 1n), UL.nat_lt_witness(y, U.U32Nat.dbl(h, 1n), hy))), Equal.cong(Nat, Nat, zz => Nat.add(Nat.add(U.U32Nat.dbl(h, 1n), Nat.add(U.U32Nat.dbl(h, 1n), zz)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z), 1n+z), U.U32Nat.dbl(h, 1n), UL.nat_lt_witness(z, U.U32Nat.dbl(h, 1n), hz))), wr.m2(h, Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))), UL.nat_le_witness(U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n), Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n)), Nat.is_le(U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n))), True{}, Equal.cong(Nat, Bool, zz => Nat.is_le(U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n)), zz), U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), wm.fn(h, n, 1n, en)), UL.dbl_le_exp(2n, h, U.U32Nat.dbl(h, 1n), h2)))))), UL.nat_lt_add(Nat.add(Nat.add(x, y), z), 2n+Nat.add(Nat.add(Nat.add(Nat.sub(U.U32Nat.dbl(h, 1n), 1n+x), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+y)), Nat.sub(U.U32Nat.dbl(h, 1n), 1n+z)), Nat.add(U.U32Nat.dbl(h, 1n), Nat.sub(U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(2n, U.U32Nat.dbl(h, 1n))))))) Uses (17): 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.is_le https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.is_lt https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.sub https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=dbl_le_exp https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=nat_le_witness https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=nat_lt_add https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=nat_lt_witness 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_mul.bend&name=wm.fn https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/PROOF_mul.bend&name=wr.m1 https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/PROOF_mul.bend&name=wr.m2