Fwrap.hm_n1: def of bend-collections-laws-crypto@1.0.0.0 Import: import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/fwrap.bend as Fwrap Lines 79-98 of bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/fwrap.bend: https://jend.leeeet.dev/read.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/fwrap.bend&start_line=79&end_line=98 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 # n + 1 + (2^256 - n - 1) = 2^256 def 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}: +r = C.shift(16n, FS.digits(one, [12233n, 41331n, 16429n, 24516n, 20663n, 8985n, 17745n, 1n])) %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} %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} %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} %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} %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} %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} %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} %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} %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} %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} %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} %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} %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} %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} %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} %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} {==} Uses (17): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.sym https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.add https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.mul https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/consts.bend&name=hm_n https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/consts.bend&name=np https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/fwrap.bend&name=dig1 https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/semiring.bend&name=succ_add https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/lib/lemmas/proofs/nat_algebra.bend&name=add_assoc https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/lib/lemmas/proofs/nat_algebra.bend&name=add_comm https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/lib/lemmas/proofs/nat_algebra.bend&name=add_swap https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/field.bend&name=cn https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/field.bend&name=digits https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/field.bend&name=value https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/lib/common.bend&name=shift https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/scalar.bend&name=cm1