~/bend-docscommunity

proofs/math/typed/natcmp.bend checks

raw source on the hub · import bend-collections-laws-math@1.0.0.0/proofs/math/typed/natcmp.bend as Natcmp

8 imports
import Base
import ../../../spec/lib/common.bend as C
import ../../../spec/math/f64.bend as SF
import ../../lib/nat.bend as N
import ../../lib/logic.bend as L
import ../../lib/lemmas/proofs/nat_algebra.bend as NA
import ./width.bend as WW
import ./u32laws.bend as LW

Definitions

def absurd_tf source · line 13 · raw

@-T:Type -> @+h:{False{} == True{} : Bool} -> T

def lex source · line 16 · raw

@c:Cmp -> @d:Cmp -> Cmp

def cmp_dbl source · line 25 · raw

@+a:Nat -> @+b:Nat -> {Nat.cmp(Nat.double(a), Nat.double(b)) == Nat.cmp(a, b) : Cmp}

def cmp_shift source · line 36 · raw

@+k:Nat -> @+a:Nat -> @+b:Nat -> {Nat.cmp(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(k, a), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(k, b)) == Nat.cmp(a, b) : Cmp}

def cmp_add source · line 43 · raw

@+d:Nat -> @+a:Nat -> @+b:Nat -> {Nat.cmp(Nat.add(d, a), Nat.add(d, b)) == Nat.cmp(a, b) : Cmp}

def cmp_addr source · line 50 · raw

@+a:Nat -> @+b:Nat -> @+s:Nat -> {Nat.cmp(Nat.add(a, s), Nat.add(b, s)) == Nat.cmp(a, b) : Cmp}

def lt_c source · line 55 · raw

@+c:Cmp -> @+h:{Cmp.is_lt(c) == True{} : Bool} -> {c == LT{} : Cmp}

def eq_c source · line 64 · raw

@+c:Cmp -> @+h:{Cmp.is_eq(c) == True{} : Bool} -> {c == EQ{} : Cmp}

def cmp_lt source · line 73 · raw

@+a:Nat -> @+b:Nat -> @+h:{Nat.is_lt(a, b) == True{} : Bool} -> {Nat.cmp(a, b) == LT{} : Cmp}

def cmp_flip source · line 76 · raw

@+a:Nat -> @+b:Nat -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/f64.flip(Nat.cmp(a, b)) == Nat.cmp(b, a) : Cmp}

def cmp_gt source · line 87 · raw

@+a:Nat -> @+b:Nat -> @+h:{Nat.is_lt(b, a) == True{} : Bool} -> {Nat.cmp(a, b) == GT{} : Cmp}

def cmp_refl source · line 90 · raw

@+a:Nat -> {Nat.cmp(a, a) == EQ{} : Cmp}

def eq_of_cmp source · line 93 · raw

@+a:Nat -> @+b:Nat -> @+h:{Nat.cmp(a, b) == EQ{} : Cmp} -> {a == b : Nat}

def lt_of_cmp source · line 96 · raw

@+a:Nat -> @+b:Nat -> @+h:{Nat.cmp(a, b) == LT{} : Cmp} -> {Nat.is_lt(a, b) == True{} : Bool}

def lt_of_gt source · line 99 · raw

@+a:Nat -> @+b:Nat -> @+h:{Nat.cmp(a, b) == GT{} : Cmp} -> {Nat.is_lt(b, a) == True{} : Bool}

def cl_c source · line 103 · raw

@+k:Nat -> @+x1:Nat -> @+y1:Nat -> @+x2:Nat -> @+y2:Nat -> @+hx1:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(k, x1) == True{} : Bool} -> @+hx2:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(k, x2) == True{} : Bool} -> @+c:Cmp -> @+hc:{Nat.cmp(y1, y2) == c : Cmp} -> {Nat.cmp(Nat.add(x1, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(k, y1)), Nat.add(x2, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(k, y2))) == lex(c, Nat.cmp(x1, x2)) : Cmp}

two limbs compare lexicographically

def cmp_limbs source · line 112 · raw

@+k:Nat -> @+x1:Nat -> @+y1:Nat -> @+x2:Nat -> @+y2:Nat -> @+hx1:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(k, x1) == True{} : Bool} -> @+hx2:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(k, x2) == True{} : Bool} -> {Nat.cmp(Nat.add(x1, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(k, y1)), Nat.add(x2, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(k, y2))) == lex(Nat.cmp(y1, y2), Nat.cmp(x1, x2)) : Cmp}

def min_le_l source · line 115 · raw

@+a:Nat -> @+b:Nat -> {Nat.is_le(Nat.min(a, b), a) == True{} : Bool}

def min_le_r source · line 124 · raw

@+a:Nat -> @+b:Nat -> {Nat.is_le(Nat.min(a, b), b) == True{} : Bool}

def sh_split source · line 134 · raw

@+a:Nat -> @+m:Nat -> @+p:Nat -> @+h:{Nat.is_le(m, a) == True{} : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(a, p) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(m, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(Nat.sub(a, m), p)) : Nat}

shift(a, p) = shift(m, shift(a - m, p)) for m <= a

def cmp_min source · line 138 · raw

@+a:Nat -> @+b:Nat -> @+p:Nat -> @+q:Nat -> {Nat.cmp(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(Nat.sub(a, Nat.min(a, b)), p), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(Nat.sub(b, Nat.min(a, b)), q)) == Nat.cmp(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(a, p), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(b, q)) : Cmp}

a common scale 2^min cancels