def s258
bend-collections-laws-crypto@1.0.0.0 · proofs/crypto/curve25519/consts.bend:80
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/proofs/lib/word.bend as WD
import bend-collections-laws-crypto@1.0.0.0/proofs/lib/arith.bend as AR
import bend-collections-laws-crypto@1.0.0.0/proofs/lib/lemmas/proofs/nat_algebra.bend as NA
80
81def s258(+one: Nat, +h1: {one == 1n : Nat}, +pp: Nat, +hP: {Nat.add(1n+pp, 19n) == WD.sc(255n, one) : Nat}) -> {WD.sc(258n, one) == Nat.add(Nat.mul(8n, 1n+pp), 152n) : Nat}:
82 +X = WD.sc(255n, one)
83 +P = {1n+pp : Nat}
84 +e1 = Equal.trans(Nat, WD.sc(3n, X), Nat.mul(X, 8n), Nat.mul(8n, X), Equal.sym(Nat, Nat.mul(X, 8n), WD.sc(3n, X), AR.mul_sc(3n, X)), NA.mul_comm(X, 8n))
85 +e2 = Equal.cong(Nat, Nat, t => Nat.mul(8n, t), X, Nat.add(P, 19n), Equal.sym(Nat, Nat.add(P, 19n), X, hP))
86 +e3 = NA.mul_add_left(8n, P, 19n)
87 Equal.trans(Nat, WD.sc(3n, X), Nat.mul(8n, X), Nat.add(Nat.mul(8n, P), 152n), e1, Equal.trans(Nat, Nat.mul(8n, X), Nat.mul(8n, Nat.add(P, 19n)), Nat.add(Nat.mul(8n, P), 152n), e2, e3))