proofs/crypto/curve25519/num.bend checks
raw source on the hub · import bend-collections-laws-crypto@1.0.0.0/proofs/crypto/curve25519/num.bend as Num
6 imports
import Base import ../../lib/nat.bend as N import ../../lib/logic.bend as L import ../../lib/word.bend as WD import ../../lib/arith.bend as AR import ../../lib/lemmas/proofs/nat_algebra.bend as NA
Definitions
def cong_l source · line 13 · raw
@+x:Nat -> @+y:Nat -> @+z:Nat -> @+e:{x == y : Nat} -> {Nat.add(x, z) == Nat.add(y, z) : Nat}
def cong_r source · line 16 · raw
@+z:Nat -> @+x:Nat -> @+y:Nat -> @+e:{x == y : Nat} -> {Nat.add(z, x) == Nat.add(z, y) : Nat}
def cong_add source · line 19 · raw
@+a:Nat -> @+b:Nat -> @+c:Nat -> @+d:Nat -> @+e1:{a == b : Nat} -> @+e2:{c == d : Nat} -> {Nat.add(a, c) == Nat.add(b, d) : Nat}
def cong_mul source · line 22 · raw
@+a:Nat -> @+b:Nat -> @+c:Nat -> @+d:Nat -> @+e1:{a == b : Nat} -> @+e2:{c == d : Nat} -> {Nat.mul(a, c) == Nat.mul(b, d) : Nat}
def cong_sc source · line 25 · raw
@+k:Nat -> @+x:Nat -> @+y:Nat -> @+e:{x == y : Nat} -> {0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, x) == 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, y) : Nat}
def cong_mod source · line 28 · raw
@+m:Nat -> @+x:Nat -> @+y:Nat -> @+e:{x == y : Nat} -> {Nat.mod(x, m) == Nat.mod(y, m) : Nat}
def add4 source · line 32 · raw
@+a:Nat -> @+b:Nat -> @+c:Nat -> @+d:Nat -> {Nat.add(Nat.add(a, b), Nat.add(c, d)) == Nat.add(Nat.add(a, c), Nat.add(b, d)) : Nat}(a + b) + (c + d) == (a + c) + (b + d)
def sc_add source · line 38 · raw
@+k:Nat -> @+x:Nat -> @+y:Nat -> {Nat.add(0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, x), 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, y)) == 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, Nat.add(x, y)) : Nat}2^k x + 2^k y == 2^k (x + y)
def sc_dbl source · line 48 · raw
@+k:Nat -> @+x:Nat -> {Nat.add(0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, x), 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, x)) == 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(1n+k, x) : Nat}2^k x + 2^k x == 2^(k+1) x
def sc_sc source · line 52 · raw
@+j:Nat -> @+k:Nat -> @+x:Nat -> {0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(j, 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, x)) == 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(Nat.add(j, k), x) : Nat}2^j (2^k x) == 2^(j+k) x
def mul_sc_r source · line 56 · raw
@+k:Nat -> @+one:Nat -> @+h1:{one == 1n : Nat} -> @+x:Nat -> {Nat.mul(x, 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, one)) == 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, x) : Nat}x 2^k == 2^k x
def mul_sc2 source · line 60 · raw
@+j:Nat -> @+k:Nat -> @+x:Nat -> @+y:Nat -> {Nat.mul(0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(j, x), 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, y)) == 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(Nat.add(j, k), Nat.mul(x, y)) : Nat}(2^j x)(2^k y) == 2^(j+k) (x y)
def le_refl source · line 69 · raw
@+x:Nat -> {Nat.is_le(x, x) == True{} : Bool}
def le_add_r source · line 73 · raw
@+x:Nat -> @+a:Nat -> @+y:Nat -> @+h:{Nat.is_le(x, a) == True{} : Bool} -> {Nat.is_le(Nat.add(x, y), Nat.add(a, y)) == True{} : Bool}x <= a -> x + y <= a + y
def le_add2 source · line 79 · raw
@+x:Nat -> @+y:Nat -> @+a:Nat -> @+b:Nat -> @+hx:{Nat.is_le(x, a) == True{} : Bool} -> @+hy:{Nat.is_le(y, b) == True{} : Bool} -> {Nat.is_le(Nat.add(x, y), Nat.add(a, b)) == True{} : Bool}
def le_mul2 source · line 83 · raw
@+x:Nat -> @+y:Nat -> @+a:Nat -> @+b:Nat -> @+hx:{Nat.is_le(x, a) == True{} : Bool} -> @+hy:{Nat.is_le(y, b) == True{} : Bool} -> {Nat.is_le(Nat.mul(x, y), Nat.mul(a, b)) == True{} : Bool}x <= a, y <= b -> x y <= a b
def le_sc source · line 90 · raw
@+k:Nat -> @+x:Nat -> @+a:Nat -> @+h:{Nat.is_le(x, a) == True{} : Bool} -> {Nat.is_le(0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, x), 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(k, a)) == True{} : Bool}
def sc_mono source · line 94 · raw
@+d:Nat -> @+a:Nat -> @+x:Nat -> {Nat.is_le(0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(a, x), 0xa7e654f9780078ca65bf9e187da99d3e/proofs/lib/word.sc(Nat.add(d, a), x)) == True{} : Bool}2^a <= 2^b for a <= b, with b = d + a