def top10
bend-collections-laws-math@1.0.0.0 · proofs/math/typed/f64addb.bend:30
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/f64addb.bend as F64addb
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/proofs/lib/logic.bend as L
import bend-collections-laws-math@1.0.0.0/proofs/lib/word.bend as WD
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/width.bend as WW
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/w64sh.bend as SH
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/f64rtools.bend as RT
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/f64adda.bend as AA
30
31def top10(+one: Nat, +h1: {one == 1n : Nat}, +f: WU.U64, +Fr: Nat, +hf: {SW.value(f) == Fr : Nat}, +hF: {C.fits(52n, Fr) == True{} : Bool}, +c: U32, +hc: {c == U32{WD.pw(32n, 30n)} : U32}) -> {SW.value(X.add(X.shl(f, 10n), WU.U64{0, c})) == C.shift(10n, Nat.add(Fr, C.shift(52n, one))) : Nat}:
32 +hFv = L.subst(Nat, z => {C.fits(52n, z) == True{} : Bool}, Fr, SW.value(f), Equal.sym(Nat, SW.value(f), Fr, hf), hF)
33 +e10 = Equal.trans(Nat, SW.value(X.shl(f, 10n)), C.shift(10n, SW.value(f)), C.shift(10n, Fr), AA.shl_v(f, 10n, 52n, {==}, {==}, hFv), Equal.cong(Nat, Nat, z => C.shift(10n, z), SW.value(f), Fr, hf))
34 a1 = WA.add_value(X.shl(f, 10n), WU.U64{0, c})
35 +es = Equal.trans(Nat, Nat.add(SW.value(X.shl(f, 10n)), SW.value(WU.U64{0, c})), Nat.add(C.shift(10n, Fr), SW.value(WU.U64{0, c})), C.shift(10n, Nat.add(Fr, C.shift(52n, one))), Equal.cong(Nat, Nat, z => Nat.add(z, SW.value(WU.U64{0, c})), SW.value(X.shl(f, 10n)), C.shift(10n, Fr), e10), Equal.trans(Nat, Nat.add(C.shift(10n, Fr), SW.value(WU.U64{0, c})), Nat.add(C.shift(10n, Fr), C.shift(62n, one)), C.shift(10n, Nat.add(Fr, C.shift(52n, one))), Equal.cong(Nat, Nat, z => Nat.add(C.shift(10n, Fr), z), SW.value(WU.U64{0, c}), C.shift(62n, one), c62(one, h1, c, hc)), Equal.trans(Nat, Nat.add(C.shift(10n, Fr), C.shift(62n, one)), Nat.add(C.shift(10n, Fr), C.shift(10n, C.shift(52n, one))), C.shift(10n, Nat.add(Fr, C.shift(52n, one))), Equal.cong(Nat, Nat, z => Nat.add(C.shift(10n, Fr), z), C.shift(62n, one), C.shift(10n, C.shift(52n, one)), WW.shift_comp(10n, 52n, one)), Equal.sym(Nat, C.shift(10n, Nat.add(Fr, C.shift(52n, one))), Nat.add(C.shift(10n, Fr), C.shift(10n, C.shift(52n, one))), WW.shift_add(10n, Fr, C.shift(52n, one))))))
36 +f63 = SH.fits_mono(Nat.add(10n, 53n), 64n, C.shift(10n, Nat.add(Fr, C.shift(52n, one))), {==}, Equal.trans(Bool, C.fits(Nat.add(10n, 53n), C.shift(10n, Nat.add(Fr, C.shift(52n, one)))), C.fits(53n, Nat.add(Fr, C.shift(52n, one))), True{}, RT.fits_sh(10n, 53n, Nat.add(Fr, C.shift(52n, one))), AA.f53(one, h1, Fr, hF)))
37 Equal.trans(Nat, SW.value(X.add(X.shl(f, 10n), WU.U64{0, c})), C.low(64n, Nat.add(SW.value(X.shl(f, 10n)), SW.value(WU.U64{0, c}))), C.shift(10n, Nat.add(Fr, C.shift(52n, one))), a1, Equal.trans(Nat, C.low(64n, Nat.add(SW.value(X.shl(f, 10n)), SW.value(WU.U64{0, c}))), C.low(64n, C.shift(10n, Nat.add(Fr, C.shift(52n, one)))), C.shift(10n, Nat.add(Fr, C.shift(52n, one))), Equal.cong(Nat, Nat, z => C.low(64n, z), Nat.add(SW.value(X.shl(f, 10n)), SW.value(WU.U64{0, c})), C.shift(10n, Nat.add(Fr, C.shift(52n, one))), es), WW.low_fit(64n, C.shift(10n, Nat.add(Fr, C.shift(52n, one))), f63)))