ProofShift.ns.dkm: def of bend-osdev-word64@0.1.1.0 Import: import bend-osdev-word64@0.1.1.0/proof_shift.bend as ProofShift Lines 198-200 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=198&end_line=200 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 <= n: 2^k * 2^(n - k) = 2^n, either way round def ns.dkm(+n: Nat, +k: Nat, +x: Nat, h: {Nat.is_le(k, n) == True{} : Bool}) -> {U.U32Nat.dbl(k, U.U32Nat.dbl(Nat.sub(n, k), x)) == U.U32Nat.dbl(n, x) : Nat}: Equal.trans(Nat, U.U32Nat.dbl(k, U.U32Nat.dbl(Nat.sub(n, k), x)), U.U32Nat.dbl(Nat.add(k, Nat.sub(n, k)), x), U.U32Nat.dbl(n, x), UL.dbl_dbl(k, Nat.sub(n, k), x), Equal.cong(Nat, Nat, v => U.U32Nat.dbl(v, x), Nat.add(k, Nat.sub(n, k)), n, ns.add_sub_le(k, n, h))) Uses (10): 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.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.sub https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=dbl_dbl 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.add_sub_le