def wsd.mulpw

bend-osdev-word64@0.1.1.0 · PROOF_text.bend:113

import bend-osdev-word64@0.1.1.0/PROOF_text.bend as PROOFText
import Base
import bend-osdev-u32@0.1.0.0/u32.bend as U
import bend-osdev-u32@0.1.0.0/LAWS.bend as UL

113def wsd.mulpw(+n: Nat, +k: Nat, +x: Word(n), +h: {Nat.is_lt(k, n) == True{} : Bool}) -> {Word.to_nat(n, Word.mul(n, x, wsd.pw(n, k))) == U.U32Nat.low(n, U.U32Nat.dbl(k, Word.to_nat(n, x))) : Nat}:
114  Equal.trans(Nat, Word.to_nat(n, Word.mul(n, x, wsd.pw(n, k))), U.U32Nat.low(n, Nat.mul(Word.to_nat(n, x), U.U32Nat.dbl(k, 1n))), U.U32Nat.low(n, U.U32Nat.dbl(k, Word.to_nat(n, x))), Equal.trans(Nat, Word.to_nat(n, Word.mul(n, x, wsd.pw(n, k))), U.U32Nat.low(n, Nat.mul(Word.to_nat(n, x), Word.to_nat(n, wsd.pw(n, k)))), U.U32Nat.low(n, Nat.mul(Word.to_nat(n, x), U.U32Nat.dbl(k, 1n))), UL.word_mul_low(n, x, wsd.pw(n, k)), Equal.cong(Nat, Nat, zz => U.U32Nat.low(n, Nat.mul(Word.to_nat(n, x), zz)), Word.to_nat(n, wsd.pw(n, k)), U.U32Nat.dbl(k, 1n), wsd.pwv(n, k, h))), Equal.cong(Nat, Nat, zz => U.U32Nat.low(n, zz), Nat.mul(Word.to_nat(n, x), U.U32Nat.dbl(k, 1n)), U.U32Nat.dbl(k, Word.to_nat(n, x)), wr.t0(Word.to_nat(n, x), k)))

Uses (15)

Used by (1)