~/bend-docscommunity

proofs/math/typed/f64sqv.bend checks

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

21 imports
import Base
import ../../../spec/lib/common.bend as C
import ../../../spec/math/w64.bend as SW
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 ./natcmp.bend as NC
import ./u32laws.bend as LW
import ./w64add.bend as WA
import ./w64isq.bend as ISQ
import ./f64round.bend as FR
import ./f64sqa.bend as AQ
import ./f64sqw.bend as QW
import ./w64mul.bend as W64M
import ./w64div.bend as W64D
import ../natural/sqrtn.bend as SQ2

Definitions

def v source · line 26 · raw

@+x:U32 -> Nat

def mone source · line 29 · raw

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

def one_le source · line 32 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> {Nat.is_le(1n, one) == True{} : Bool}

def psq source · line 36 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+k:Nat -> {Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(k, one), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(k, one)) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(Nat.add(k, k), one) : Nat}

(2^k)^2 as one shift

def lo_val source · line 39 · raw

@+w:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(32n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(w)) == True{} : Bool} -> {v(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(w)) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(w) : Nat}

def shmk source · line 44 · raw

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

def p_lt source · line 48 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+k:Nat -> {Nat.is_lt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(k, one), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(1n+k, one)) == True{} : Bool}

def vn62 source · line 53 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> {Nat.is_lt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(62n, one)) == True{} : Bool}

def vn60 source · line 56 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {Nat.is_le(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(60n, one), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool}

def iv31 source · line 59 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {Nat.is_lt(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(31n, one)) == True{} : Bool}

def iw_v source · line 62 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)) == 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) : Nat}

def iw32 source · line 65 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(32n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh))) == True{} : Bool}

def lo_iv source · line 69 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {v(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh))) == 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) : Nat}

def plus1 source · line 72 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {Nat.add(v(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh))), v(1)) == 1n+0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) : Nat}

def add1_v source · line 75 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {v(U32.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)), 1)) == 1n+0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) : Nat}

def r0_v source · line 81 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64{0, U32.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)), 1)}) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, Nat.add(one, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))) : Nat}

r0 = (isqrt(nh) + 1) * 2^32

def nn_eq source · line 85 · raw

@+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))) : Nat}

def s_lo source · line 88 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {Nat.is_le(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))) == True{} : Bool}

def ilt1 source · line 92 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {Nat.is_lt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh), Nat.mul(Nat.add(one, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))), Nat.add(one, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))))) == True{} : Bool}

shift(32, isqrt nh) <= S < r0

def s_hi source · line 95 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> @+r0w:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+hR0:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(r0w) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, Nat.add(one, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))) : Nat} -> @+hhi:{U32.is_zero(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.hi(r0w)) == False{} : Bool} -> {Nat.is_lt(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(r0w)) == True{} : Bool}

def s62 source · line 101 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {Nat.is_le(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(62n, one), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))) == True{} : Bool}

S >= 2^62

def r0_sd source · line 105 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> @+r0w:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+hR0:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(r0w) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, Nat.add(one, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))) : Nat} -> @+hhi:{U32.is_zero(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.hi(r0w)) == False{} : Bool} -> {Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))), Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(r0w), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))))) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(r0w) : Nat}

def r0_hi source · line 108 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {U32.is_zero(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.hi(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64{0, U32.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)), 1)})) == False{} : Bool}

def r0_63 source · line 111 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> @+r0w:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+hR0:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(r0w) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, Nat.add(one, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))) : Nat} -> @+hhi:{U32.is_zero(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.hi(r0w)) == False{} : Bool} -> {Nat.is_le(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(r0w), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(63n, one)) == True{} : Bool}

def not_t source · line 121 · raw

@+x:Bool -> @+h:{Bool.not(x) == True{} : Bool} -> {x == False{} : Bool}

def dq_le source · line 129 · raw

@+x:Nat -> @+D:Nat -> @+hD:{Nat.is_lt(0n, D) == True{} : Bool} -> {Nat.is_le(Nat.mul(Nat.div(x, D), D), x) == True{} : Bool}

q D <= x < (q + 1) D for q = x / D

def dq_lt source · line 136 · raw

@+x:Nat -> @+D:Nat -> @+hD:{Nat.is_lt(0n, D) == True{} : Bool} -> {Nat.is_lt(x, Nat.mul(1n+Nat.div(x, D), D)) == True{} : Bool}

def s_v source · line 146 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {v(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh))) == 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) : Nat}

def hn_v source · line 149 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {Nat.add(Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))), Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh), Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))))) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh) : Nat}

def mm_v source · line 152 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.mul32(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)))) == Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))) : Nat}

def w_v source · line 155 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.sub(nh, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.mul32(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh))))) == Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh), Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))) : Nat}

def r_le source · line 160 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {Nat.is_le(Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh), Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))), Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))) == True{} : Bool}

r <= 2 s, as nh < (s + 1)^2

def d_lt source · line 168 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {Nat.is_lt(Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, one)) == True{} : Bool}

2 s < 2^32

def dw_v source · line 174 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {v(U32.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)))) == Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))) : Nat}

def d_pos source · line 180 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {Nat.is_lt(0n, Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))) == True{} : Bool}

2 s > 0, as nh >= 2^60

def dw_nz source · line 185 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {U32.is_zero(U32.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)))) == False{} : Bool}

def lo_w source · line 190 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {v(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.sub(nh, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.mul32(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)))))) == Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh), Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))) : Nat}

def q_v source · line 195 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.fst_q(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.div32(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64{0, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.sub(nh, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.mul32(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)))))}, U32.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lo(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.isqrt(nh)))))) == Nat.div(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh), Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))))), Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))) : Nat}

def hq_le source · line 198 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+nh:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h62:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(62n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == True{} : Bool} -> @+h60:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(60n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)) == False{} : Bool} -> {Nat.is_le(Nat.mul(Nat.div(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh), Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh))))), Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))), Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(32n, Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh), Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.isqrt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/w64.value(nh)))))) == True{} : Bool}