~/bend-docscommunity

proofs/math/typed/f64sqn.bend checks

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

10 imports
import Base
import ./natlight.bend as NL
import ../../../src/math/natural.bend as M
import ../../lib/nat.bend as N
import ../../lib/logic.bend as L
import ../../lib/lemmas/proofs/nat_algebra.bend as NA
import ../natural/arith.bend as NR
import ./width.bend as WW
import ./f64round.bend as FR
import ./f64sqa.bend as AQ

Definitions

def mul1 source · line 16 · raw

@+y:Nat -> {Nat.mul(1n, y) == y : Nat}

def two_mul source · line 19 · raw

@+S:Nat -> {Nat.mul(S, 2n) == Nat.add(S, S) : Nat}

def c14 source · line 22 · raw

@+S:Nat -> {Nat.mul(S, 14n) == Nat.add(Nat.add(S, S), Nat.mul(S, 12n)) : Nat}

def le_cancel_true source · line 25 · raw

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

def nw_lo source · line 29 · raw

@+N:Nat -> @+S:Nat -> @+c:Nat -> @+d:Nat -> @+rp:Nat -> @+hS:{S == 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(N) : Nat} -> @+hc:{Nat.add(c, d) == S : Nat} -> @+hr:{Nat.add(S, d) == 1n+rp : Nat} -> {Nat.is_le(Nat.add(S, S), Nat.add(Nat.add(S, d), Nat.div(N, 1n+rp))) == True{} : Bool}

the lower bound: 2 S <= r0 + Q, with S = c + d and r0 = S + d

def nw_prod source · line 41 · raw

@+S:Nat -> @+d:Nat -> @+c3:Nat -> @+hc3:{Nat.add(c3, d) == Nat.add(S, 14n) : Nat} -> @+hdd:{Nat.is_le(Nat.add(Nat.mul(d, d), 1n), Nat.mul(S, 12n)) == True{} : Bool} -> {Nat.is_le(Nat.mul(1n+S, 1n+S), Nat.mul(c3, Nat.add(S, d))) == True{} : Bool}

the product bound: (1 + S)^2 <= c3 * r0 when c3 + d = S + 14 and d^2 + 1 <= 12 S

def nw_hi source · line 56 · raw

@+N:Nat -> @+S:Nat -> @+d:Nat -> @+rp:Nat -> @+c3:Nat -> @+hS:{S == 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(N) : Nat} -> @+hr:{Nat.add(S, d) == 1n+rp : Nat} -> @+hc3:{Nat.add(c3, d) == Nat.add(S, 14n) : Nat} -> @+hdd:{Nat.is_le(Nat.add(Nat.mul(d, d), 1n), Nat.mul(S, 12n)) == True{} : Bool} -> {Nat.is_le(Nat.add(Nat.add(S, d), Nat.div(N, 1n+rp)), Nat.add(13n, Nat.add(S, S))) == True{} : Bool}

the upper bound: r0 + Q <= 2 S + 13

def half_lo source · line 66 · raw

@+S:Nat -> @+n:Nat -> @+h:{Nat.is_le(Nat.add(S, S), n) == True{} : Bool} -> {Nat.is_le(S, Nat.div(n, 2n)) == True{} : Bool}

halving: S <= (r0 + Q) / 2 <= S + 6

def half_hi source · line 69 · raw

@+S:Nat -> @+n:Nat -> @+h:{Nat.is_le(n, Nat.add(13n, Nat.add(S, S))) == True{} : Bool} -> {Nat.is_le(Nat.div(n, 2n), Nat.add(6n, S)) == True{} : Bool}