def hm_n1

bend-collections-laws-crypto@1.0.0.0 · proofs/crypto/secp256k1/fwrap.bend:79

import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/fwrap.bend as Fwrap
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/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/lib/lemmas/proofs/nat_algebra.bend as NA
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/semiring.bend as SR
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/consts.bend as K

79# n + 1 + (2^256 - n - 1) = 2^256
80def hm_n1(+one: Nat, +h1: {one == 1n : Nat}) -> {Nat.add(1n+(1n+K.np(one)), FS.value(one, S.cm1())) == C.shift(256n, one) : Nat}:
81  +r = C.shift(16n, FS.digits(one, [12233n, 41331n, 16429n, 24516n, 20663n, 8985n, 17745n, 1n]))
82  %Equal.sym(Nat, C.shift(256n, one), Nat.add(1n+K.np(one), FS.cn(one)), Equal.sym(Nat, Nat.add(1n+K.np(one), FS.cn(one)), C.shift(256n, one), K.hm_n(one, h1))) : {Nat.add(1n+1n+K.np(one), Nat.add(Nat.mul(one, 48830n), r)) == _ : Nat}
83  %Equal.sym(Nat, Nat.add(Nat.mul(one, 48831n), r), 1n+Nat.add(Nat.mul(one, 48830n), r), dig1(one, h1, 48830n, r)) : {Nat.add(1n+1n+K.np(one), Nat.add(Nat.mul(one, 48830n), r)) == Nat.add(1n+K.np(one), _) : Nat}
84  %Equal.sym(Nat, 1n+K.np(one), Nat.add(K.np(one), 1n), SR.succ_add(1n, K.np(one))) : {Nat.add(1n+_, Nat.add(Nat.mul(one, 48830n), r)) == Nat.add(1n+K.np(one), 1n+Nat.add(Nat.mul(one, 48830n), r)) : Nat}
85  %Equal.sym(Nat, 1n+Nat.add(K.np(one), 1n), Nat.add(Nat.add(K.np(one), 1n), 1n), SR.succ_add(1n, Nat.add(K.np(one), 1n))) : {Nat.add(_, Nat.add(Nat.mul(one, 48830n), r)) == Nat.add(1n+K.np(one), 1n+Nat.add(Nat.mul(one, 48830n), r)) : Nat}
86  %Equal.sym(Nat, Nat.add(Nat.add(K.np(one), 1n), 1n), Nat.add(K.np(one), Nat.add(1n, 1n)), NA.add_assoc(K.np(one), 1n, 1n)) : {Nat.add(_, Nat.add(Nat.mul(one, 48830n), r)) == Nat.add(1n+K.np(one), 1n+Nat.add(Nat.mul(one, 48830n), r)) : Nat}
87  %Equal.sym(Nat, Nat.add(1n, 1n), 2n, {==}) : {Nat.add(Nat.add(K.np(one), _), Nat.add(Nat.mul(one, 48830n), r)) == Nat.add(1n+K.np(one), 1n+Nat.add(Nat.mul(one, 48830n), r)) : Nat}
88  %Equal.sym(Nat, Nat.add(Nat.add(K.np(one), 2n), Nat.add(Nat.mul(one, 48830n), r)), Nat.add(K.np(one), Nat.add(2n, Nat.add(Nat.mul(one, 48830n), r))), NA.add_assoc(K.np(one), 2n, Nat.add(Nat.mul(one, 48830n), r))) : {_ == Nat.add(1n+K.np(one), 1n+Nat.add(Nat.mul(one, 48830n), r)) : Nat}
89  %Equal.sym(Nat, Nat.add(2n, Nat.add(Nat.mul(one, 48830n), r)), Nat.add(Nat.mul(one, 48830n), Nat.add(2n, r)), NA.add_swap(2n, Nat.mul(one, 48830n), r)) : {Nat.add(K.np(one), _) == Nat.add(1n+K.np(one), 1n+Nat.add(Nat.mul(one, 48830n), r)) : Nat}
90  %Equal.sym(Nat, Nat.add(2n, r), Nat.add(r, 2n), NA.add_comm(2n, r)) : {Nat.add(K.np(one), Nat.add(Nat.mul(one, 48830n), _)) == Nat.add(1n+K.np(one), 1n+Nat.add(Nat.mul(one, 48830n), r)) : Nat}
91  %Equal.sym(Nat, 1n+K.np(one), Nat.add(K.np(one), 1n), SR.succ_add(1n, K.np(one))) : {Nat.add(K.np(one), Nat.add(Nat.mul(one, 48830n), Nat.add(r, 2n))) == Nat.add(_, 1n+Nat.add(Nat.mul(one, 48830n), r)) : Nat}
92  %Equal.sym(Nat, 1n+Nat.add(Nat.mul(one, 48830n), r), Nat.add(Nat.add(Nat.mul(one, 48830n), r), 1n), SR.succ_add(1n, Nat.add(Nat.mul(one, 48830n), r))) : {Nat.add(K.np(one), Nat.add(Nat.mul(one, 48830n), Nat.add(r, 2n))) == Nat.add(Nat.add(K.np(one), 1n), _) : Nat}
93  %Equal.sym(Nat, Nat.add(Nat.add(Nat.mul(one, 48830n), r), 1n), Nat.add(Nat.mul(one, 48830n), Nat.add(r, 1n)), NA.add_assoc(Nat.mul(one, 48830n), r, 1n)) : {Nat.add(K.np(one), Nat.add(Nat.mul(one, 48830n), Nat.add(r, 2n))) == Nat.add(Nat.add(K.np(one), 1n), _) : Nat}
94  %Equal.sym(Nat, Nat.add(Nat.add(K.np(one), 1n), Nat.add(Nat.mul(one, 48830n), Nat.add(r, 1n))), Nat.add(K.np(one), Nat.add(1n, Nat.add(Nat.mul(one, 48830n), Nat.add(r, 1n)))), NA.add_assoc(K.np(one), 1n, Nat.add(Nat.mul(one, 48830n), Nat.add(r, 1n)))) : {Nat.add(K.np(one), Nat.add(Nat.mul(one, 48830n), Nat.add(r, 2n))) == _ : Nat}
95  %Equal.sym(Nat, Nat.add(1n, Nat.add(Nat.mul(one, 48830n), Nat.add(r, 1n))), Nat.add(Nat.mul(one, 48830n), Nat.add(1n, Nat.add(r, 1n))), NA.add_swap(1n, Nat.mul(one, 48830n), Nat.add(r, 1n))) : {Nat.add(K.np(one), Nat.add(Nat.mul(one, 48830n), Nat.add(r, 2n))) == Nat.add(K.np(one), _) : Nat}
96  %Equal.sym(Nat, Nat.add(1n, Nat.add(r, 1n)), Nat.add(r, Nat.add(1n, 1n)), NA.add_swap(1n, r, 1n)) : {Nat.add(K.np(one), Nat.add(Nat.mul(one, 48830n), Nat.add(r, 2n))) == Nat.add(K.np(one), Nat.add(Nat.mul(one, 48830n), _)) : Nat}
97  %Equal.sym(Nat, Nat.add(1n, 1n), 2n, {==}) : {Nat.add(K.np(one), Nat.add(Nat.mul(one, 48830n), Nat.add(r, 2n))) == Nat.add(K.np(one), Nat.add(Nat.mul(one, 48830n), Nat.add(r, _))) : Nat}
98  {==}

Uses (17)

Used by (1)