Ptwo.two_v: def of bend-collections-laws-crypto@1.0.0.0 Import: import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/ptwo.bend as Ptwo Lines 17-24 of bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/ptwo.bend: https://jend.leeeet.dev/read.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/ptwo.bend&start_line=17&end_line=24 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/spec/crypto/secp256k1/curve.bend as CV import bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/point.bend as P import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/point.bend as PT import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/sel.bend as SL import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/pmul.bend as PM import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/paff.bend as PA def two_v(+one: Nat, +h1: {one == 1n : Nat}, +u1: List<&2, Nat>, +hu1: {FS.reduced(one, FS.order(one), u1) == True{} : Bool}, +u2: List<&2, Nat>, +hu2: {FS.reduced(one, FS.order(one), u2) == True{} : Bool}, +pr: P.Point, +hpr: {PT.pred(one, pr) == True{} : Bool}) -> {PT.pv(one, P.add(P.mul(u1, P.g()), P.mul(u2, pr))) == CV.padd(FS.prime(one), CV.pmul(FS.prime(one), FS.value(one, u1), CV.g(one)), CV.pmul(FS.prime(one), FS.value(one, u2), PT.pv(one, pr))) : CV.SPoint}: +hp1 = PM.mul_r(one, h1, u1, P.g(), SL.sl16(one, u1, hu1), PA.g_r(one, h1)) +hp2 = PM.mul_r(one, h1, u2, pr, SL.sl16(one, u2, hu2), hpr) %Equal.sym(CV.SPoint, PT.pv(one, P.add(P.mul(u1, P.g()), P.mul(u2, pr))), CV.padd(FS.prime(one), PT.pv(one, P.mul(u1, P.g())), PT.pv(one, P.mul(u2, pr))), PT.padd_v(one, h1, P.mul(u1, P.g()), P.mul(u2, pr), hp1, hp2)) : {_ == CV.padd(FS.prime(one), CV.pmul(FS.prime(one), FS.value(one, u1), CV.g(one)), CV.pmul(FS.prime(one), FS.value(one, u2), PT.pv(one, pr))) : CV.SPoint} %Equal.sym(CV.SPoint, PT.pv(one, P.mul(u1, P.g())), CV.pmul(FS.prime(one), FS.value(one, u1), PT.pv(one, P.g())), PM.mul_v(one, h1, u1, P.g(), SL.sl16(one, u1, hu1), PA.g_r(one, h1))) : {CV.padd(FS.prime(one), _, PT.pv(one, P.mul(u2, pr))) == CV.padd(FS.prime(one), CV.pmul(FS.prime(one), FS.value(one, u1), CV.g(one)), CV.pmul(FS.prime(one), FS.value(one, u2), PT.pv(one, pr))) : CV.SPoint} %Equal.sym(CV.SPoint, PT.pv(one, P.mul(u2, pr)), CV.pmul(FS.prime(one), FS.value(one, u2), PT.pv(one, pr)), PM.mul_v(one, h1, u2, pr, SL.sl16(one, u2, hu2), hpr)) : {CV.padd(FS.prime(one), CV.pmul(FS.prime(one), FS.value(one, u1), PT.pv(one, P.g())), _) == CV.padd(FS.prime(one), CV.pmul(FS.prime(one), FS.value(one, u1), CV.g(one)), CV.pmul(FS.prime(one), FS.value(one, u2), PT.pv(one, pr))) : CV.SPoint} %Equal.sym(CV.SPoint, PT.pv(one, P.g()), CV.g(one), PA.g_v(one, h1)) : {CV.padd(FS.prime(one), CV.pmul(FS.prime(one), FS.value(one, u1), _), CV.pmul(FS.prime(one), FS.value(one, u2), PT.pv(one, pr))) == CV.padd(FS.prime(one), CV.pmul(FS.prime(one), FS.value(one, u1), CV.g(one)), CV.pmul(FS.prime(one), FS.value(one, u2), PT.pv(one, pr))) : CV.SPoint} {==} Uses (24): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool 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=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/paff.bend&name=g_r https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/paff.bend&name=g_v https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/pmul.bend&name=mul_r https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/pmul.bend&name=mul_v https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/point.bend&name=padd_v https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/point.bend&name=pred https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/point.bend&name=pv https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/proofs/crypto/secp256k1/sel.bend&name=sl16 https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/curve.bend&name=SPoint https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/curve.bend&name=g https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/curve.bend&name=padd https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/curve.bend&name=pmul https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/field.bend&name=order https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/field.bend&name=prime https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/spec/crypto/secp256k1/field.bend&name=reduced 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/src/crypto/secp256k1/point.bend&name=Point https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/point.bend&name=add https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/point.bend&name=g https://jend.leeeet.dev/definition.txt?path=bend-collections-laws-crypto@1.0.0.0/src/crypto/secp256k1/point.bend&name=mul