def ms_le

bend-collections-laws-crypto@1.0.0.0 · proofs/crypto/curve25519/mulw.bend:167

import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/mulw.bend as Mulw
import Base
import bend-collections-laws-crypto@1.0.0.0/proofs/lib/nat.bend as N
import bend-collections-laws-crypto@1.0.0.0/proofs/lib/logic.bend as L
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/crypto/curve25519/num.bend as M
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/fold.bend as FD
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/consts.bend as K

167def ms_le(+one: Nat, +h1: {one == 1n : Nat}) -> {Nat.is_le(Nat.mul(WD.sc(17n, one), 255n), WD.sc(28n, one)) == True{} : Bool}:
168  +a = M.le_mul2(WD.sc(17n, one), 255n, WD.sc(17n, one), WD.sc(8n, one), N.le_refl(WD.sc(17n, one)), FD.le255(one, h1, 0n))
169  +b = L.subst(Nat, z => {Nat.is_le(Nat.mul(WD.sc(17n, one), 255n), z) == True{} : Bool}, Nat.mul(WD.sc(17n, one), WD.sc(8n, one)), WD.sc(25n, one), Equal.trans(Nat, Nat.mul(WD.sc(17n, one), WD.sc(8n, one)), WD.sc(25n, Nat.mul(one, one)), WD.sc(25n, one), M.mul_sc2(17n, 8n, one, one), M.cong_sc(25n, Nat.mul(one, one), one, K.one_k(one, h1, one))), a)
170  N.le_trans(Nat.mul(WD.sc(17n, one), 255n), WD.sc(25n, one), WD.sc(28n, one), b, M.sc_mono(3n, 25n, one))

Uses (15)

Used by (1)