def fin_eq

bend-collections-laws-crypto@1.0.0.0 · proofs/math/typed/w64mul.bend:260

import bend-collections-laws-crypto@1.0.0.0/proofs/math/typed/w64mul.bend as W64mul
import Base
import bend-collections-laws-crypto@1.0.0.0/src/math/w64.bend as X
import bend-collections-laws-crypto@1.0.0.0/src/math/u64.bend as WU
import bend-collections-laws-crypto@1.0.0.0/proofs/math/typed/shrn.bend as SR

260# the implementation splits by U32.shrn(_, 16), a shift; the generalised
261# product by U32.div(_, 65536): the same words (SR.shr16)
262def fin_eq(+ll: U32, +mid: U32, +hh: U32, +mc: Bool) -> {X.mul32_fin(ll, mid, hh, mc) == fin_g(ll, mid, hh, mc, 65536) : WU.U64}:
263  %Equal.sym(U32, U32.shrn(mid, 16n), U32.div(mid, 65536), SR.shr16(mid)) : {X.add_fin(U32.add(ll, U32.mul(mid, 65536)), ll, hh, U32.add(_, U32.mul(X.b32(mc), 65536))) == fin_g(ll, mid, hh, mc, 65536) : WU.U64}
264  {==}

Uses (13)

Used by (1)