def hm2

bend-collections-laws-math@1.0.0.0 · proofs/math/typed/f64cmp.bend:228

import bend-collections-laws-math@1.0.0.0/proofs/math/typed/f64cmp.bend as F64cmp
import Base
import bend-collections-laws-math@1.0.0.0/spec/lib/common.bend as C
import bend-collections-laws-math@1.0.0.0/spec/math/f64.bend as SF
import bend-collections-laws-math@1.0.0.0/spec/math/w64.bend as SW
import bend-collections-laws-math@1.0.0.0/src/math/f64.bend as F
import bend-collections-laws-math@1.0.0.0/src/math/w64.bend as X
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/w64add.bend as WA
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/natcmp.bend as NC

228def hm2(+one: Nat, +h1: {one == 1n : Nat}, +xl: U32, +xh: U32, +yl: U32, +yh: U32, +nx: {SF.is_nan(F.Bits{xl, xh}) == False{} : Bool}, +ny: {SF.is_nan(F.Bits{yl, yh}) == False{} : Bool}) -> {X.lt(F.mag(F.Bits{yl, yh}), F.mag(F.Bits{xl, xh})) == Cmp.is_lt(SF.flip(SF.mag_cmp(F.Bits{xl, xh}, F.Bits{yl, yh}))) : Bool}:
229  e1 = WA.lt_value(F.mag(F.Bits{yl, yh}), F.mag(F.Bits{xl, xh}))
230  +e2 = Equal.trans(Bool, Nat.is_lt(SW.value(F.mag(F.Bits{yl, yh})), SW.value(F.mag(F.Bits{xl, xh}))), Nat.is_lt(Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh}))), SW.value(F.mag(F.Bits{xl, xh}))), Nat.is_lt(Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh}))), Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh})))), Equal.cong(Nat, Bool, t => Nat.is_lt(t, SW.value(F.mag(F.Bits{xl, xh}))), SW.value(F.mag(F.Bits{yl, yh})), Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh}))), magv(yl, yh, 2147483647, {==})), Equal.cong(Nat, Bool, t => Nat.is_lt(Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh}))), t), SW.value(F.mag(F.Bits{xl, xh})), Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh}))), magv(xl, xh, 2147483647, {==})))
231  +e3 = Equal.cong(Cmp, Bool, t => Cmp.is_lt(t), Nat.cmp(Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh}))), Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh})))), SF.flip(Nat.cmp(Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh}))), Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh}))))), Equal.sym(Cmp, SF.flip(Nat.cmp(Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh}))), Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh}))))), Nat.cmp(Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh}))), Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh})))), NC.cmp_flip(Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh}))), Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh}))))))
232  +e4 = Equal.cong(Cmp, Bool, t => Cmp.is_lt(SF.flip(t)), Nat.cmp(Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh}))), Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh})))), SF.mag_cmp(F.Bits{xl, xh}, F.Bits{yl, yh}), Equal.sym(Cmp, SF.mag_cmp(F.Bits{xl, xh}, F.Bits{yl, yh}), Nat.cmp(Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh}))), Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh})))), magc(one, h1, xl, xh, yl, yh, nx, ny)))
233  Equal.trans(Bool, X.lt(F.mag(F.Bits{yl, yh}), F.mag(F.Bits{xl, xh})), Nat.is_lt(SW.value(F.mag(F.Bits{yl, yh})), SW.value(F.mag(F.Bits{xl, xh}))), Cmp.is_lt(SF.flip(SF.mag_cmp(F.Bits{xl, xh}, F.Bits{yl, yh}))), e1, Equal.trans(Bool, Nat.is_lt(SW.value(F.mag(F.Bits{yl, yh})), SW.value(F.mag(F.Bits{xl, xh}))), Nat.is_lt(Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh}))), Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh})))), Cmp.is_lt(SF.flip(SF.mag_cmp(F.Bits{xl, xh}, F.Bits{yl, yh}))), e2, Equal.trans(Bool, Nat.is_lt(Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh}))), Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh})))), Cmp.is_lt(SF.flip(Nat.cmp(Nat.add(SF.frac(F.Bits{xl, xh}), C.shift(52n, SF.efield(F.Bits{xl, xh}))), Nat.add(SF.frac(F.Bits{yl, yh}), C.shift(52n, SF.efield(F.Bits{yl, yh})))))), Cmp.is_lt(SF.flip(SF.mag_cmp(F.Bits{xl, xh}, F.Bits{yl, yh}))), e3, e4)))

Uses (25)

Used by (2)