~/bend-docscommunity

proofs/math/typed/f64divf.bend checks

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

25 imports
import Base
import ./f64light.bend as FL
import ../../../spec/lib/common.bend as C
import ../../../spec/math/f64.bend as SF
import ../../../spec/math/w64.bend as SW
import ../../../src/math/f64.bend as F
import ../../../src/math/w64.bend as X
import ../../../src/math/u64.bend as WU
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 ./w64add.bend as WA
import ./w64sh.bend as SH
import ./f64round.bend as FR
import ./f64rtools.bend as RT
import ./f64mulp.bend as MP
import ./f64adda.bend as AA
import ./f64divd.bend as DD
import ./w64mm.bend as MM
import ./w64est.bend as W64E
import ./f64divn.bend as DN
import ./f64divq.bend as DQ

Definitions

def v source · line 31 · raw

@+x:U32 -> Nat

def e0 source · line 34 · raw

@+rl:U32 -> @+rh:U32 -> @+ml:U32 -> @+mh:U32 -> @+t:Nat -> U32

def dq96q source · line 37 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+r:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+t:Nat -> @+hx:{Nat.is_lt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(r), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(b)) == True{} : Bool} -> @+hz:{U32.is_zero(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.hi(b)) == False{} : Bool} -> @+ht:{0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.bitlen(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.hi(b)) == t : Nat} -> {v(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.q96(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64{0, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(r)}, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.hi(r), b, t)) == Nat.div(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(r)), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(b)) : Nat}

def dq96r source · line 42 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+r:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+t:Nat -> @+hx:{Nat.is_lt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(r), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(b)) == True{} : Bool} -> @+hz:{U32.is_zero(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.hi(b)) == False{} : Bool} -> @+ht:{0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.bitlen(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.hi(b)) == t : Nat} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.sub(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64{0, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(r)}, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.fst_q(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.mul_32_64(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.q96(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64{0, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(r)}, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.hi(r), b, t), b)))) == Nat.mod(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(r)), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(b)) : Nat}

def dm2 source · line 47 · raw

@+l:Bool -> @+r:Bool -> {Bool.or(Bool.not(r), Bool.not(l)) == Bool.not(Bool.and(l, r)) : Bool}

def nfit_mono_c source · line 50 · raw

@+a:Nat -> @+b:Nat -> @+x:Nat -> @+hab:{Nat.is_le(a, b) == True{} : Bool} -> @+h:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(b, x) == False{} : Bool} -> @+c:Bool -> @+hc:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(a, x) == c : Bool} -> {c == False{} : Bool}

def nfit_mono source · line 53 · raw

@+a:Nat -> @+b:Nat -> @+x:Nat -> @+hab:{Nat.is_le(a, b) == True{} : Bool} -> @+h:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(b, x) == False{} : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(a, x) == False{} : Bool}

def dgen source · line 57 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+s:Bool -> @+e:Nat -> @+x:Nat -> @+hx:{Nat.add(x, 2180n) == e : Nat} -> @+aw:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+bw:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+bp:Nat -> @+hBp:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(bw) == 1n+bp : Nat} -> @+MX:Nat -> @+yp:Nat -> @+u:Nat -> @+w:Nat -> @+P:Nat -> @+dp:Nat -> @+ha:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(aw) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(u, MX) : Nat} -> @+hb:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(bw) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(w, 1n+yp) : Nat} -> @+hP:{Nat.add(62n, u) == Nat.add(w, P) : Nat} -> @+hdp:{Nat.add(dp, P) == 200n : Nat} -> @+hle:{Nat.is_le(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(bw), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(aw)) == True{} : Bool} -> @+hRlt:{Nat.is_lt(Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(aw), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(bw)), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(bw)) == True{} : Bool} -> @+hhi:{U32.is_zero(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.hi(bw)) == False{} : Bool} -> @+E:Nat -> @+hEx:{Nat.add(E, 1n+dp) == x : Nat} -> {0xf86f5f1d9a594d5a5cff999100e01d03/src/math/f64.div_q(s, e, aw, bw) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/f64.round(s, Nat.add(Nat.mul(2n, Nat.div(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(200n, MX), 1n+yp)), Nat.min(Nat.mod(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(200n, MX), 1n+yp), 1n)), E) : 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/f64.F64}

the quotient step, for a in [b, 2b), a = MX * 2^u, b = MY * 2^w, 62 + u = w + P, P + dp = 200