def sred_v

bend-collections-laws-crypto@1.0.0.0 · proofs/crypto/secp256k1/pscal.bend:30

import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/pscal.bend as Pscal
import Base
import bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/field.bend as FS
import bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/scalar.bend as S
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/limbs.bend as LV
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/fprot.bend as FR
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/scalarops.bend as SO

30# x mod n for a 16-limb x
31def sred_v(+one: Nat, +h1: {one == 1n : Nat}, +x: List<&2, Nat>, +hx: {FS.limbs16(one, 16n, x) == True{} : Bool}) -> {FS.value(one, S.reduce(x)) == Nat.mod(FS.value(one, x), FS.order(one)) : Nat}:
32  %Equal.sym(List<&2, Nat>, S.reduce(x), S.reduce_u(x), FR.s_reduce(x)) : {FS.value(one, _) == Nat.mod(FS.value(one, x), FS.order(one)) : Nat}
33  %Equal.sym(Nat, FS.value(one, S.reduce_u(x)), Nat.mod(LV.ev(x), FS.order(one)), SO.red_v(one, h1, x, ev512(one, h1, x, hx))) : {_ == Nat.mod(FS.value(one, x), FS.order(one)) : Nat}
34  %Equal.sym(Nat, FS.value(one, x), LV.ev(x), LV.ev_value(one, h1, x)) : {Nat.mod(LV.ev(x), FS.order(one)) == Nat.mod(_, FS.order(one)) : Nat}
35  {==}

Uses (15)

Used by (4)