def hi_nz_c

bend-collections-laws-math@1.0.0.0 · proofs/math/typed/f64divv.bend:36

import bend-collections-laws-math@1.0.0.0/proofs/math/typed/f64divv.bend as F64divv
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/w64.bend as SW
import bend-collections-laws-math@1.0.0.0/src/math/u64.bend as WU
import bend-collections-laws-math@1.0.0.0/proofs/lib/nat.bend as N
import bend-collections-laws-math@1.0.0.0/proofs/lib/logic.bend as L
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/u32laws.bend as LW

36def hi_nz_c(+l: U32, +h: U32, +hf: {C.fits(32n, SW.value(WU.U64{l, h})) == False{} : Bool}, +z: Bool, +hz: {Nat.is_eq(v(h), 0n) == z : Bool}) -> {z == False{} : Bool}:
37  match z:
38    case True{}:
39      +e0 = N.eq_from_is_eq(v(h), 0n, hz)
40      +e1 = Equal.trans(Nat, SW.value(WU.U64{l, h}), Nat.add(v(l), C.shift(32n, 0n)), v(l), Equal.cong(Nat, Nat, w => Nat.add(v(l), C.shift(32n, w)), v(h), 0n, e0), N.add_zero(v(l)))
41      +f1 = L.subst(Nat, w => {C.fits(32n, w) == True{} : Bool}, v(l), SW.value(WU.U64{l, h}), Equal.sym(Nat, SW.value(WU.U64{l, h}), v(l), e1), LW.vb(l))
42      Equal.trans(Bool, True{}, C.fits(32n, SW.value(WU.U64{l, h})), False{}, Equal.sym(Bool, C.fits(32n, SW.value(WU.U64{l, h})), True{}, f1), hf)
43    case False{}:
44      {==}

Uses (17)

Used by (1)