def wsd.k3

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

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

175# q < 2^h: the shift of q by h is 2^h q
176def wsd.k3(+n: Nat, +h: Nat, +Qo: Nat, +Sq: Nat, +en: {Nat.add(h, h) == n : Nat}, +hQ: {Nat.is_lt(Qo, U.U32Nat.dbl(h, 1n)) == True{} : Bool}, +esq: {Sq == U.U32Nat.low(n, U.U32Nat.dbl(h, Qo)) : Nat}) -> {Sq == U.U32Nat.dbl(h, Qo) : Nat}:
177  Equal.trans(Nat, Sq, U.U32Nat.low(n, U.U32Nat.dbl(h, Qo)), U.U32Nat.dbl(h, Qo), esq, UL.low_small(n, U.U32Nat.dbl(h, Qo), Equal.trans(Bool, Nat.is_lt(U.U32Nat.dbl(h, Qo), U.U32Nat.dbl(n, 1n)), Nat.is_lt(U.U32Nat.dbl(h, Qo), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n))), True{}, Equal.cong(Nat, Bool, zz => Nat.is_lt(U.U32Nat.dbl(h, Qo), zz), U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), Equal.sym(Nat, U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), U.U32Nat.dbl(n, 1n), Equal.sym(Nat, U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n)), wm.fn(h, n, 1n, en)))), Equal.trans(Bool, Nat.is_lt(U.U32Nat.dbl(h, Qo), U.U32Nat.dbl(h, U.U32Nat.dbl(h, 1n))), Nat.is_lt(Qo, U.U32Nat.dbl(h, 1n)), True{}, UL.dbl_lt(h, Qo, U.U32Nat.dbl(h, 1n)), hQ))))

Uses (12)

Used by (1)