def yp_digits

bend-collections-laws-crypto@1.0.0.0 · proofs/crypto/secp256k1/fieldpow.bend:221

import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/fieldpow.bend as Fieldpow
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/proofs/lib/lemmas/proofs/nat_algebra.bend as NA
import bend-collections-laws-crypto@1.0.0.0/proofs/math/typed/width.bend as WW
import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/semiring.bend as SR

221# 975 + 2^32 + 2 = c_p
222def yp_digits(+one: Nat, +h1: {one == 1n : Nat}) -> {Nat.add(Nat.add(FS.digits(one, L.norm16([975n, 0n, 1n])), one), one) == FS.cp(one) : Nat}:
223  %Equal.sym(List<&2, Nat>, L.norm16([975n, 0n, 1n]), [975n, 0n, 1n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n], yp_lit()) : {Nat.add(Nat.add(FS.digits(one, _), one), one) == FS.cp(one) : Nat}
224  %Equal.sym(Nat, FS.digits(one, [0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n]), 0n, zeros13(one)) : {Nat.add(Nat.add(Nat.add(Nat.mul(one, 975n), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, _)))))), one), one) == Nat.add(Nat.mul(one, 977n), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
225  %Equal.sym(Nat, Nat.mul(one, 977n), Nat.add(one, Nat.mul(one, 976n)), NA.mul_succ(one, 976n)) : {Nat.add(Nat.add(Nat.add(Nat.mul(one, 975n), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))), one), one) == Nat.add(_, C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
226  %Equal.sym(Nat, Nat.mul(one, 976n), Nat.add(one, Nat.mul(one, 975n)), NA.mul_succ(one, 975n)) : {Nat.add(Nat.add(Nat.add(Nat.mul(one, 975n), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))), one), one) == Nat.add(Nat.add(one, _), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
227  %Equal.sym(Nat, Nat.mul(one, 0n), 0n, NA.mul_zero(one)) : {Nat.add(Nat.add(Nat.add(Nat.mul(one, 975n), C.shift(16n, Nat.add(_, C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))), one), one) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
228  %Equal.sym(Nat, Nat.mul(one, 1n), one, NA.mul_one(one)) : {Nat.add(Nat.add(Nat.add(Nat.mul(one, 975n), C.shift(16n, Nat.add(0n, C.shift(16n, Nat.add(_, C.shift(16n, 0n)))))), one), one) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
229  %Equal.sym(Nat, C.shift(16n, 0n), 0n, WW.shift_zero(16n)) : {Nat.add(Nat.add(Nat.add(Nat.mul(one, 975n), C.shift(16n, Nat.add(0n, C.shift(16n, Nat.add(one, _))))), one), one) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
230  %Equal.sym(Nat, Nat.add(one, 0n), one, NA.add_zero(one)) : {Nat.add(Nat.add(Nat.add(Nat.mul(one, 975n), C.shift(16n, Nat.add(0n, C.shift(16n, _)))), one), one) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
231  %Equal.sym(Nat, Nat.add(0n, C.shift(16n, one)), C.shift(16n, one), SR.zero_add(C.shift(16n, one))) : {Nat.add(Nat.add(Nat.add(Nat.mul(one, 975n), C.shift(16n, _)), one), one) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
232  %Equal.sym(Nat, C.shift(16n, C.shift(16n, one)), C.shift(32n, one), SR.shift_shift(16n, 16n, one)) : {Nat.add(Nat.add(Nat.add(Nat.mul(one, 975n), _), one), one) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
233  %Equal.sym(Nat, Nat.add(Nat.mul(one, 975n), C.shift(32n, one)), Nat.add(C.shift(32n, one), Nat.mul(one, 975n)), NA.add_comm(Nat.mul(one, 975n), C.shift(32n, one))) : {Nat.add(Nat.add(_, one), one) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
234  %Equal.sym(Nat, Nat.add(Nat.add(C.shift(32n, one), Nat.mul(one, 975n)), one), Nat.add(C.shift(32n, one), Nat.add(Nat.mul(one, 975n), one)), NA.add_assoc(C.shift(32n, one), Nat.mul(one, 975n), one)) : {Nat.add(_, one) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
235  %Equal.sym(Nat, Nat.add(Nat.mul(one, 975n), one), Nat.add(one, Nat.mul(one, 975n)), NA.add_comm(Nat.mul(one, 975n), one)) : {Nat.add(Nat.add(C.shift(32n, one), _), one) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
236  %Equal.sym(Nat, Nat.add(C.shift(32n, one), Nat.add(one, Nat.mul(one, 975n))), Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n))), NA.add_swap(C.shift(32n, one), one, Nat.mul(one, 975n))) : {Nat.add(_, one) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
237  %Equal.sym(Nat, Nat.add(Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n))), one), Nat.add(one, Nat.add(Nat.add(C.shift(32n, one), Nat.mul(one, 975n)), one)), NA.add_assoc(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n)), one)) : {_ == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
238  %Equal.sym(Nat, Nat.add(Nat.add(C.shift(32n, one), Nat.mul(one, 975n)), one), Nat.add(C.shift(32n, one), Nat.add(Nat.mul(one, 975n), one)), NA.add_assoc(C.shift(32n, one), Nat.mul(one, 975n), one)) : {Nat.add(one, _) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
239  %Equal.sym(Nat, Nat.add(Nat.mul(one, 975n), one), Nat.add(one, Nat.mul(one, 975n)), NA.add_comm(Nat.mul(one, 975n), one)) : {Nat.add(one, Nat.add(C.shift(32n, one), _)) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
240  %Equal.sym(Nat, Nat.add(C.shift(32n, one), Nat.add(one, Nat.mul(one, 975n))), Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n))), NA.add_swap(C.shift(32n, one), one, Nat.mul(one, 975n))) : {Nat.add(one, _) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(Nat.mul(one, 0n), C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
241  %Equal.sym(Nat, Nat.mul(one, 0n), 0n, NA.mul_zero(one)) : {Nat.add(one, Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n)))) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(_, C.shift(16n, Nat.add(Nat.mul(one, 1n), C.shift(16n, 0n)))))) : Nat}
242  %Equal.sym(Nat, Nat.mul(one, 1n), one, NA.mul_one(one)) : {Nat.add(one, Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n)))) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(0n, C.shift(16n, Nat.add(_, C.shift(16n, 0n)))))) : Nat}
243  %Equal.sym(Nat, C.shift(16n, 0n), 0n, WW.shift_zero(16n)) : {Nat.add(one, Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n)))) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(0n, C.shift(16n, Nat.add(one, _))))) : Nat}
244  %Equal.sym(Nat, Nat.add(one, 0n), one, NA.add_zero(one)) : {Nat.add(one, Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n)))) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, Nat.add(0n, C.shift(16n, _)))) : Nat}
245  %Equal.sym(Nat, Nat.add(0n, C.shift(16n, one)), C.shift(16n, one), SR.zero_add(C.shift(16n, one))) : {Nat.add(one, Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n)))) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(16n, _)) : Nat}
246  %Equal.sym(Nat, C.shift(16n, C.shift(16n, one)), C.shift(32n, one), SR.shift_shift(16n, 16n, one)) : {Nat.add(one, Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n)))) == Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), _) : Nat}
247  %Equal.sym(Nat, Nat.add(Nat.add(one, Nat.add(one, Nat.mul(one, 975n))), C.shift(32n, one)), Nat.add(one, Nat.add(Nat.add(one, Nat.mul(one, 975n)), C.shift(32n, one))), NA.add_assoc(one, Nat.add(one, Nat.mul(one, 975n)), C.shift(32n, one))) : {Nat.add(one, Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n)))) == _ : Nat}
248  %Equal.sym(Nat, Nat.add(Nat.add(one, Nat.mul(one, 975n)), C.shift(32n, one)), Nat.add(one, Nat.add(Nat.mul(one, 975n), C.shift(32n, one))), NA.add_assoc(one, Nat.mul(one, 975n), C.shift(32n, one))) : {Nat.add(one, Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n)))) == Nat.add(one, _) : Nat}
249  %Equal.sym(Nat, Nat.add(Nat.mul(one, 975n), C.shift(32n, one)), Nat.add(C.shift(32n, one), Nat.mul(one, 975n)), NA.add_comm(Nat.mul(one, 975n), C.shift(32n, one))) : {Nat.add(one, Nat.add(one, Nat.add(C.shift(32n, one), Nat.mul(one, 975n)))) == Nat.add(one, Nat.add(one, _)) : Nat}
250  {==}

Uses (21)

Used by (1)