def ops_mul
bend-collections-laws-math@1.0.0.0 · proofs/math/typed/u64laws.bend:106
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/u64laws.bend as U64laws
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/instances.bend as SI
import bend-collections-laws-math@1.0.0.0/spec/math/generic.bend as SG
import bend-collections-laws-math@1.0.0.0/src/math/instances.bend as I
import bend-collections-laws-math@1.0.0.0/src/math/num.bend as NM
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/math/typed/width.bend as WW
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/w64add.bend as WA
106def ops_mul(+a: WU.U64, +b: WU.U64, +h: {I.u64_is(NM.MulOver{a, b}) == False{} : Bool}) -> SI.Ops.mul(~WU.U64, ~I.u64_op, ~I.u64_is, ~SG.u64_val, a, b, h):
107 +hf = not_f(C.fits(64n, Nat.mul(v(a), v(b))), Equal.trans(Bool, Bool.not(C.fits(64n, Nat.mul(v(a), v(b)))), X.mul_over(a, b), False{}, Equal.sym(Bool, X.mul_over(a, b), Bool.not(C.fits(64n, Nat.mul(v(a), v(b)))), WA.mul_over_value(a, b)), h))
108 Equal.trans(Nat, v(X.mul(a, b)), C.low(64n, Nat.mul(v(a), v(b))), Nat.mul(v(a), v(b)), WA.mul_value(a, b), WW.low_fit(64n, Nat.mul(v(a), v(b)), hf))