def inv_h2
bend-collections-laws-crypto@1.0.0.0 · proofs/crypto/secp256k1/scalarpow.bend:182
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/scalarpow.bend as Scalarpow
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/limbs.bend as L
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/consts.bend as K
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/bitsv.bend as BV
182def inv_h2(+one: Nat, +h1: {one == 1n : Nat}) -> {Nat.add(FS.cn(one), Nat.add(BV.hv(S.inv_bits(), one, 0n), 2n)) == Nat.add(FS.cn(one), 1n+K.np(one)) : Nat}:
183 +hcb = BV.cb(one, xb(), 0n, 0n, xb01())
184 %Equal.sym(List<&2, Nat>, S.inv_bits(), L.cbits(xb()), ib_lit()) : {Nat.add(FS.cn(one), Nat.add(BV.hv(_, one, 0n), 2n)) == Nat.add(FS.cn(one), 1n+K.np(one)) : Nat}
185 %Equal.sym(Nat, Nat.add(FS.cn(one), 1n+K.np(one)), Nat.add(1n+K.np(one), FS.cn(one)), NA.add_comm(FS.cn(one), 1n+K.np(one))) : {Nat.add(FS.cn(one), Nat.add(BV.hv(L.cbits(xb()), one, 0n), 2n)) == _ : Nat}
186 %Equal.sym(Nat, Nat.add(1n+K.np(one), FS.cn(one)), C.shift(256n, one), K.hm_n(one, h1)) : {Nat.add(FS.cn(one), Nat.add(BV.hv(L.cbits(xb()), one, 0n), 2n)) == _ : Nat}
187 %Equal.sym(Nat, C.shift(256n, one), Nat.add(Nat.add(BV.hv(L.cbits(xb()), one, 0n), BV.hv(xb(), one, 0n)), one), Equal.sym(Nat, Nat.add(Nat.add(BV.hv(L.cbits(xb()), one, 0n), BV.hv(xb(), one, 0n)), one), C.shift(256n, one), hcb)) : {Nat.add(FS.cn(one), Nat.add(BV.hv(L.cbits(xb()), one, 0n), 2n)) == _ : Nat}
188 %Equal.sym(Nat, BV.hv(xb(), one, 0n), Nat.add(FS.cn(one), one), xb_v(one, h1)) : {Nat.add(FS.cn(one), Nat.add(BV.hv(L.cbits(xb()), one, 0n), 2n)) == Nat.add(Nat.add(BV.hv(L.cbits(xb()), one, 0n), _), one) : Nat}
189 %Equal.sym(Nat, one, 1n, h1) : {Nat.add(FS.cn(one), Nat.add(BV.hv(L.cbits(xb()), one, 0n), 2n)) == Nat.add(Nat.add(BV.hv(L.cbits(xb()), one, 0n), Nat.add(FS.cn(one), _)), one) : Nat}
190 %Equal.sym(Nat, one, 1n, h1) : {Nat.add(FS.cn(one), Nat.add(BV.hv(L.cbits(xb()), one, 0n), 2n)) == Nat.add(Nat.add(BV.hv(L.cbits(xb()), one, 0n), Nat.add(FS.cn(one), 1n)), _) : Nat}
191 %Equal.sym(Nat, Nat.add(FS.cn(one), Nat.add(BV.hv(L.cbits(xb()), one, 0n), 2n)), Nat.add(BV.hv(L.cbits(xb()), one, 0n), Nat.add(FS.cn(one), 2n)), NA.add_swap(FS.cn(one), BV.hv(L.cbits(xb()), one, 0n), 2n)) : {_ == Nat.add(Nat.add(BV.hv(L.cbits(xb()), one, 0n), Nat.add(FS.cn(one), 1n)), 1n) : Nat}
192 %Equal.sym(Nat, Nat.add(Nat.add(BV.hv(L.cbits(xb()), one, 0n), Nat.add(FS.cn(one), 1n)), 1n), Nat.add(BV.hv(L.cbits(xb()), one, 0n), Nat.add(Nat.add(FS.cn(one), 1n), 1n)), NA.add_assoc(BV.hv(L.cbits(xb()), one, 0n), Nat.add(FS.cn(one), 1n), 1n)) : {Nat.add(BV.hv(L.cbits(xb()), one, 0n), Nat.add(FS.cn(one), 2n)) == _ : Nat}
193 %Equal.sym(Nat, Nat.add(Nat.add(FS.cn(one), 1n), 1n), Nat.add(FS.cn(one), Nat.add(1n, 1n)), NA.add_assoc(FS.cn(one), 1n, 1n)) : {Nat.add(BV.hv(L.cbits(xb()), one, 0n), Nat.add(FS.cn(one), 2n)) == Nat.add(BV.hv(L.cbits(xb()), one, 0n), _) : Nat}
194 %Equal.sym(Nat, Nat.add(1n, 1n), 2n, {==}) : {Nat.add(BV.hv(L.cbits(xb()), one, 0n), Nat.add(FS.cn(one), 2n)) == Nat.add(BV.hv(L.cbits(xb()), one, 0n), Nat.add(FS.cn(one), _)) : Nat}
195 {==}