def ws.shr_lt

bend-osdev-word64@0.1.1.0 · proof_shift.bend:321

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

321def ws.shr_lt(+n: Nat, j: Nat, +w: Word(n)) -> {Nat.is_lt(Word.to_nat(n, w), U.U32Nat.dbl(j, 1n+Word.to_nat(n, ws.shr(n, j, w)))) == True{} : Bool}:
322  match j:
323    case 0n:
324      ns.lt_succ_self(Word.to_nat(n, w))
325    case 1n+ +p:
326      +e2 = Equal.trans(Nat, U.U32Nat.dbl(p, Nat.double(1n+U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), Nat.double(U.U32Nat.dbl(p, 1n+U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), Nat.double(U.U32Nat.dbl(p, 1n+Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))))), ns.dbl_double(p, 1n+U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w)))), Equal.cong(Nat, Nat, v => Nat.double(U.U32Nat.dbl(p, 1n+v)), U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))), Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))), Equal.sym(Nat, Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))), U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))), UL.word_shr_value(n, ws.shr(n, p, w)))))
327      +l2 = Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(p, 1n+Word.to_nat(n, ws.shr(n, p, w))), U.U32Nat.dbl(p, Nat.double(1n+U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w)))))), Nat.is_le(1n+Word.to_nat(n, ws.shr(n, p, w)), Nat.double(1n+U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), True{}, UL.dbl_le(p, 1n+Word.to_nat(n, ws.shr(n, p, w)), Nat.double(1n+U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), Equal.trans(Bool, Nat.is_le(1n+Word.to_nat(n, ws.shr(n, p, w)), Nat.double(1n+U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), Nat.is_lt(Word.to_nat(n, ws.shr(n, p, w)), Nat.double(1n+U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), True{}, P.wn.le_succ(Word.to_nat(n, ws.shr(n, p, w)), Nat.double(1n+U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), ns.half_lt(Word.to_nat(n, ws.shr(n, p, w)))))
328      UO.nat_lt_le_trans(Word.to_nat(n, w), U.U32Nat.dbl(p, 1n+Word.to_nat(n, ws.shr(n, p, w))), Nat.double(U.U32Nat.dbl(p, 1n+Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))))), ws.shr_lt(n, p, w), P.wn.le_rw2(U.U32Nat.dbl(p, 1n+Word.to_nat(n, ws.shr(n, p, w))), U.U32Nat.dbl(p, Nat.double(1n+U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), Nat.double(U.U32Nat.dbl(p, 1n+Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))))), e2, l2))

Uses (22)

Used by (3)