Consts.run8: def of bend-collections-laws-crypto@1.0.0.0 Import: import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/consts.bend as Consts Lines 47-65 of bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/consts.bend: https://jend.leeeet.dev/read.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/consts.bend&start_line=47&end_line=65 import Base import bend-collections-laws-crypto@1.0.0.0/spec/lib/common.bend as C import bend-collections-laws-crypto@1.0.0.0/proofs/lib/word.bend as WD import bend-collections-laws-crypto@1.0.0.0/proofs/lib/lemmas/proofs/nat_algebra.bend as NA import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/num.bend as M import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/limbs.bend as LM import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/poly.bend as PL # a run of 2040 = 8 * 255 absorbs a carry of 8 def run8(+one: Nat, +n: Nat, +tl: List<&2, U32>) -> {Nat.add(valo(one, rep(n, 2040, tl)), Nat.mul(one, 8n)) == LM.shn(n, Nat.add(valo(one, tl), Nat.mul(one, 8n))) : Nat}: match n: case 0n: {==} case 1n+ +m: +R = valo(one, rep(m, 2040, tl)) +a = Nat.mul(one, v(2040)) +b = Nat.mul(one, 8n) +k1 = Equal.trans(Nat, Nat.add(a, b), Nat.mul(one, Nat.add(v(2040), 8n)), Nat.mul(one, WD.sc(8n, 8n)), Equal.sym(Nat, Nat.mul(one, Nat.add(v(2040), 8n)), Nat.add(a, b), NA.mul_add_left(one, v(2040), 8n)), Equal.cong(Nat, Nat, t => Nat.mul(one, t), Nat.add(v(2040), 8n), WD.sc(8n, 8n), {==})) +k2 = Equal.trans(Nat, Nat.add(a, b), Nat.mul(one, WD.sc(8n, 8n)), WD.sc(8n, b), k1, Equal.sym(Nat, WD.sc(8n, b), Nat.mul(one, WD.sc(8n, 8n)), PL.sc_mul_l(8n, one, 8n))) +e1 = Equal.trans(Nat, Nat.add(Nat.add(a, C.shift(8n, R)), b), Nat.add(a, Nat.add(C.shift(8n, R), b)), Nat.add(Nat.add(a, b), C.shift(8n, R)), NA.add_assoc(a, C.shift(8n, R), b), Equal.trans(Nat, Nat.add(a, Nat.add(C.shift(8n, R), b)), Nat.add(a, Nat.add(b, C.shift(8n, R))), Nat.add(Nat.add(a, b), C.shift(8n, R)), M.cong_r(a, Nat.add(C.shift(8n, R), b), Nat.add(b, C.shift(8n, R)), NA.add_comm(C.shift(8n, R), b)), Equal.sym(Nat, Nat.add(Nat.add(a, b), C.shift(8n, R)), Nat.add(a, Nat.add(b, C.shift(8n, R))), NA.add_assoc(a, b, C.shift(8n, R))))) +e2 = M.cong_l(Nat.add(a, b), WD.sc(8n, b), C.shift(8n, R), k2) +e3 = Equal.trans(Nat, Nat.add(WD.sc(8n, b), C.shift(8n, R)), WD.sc(8n, Nat.add(b, R)), WD.sc(8n, Nat.add(R, b)), M.sc_add(8n, b, R), M.cong_sc(8n, Nat.add(b, R), Nat.add(R, b), NA.add_comm(b, R))) +e4 = M.cong_sc(8n, Nat.add(R, b), LM.shn(m, Nat.add(valo(one, tl), b)), run8(one, m, tl)) Equal.trans(Nat, Nat.add(Nat.add(a, C.shift(8n, R)), b), Nat.add(Nat.add(a, b), C.shift(8n, R)), C.shift(8n, LM.shn(m, Nat.add(valo(one, tl), b))), e1, Equal.trans(Nat, Nat.add(Nat.add(a, b), C.shift(8n, R)), Nat.add(WD.sc(8n, b), C.shift(8n, R)), C.shift(8n, LM.shn(m, Nat.add(valo(one, tl), b))), e2, Equal.trans(Nat, Nat.add(WD.sc(8n, b), C.shift(8n, R)), WD.sc(8n, Nat.add(R, b)), C.shift(8n, LM.shn(m, Nat.add(valo(one, tl), b))), e3, e4))) Uses (22): 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=List 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.mul https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=U32 https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/consts.bend&name=rep https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/consts.bend&name=v https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/consts.bend&name=valo https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/limbs.bend&name=shn https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/num.bend&name=cong_l https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/num.bend&name=cong_r https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/num.bend&name=cong_sc https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/num.bend&name=sc_add https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/poly.bend&name=sc_mul_l https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/lib/lemmas/proofs/nat_algebra.bend&name=add_assoc https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/lib/lemmas/proofs/nat_algebra.bend&name=add_comm https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/lib/lemmas/proofs/nat_algebra.bend&name=mul_add_left https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/lib/word.bend&name=sc https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/lib/common.bend&name=shift