~/bend-docscommunity

proofs/math/typed/fix64.bend checks

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

32 imports
import Base
import ../../../spec/lib/common.bend as C
import ../../../spec/math/generic.bend as SG
import ../../../spec/math/fixed.bend as SF
import ../../../src/math/w64.bend as X
import ../../../src/math/u64.bend as WU
import ../../../src/math/fixed.bend as F
import ../../../src/math/generic.bend as GN
import ../../../src/math/instances.bend as I
import ../../../src/math/num.bend as NM
import ../../../src/math/natural.bend as M
import ../../lib/nat.bend as N
import ../../lib/lemmas/proofs/nat_algebra.bend as NA
import ../natural/modpow.bend as MP
import ../natural/bits.bend as B
import ./u32laws.bend as LW
import ./shrn.bend as SHN
import ../../lib/u32.bend as U3
import ../../lib/arith.bend as AR
import ../natural/arith.bend as R
import ./width.bend as WW
import ./w64add.bend as WA
import ./w64sh.bend as SH
import ./w64dmtop.bend as DT
import ./w64dmrem.bend as DR
import ./u64laws.bend as LV
import ./u64int.bend as UI
import ./u64mont.bend as MT
import ./f64bits.bend as FB
import ./fixgen.bend as G
import ../../lib/word.bend as WD
import ../../lib/logic.bend as L

Definitions

def vs source · line 40 · raw

@+s:U32 -> Nat

def zero_add source · line 45 · raw

@+x:Nat -> {Nat.add(0n, x) == x : Nat}

def top1w source · line 52 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+w:U32 -> @+pw:{w == U32{0xf86f5f1d9a594d5a5cff999100e01d03/proofs/lib/word.mask(32n, 32n)} : U32} -> {1n+0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64{w, w}) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, one) : Nat}

def top1 source · line 55 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> {1n+0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_max) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, one) : Nat}

def topw source · line 58 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+w:U32 -> @+pw:{w == U32{0xf86f5f1d9a594d5a5cff999100e01d03/proofs/lib/word.mask(32n, 32n)} : U32} -> {Bool.and(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64{w, w})), Bool.not(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(64n, 1n+0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64{w, w})))) == True{} : Bool}

def top source · line 65 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> {Bool.and(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_max)), Bool.not(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(64n, 1n+0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_max)))) == True{} : Bool}

def checked_add source · line 70 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.CheckedAdd.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_checked_add, 64n, a, b)

def wrapping_add source · line 73 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.WrappingAdd.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_wrapping_add, 64n, a, b)

def saturating_add source · line 76 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.SaturatingAdd.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_saturating_add, 64n, a, b)

def overflowing_add_value source · line 79 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingAdd.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_add, 64n, a, b)

def overflowing_add_flag source · line 82 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingAdd.flag(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_add, 64n, a, b)

def checked_mul source · line 85 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.CheckedMul.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_checked_mul, 64n, a, b)

def wrapping_mul source · line 88 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.WrappingMul.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_wrapping_mul, 64n, a, b)

def saturating_mul source · line 91 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.SaturatingMul.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_saturating_mul, 64n, a, b)

def overflowing_mul_value source · line 94 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingMul.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_mul, 64n, a, b)

def overflowing_mul_flag source · line 97 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingMul.flag(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_mul, 64n, a, b)

def csub source · line 102 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+ok:Bool -> @+hok:{Nat.is_le(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a)) == ok : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.mval(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.opt(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.lt(a, b), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.sub(a, b))) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.keep(ok, Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b))) : Maybe<&2, Nat>}

def checked_sub source · line 109 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.CheckedSub.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_checked_sub, a, b)

def sub_big source · line 112 · raw

@+n:Nat -> @+d:Nat -> @+h:{Nat.is_le(n, d) == True{} : Bool} -> {Nat.sub(n, d) == 0n : Nat}

def ssub source · line 121 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+c:Bool -> @+hn:{Nat.is_lt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b)) == c : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.pick(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, c, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_zero, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.sub(a, b))) == Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b)) : Nat}

def saturating_sub source · line 128 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.SaturatingSub.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_saturating_sub, a, b)

def overflowing_sub_flag source · line 131 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingSub.flag(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_sub, a, b)

def cdiv source · line 136 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+z:Bool -> @+hz:{0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.is_zero(b) == z : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.mval(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_cdiv(z, a, b)) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.keep(Bool.not(Nat.is_eq(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b), 0n)), Nat.div(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b))) : Maybe<&2, Nat>}

def checked_div source · line 147 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.CheckedDiv.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_checked_div, a, b)

def crem source · line 150 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+z:Bool -> @+hz:{0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.is_zero(b) == z : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.mval(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_crem(z, a, b)) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.keep(Bool.not(Nat.is_eq(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b), 0n)), Nat.mod(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b))) : Maybe<&2, Nat>}

def checked_rem source · line 161 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.CheckedRem.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_checked_rem, a, b)

def am source · line 166 · raw

@+s:U32 -> {U32.to_nat(U32.and(s, 63)) == Nat.mod(vs(s), 64n) : Nat}

def am_small source · line 169 · raw

@+s:U32 -> @+h:{Nat.is_lt(vs(s), 64n) == True{} : Bool} -> {U32.to_nat(U32.and(s, 63)) == vs(s) : Nat}

def lt64 source · line 172 · raw

@+s:U32 -> {U32.is_lt(s, 64) == Nat.is_lt(vs(s), 64n) : Bool}

def wrapping_shl source · line 175 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+s:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.WrappingShl.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_wrapping_shl, 64n, a, s)

def wrapping_shr source · line 179 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+s:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.WrappingShr.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_wrapping_shr, 64n, a, s)

def overflowing_shl_value source · line 183 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+s:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingShl.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_shl, 64n, a, s)

def overflowing_shr_value source · line 186 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+s:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingShr.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_shr, 64n, a, s)

def overflowing_shl_flag source · line 189 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+s:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingShl.flag(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_shl, a, s, 64n)

def overflowing_shr_flag source · line 192 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+s:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingShr.flag(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_shr, a, s, 64n)

def cshl source · line 195 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+s:U32 -> @+ok:Bool -> @+hok:{Nat.is_lt(vs(s), 64n) == ok : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.mval(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.opt(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, Bool.not(U32.is_lt(s, 64)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.shl(a, U32.to_nat(U32.and(s, 63))))) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.keep(ok, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.low(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(vs(s), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a)))) : Maybe<&2, Nat>}

def checked_shl source · line 205 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+s:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.CheckedShl.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_checked_shl, 64n, a, s)

def cshr source · line 208 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+s:U32 -> @+ok:Bool -> @+hok:{Nat.is_lt(vs(s), 64n) == ok : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.mval(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.opt(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, Bool.not(U32.is_lt(s, 64)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.shr(a, U32.to_nat(U32.and(s, 63))))) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.keep(ok, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.high(vs(s), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a))) : Maybe<&2, Nat>}

def checked_shr source · line 218 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+s:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.CheckedShr.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_checked_shr, 64n, a, s)

def pw source · line 223 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+e:U32 -> Nat

def gpow source · line 226 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+e:U32 -> Result<&2, &2, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/num.NumError, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64>

def cpow source · line 229 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+e:U32 -> @+ok:Bool -> @+hok:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(64n, pw(a, e)) == ok : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.mval(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.res_opt(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, gpow(a, e))) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.keep(ok, pw(a, e)) : Maybe<&2, Nat>}

def checked_pow source · line 240 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+e:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.CheckedPow.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_checked_pow, 64n, a, e)

def spow source · line 243 · raw

@+top:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+ht:{Bool.and(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(top)), Bool.not(0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(64n, 1n+0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(top)))) == True{} : Bool} -> @+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+e:U32 -> @+ok:Bool -> @+hok:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(64n, pw(a, e)) == ok : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.saturated(64n, pw(a, e), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.or_top(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, top, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.res_opt(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, gpow(a, e)))), ok) == True{} : Bool}

def saturating_pow source · line 255 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+e:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.SaturatingPow.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_saturating_pow, 64n, a, e)

def opow source · line 258 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+e:U32 -> @+ok:Bool -> @+hok:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.fits(64n, pw(a, e)) == ok : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.res_bad(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, gpow(a, e)) == Bool.not(ok) : Bool}

def overflowing_pow_flag source · line 269 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+e:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingPow.flag(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_pow, 64n, a, e)

def lt_m source · line 277 · raw

@+mp:Nat -> @+hp:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.pow2(64n) == 1n+mp : Nat} -> @+x:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> {Nat.is_lt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(x), 1n+mp) == True{} : Bool}

def mul_m source · line 280 · raw

@+mp:Nat -> @+hp:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.pow2(64n) == 1n+mp : Nat} -> @+x:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+y:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.mul(x, y)) == Nat.mod(Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(x), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(y)), 1n+mp) : Nat}

def wp_base source · line 283 · raw

@+mp:Nat -> @+hp:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.pow2(64n) == 1n+mp : Nat} -> @+e:U32 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+acc:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+h0:{vs(e) == 0n : Nat} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(acc) == Nat.mod(Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(acc), Nat.pow(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b), vs(e))), 1n+mp) : Nat}

def wp_odd source · line 289 · raw

@+mp:Nat -> @+hp:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.pow2(64n) == 1n+mp : Nat} -> @+e:U32 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+acc:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+r:Nat -> @+hodd:{0xf86f5f1d9a594d5a5cff999100e01d03/src/math/instances.u32_odd(e) == Nat.is_eq(r, 1n) : Bool} -> @+hr:{Nat.is_lt(r, 2n) == True{} : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.pick(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/instances.u32_odd(e), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.mul(acc, b), acc)) == 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/natural.pow_mod_odd(1n+mp, r, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(acc)) : Nat}

the odd bit multiplies acc by b (pow_mod_odd on the values)

def half_e source · line 300 · raw

@+e:U32 -> {vs(U32.shr(e)) == Nat.div(vs(e), 2n) : Nat}

def wp_go source · line 303 · raw

@fuel:Nat -> @+mp:Nat -> @+hp:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.pow2(64n) == 1n+mp : Nat} -> @+e:U32 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+acc:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+z:Bool -> @+hz:{U32.is_zero(e) == z : Bool} -> @+he:{Nat.is_lt(vs(e), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.pow2(fuel)) == True{} : Bool} -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_wpow(fuel, e, b, acc, z)) == Nat.mod(Nat.mul(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(acc), Nat.pow(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b), vs(e))), 1n+mp) : Nat}

def wp_top source · line 332 · raw

@+mp:Nat -> @+hp:{0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.pow2(64n) == 1n+mp : Nat} -> @+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+e:U32 -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_wrapping_pow(a, e)) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.low(64n, pw(a, e)) : Nat}

def wrapping_pow source · line 337 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+e:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.WrappingPow.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_wrapping_pow, 64n, a, e)

def overflowing_pow_value source · line 340 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+e:U32 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingPow.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_pow, 64n, a, e)

def wsub_val source · line 345 · raw

@+m:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+one:Nat -> @+h1:{one == 1n : Nat} -> @+hmo:{1n+0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(m) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, one) : Nat} -> @+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> {0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.add(a, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.sub(m, b)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64{1, 0})) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.low(64n, Nat.add(Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a), Nat.sub(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(m), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b))), 1n)) : Nat}

def wsub_g source · line 353 · raw

@+one:Nat -> @+h1:{one == 1n : Nat} -> @+m:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+hmo:{1n+0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(m) == 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, one) : Nat} -> @+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> {Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.add(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.add(a, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/w64.sub(m, b)), 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64{1, 0})), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b)) == Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.bn(Nat.is_lt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b))))) : Nat}

def wsub_eq source · line 361 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> {Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_wsub(a, b)), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b)) == Nat.add(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/lib/common.shift(64n, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.bn(Nat.is_lt(0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(a), 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val(b))))) : Nat}

def wrapping_sub source · line 364 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.WrappingSub.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_wrapping_sub, 64n, a, b)

def overflowing_sub_value source · line 367 · raw

@+a:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> @+b:0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64 -> 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/fixed.OverflowingSub.value(0xf86f5f1d9a594d5a5cff999100e01d03/src/math/u64.U64, 0xf86f5f1d9a594d5a5cff999100e01d03/spec/math/generic.u64_val, 0xf86f5f1d9a594d5a5cff999100e01d03/src/math/fixed.u64_overflowing_sub, 64n, a, b)