def run8
bend-collections-laws-crypto@1.0.0.0 · proofs/crypto/curve25519/consts.bend:47
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/consts.bend as Consts
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
47
48def 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}:
49 match n:
50 case 0n:
51 {==}
52 case 1n+ +m:
53 +R = valo(one, rep(m, 2040, tl))
54 +a = Nat.mul(one, v(2040))
55 +b = Nat.mul(one, 8n)
56 +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), {==}))
57 +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)))
58 +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),
59 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)))))
60 +e2 = M.cong_l(Nat.add(a, b), WD.sc(8n, b), C.shift(8n, R), k2)
61 +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)))
62 +e4 = M.cong_sc(8n, Nat.add(R, b), LM.shn(m, Nat.add(valo(one, tl), b)), run8(one, m, tl))
63 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,
64 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,
65 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)))