def wv.val_lt2

bend-osdev-word64@0.1.1.0 · proof_value.bend:298

import bend-osdev-word64@0.1.1.0/proof_value.bend as ProofValue
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
import bend-osdev-u32@0.1.0.0/LAWS_order.bend as UO

298# lo < 2^n and hi < 2^n: lo + 2^n * hi < 2^(2n)
299def wv.val_lt2(+n: Nat, +l: Nat, +h: Nat, hl: {Nat.is_lt(l, U.U32Nat.dbl(n, 1n)) == True{} : Bool}, hh: {Nat.is_lt(h, U.U32Nat.dbl(n, 1n)) == True{} : Bool}) -> {Nat.is_lt(Nat.add(l, U.U32Nat.dbl(n, h)), wv.Q(n, 1n)) == True{} : Bool}:
300  +k = U.U32Nat.dbl(n, 1n)
301  +s1 = Equal.trans(Bool, Nat.is_lt(Nat.add(l, U.U32Nat.dbl(n, h)), Nat.add(k, U.U32Nat.dbl(n, h))), Nat.is_lt(l, k), True{}, wn.lt_add_r(l, k, U.U32Nat.dbl(n, h)), hl)
302  +s2 = wn.lt_rw2(Nat.add(l, U.U32Nat.dbl(n, h)), Nat.add(k, U.U32Nat.dbl(n, h)), U.U32Nat.dbl(n, 1n+h), Equal.sym(Nat, U.U32Nat.dbl(n, 1n+h), Nat.add(k, U.U32Nat.dbl(n, h)), UL.dbl_add(n, 1n, h)), s1)
303  +s3 = Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(n, 1n+h), U.U32Nat.dbl(n, k)), Nat.is_le(1n+h, k), True{}, UL.dbl_le(n, 1n+h, k), Equal.trans(Bool, Nat.is_le(1n+h, k), Nat.is_lt(h, k), True{}, wn.le_succ(h, k), hh))
304  UO.nat_lt_le_trans(Nat.add(l, U.U32Nat.dbl(n, h)), U.U32Nat.dbl(n, 1n+h), U.U32Nat.dbl(n, k), s2, s3)

Uses (15)

Used by (11)