def sdb
bend-collections-laws-math@1.0.0.0 · proofs/math/typed/f64nrp.bend:67
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/f64nrp.bend as F64nrp
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/w64.bend as X
import bend-collections-laws-math@1.0.0.0/src/math/u64.bend as WU
import bend-collections-laws-math@1.0.0.0/src/math/natural.bend as M
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/lemmas/proofs/nat_algebra.bend as NA
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/f64bl.bend as BL
67def sdb(+sig: WU.U64, +h63: {C.fits(63n, SW.value(sig)) == True{} : Bool}) -> {Nat.add(Nat.sub(X.clz(sig), 1n), M.bit_length(SW.value(sig))) == 63n : Nat}:
68 +hb = BL.bl_le(63n, SW.value(sig), h63, Nat.is_le(M.bit_length(SW.value(sig)), 63n), {==})
69 Equal.trans(Nat, Nat.add(Nat.sub(X.clz(sig), 1n), M.bit_length(SW.value(sig))), Nat.add(Nat.sub(63n, M.bit_length(SW.value(sig))), M.bit_length(SW.value(sig))), 63n, Equal.cong(Nat, Nat, z => Nat.add(z, M.bit_length(SW.value(sig))), Nat.sub(X.clz(sig), 1n), Nat.sub(63n, M.bit_length(SW.value(sig))), esd(sig, h63)), Equal.trans(Nat, Nat.add(Nat.sub(63n, M.bit_length(SW.value(sig))), M.bit_length(SW.value(sig))), Nat.add(M.bit_length(SW.value(sig)), Nat.sub(63n, M.bit_length(SW.value(sig)))), 63n, NA.add_comm(Nat.sub(63n, M.bit_length(SW.value(sig))), M.bit_length(SW.value(sig))), N.sub_add(63n, M.bit_length(SW.value(sig)), hb)))