def ws.gshr_lo_le
bend-osdev-word64@0.1.1.0 · proof_shift.bend:436
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
436def ws.gshr_lo_le(+n: Nat, +k: Nat, +hw: Word(n), +lw: Word(n), +hk: {Nat.is_lt(k, n) == True{} : Bool}) -> {Nat.is_le(U.U32Nat.dbl(k, P.wv.V(n, ws.shr(n, k, hw), Word.or(n, ws.shr(n, k, lw), ws.shl(n, Nat.sub(n, k), hw)))), P.wv.V(n, hw, lw)) == True{} : Bool}:
437 +hkle = P.wn.lt_le(k, n, hk)
438 +e = Equal.trans(Nat, U.U32Nat.dbl(k, P.wv.V(n, ws.shr(n, k, hw), Word.or(n, ws.shr(n, k, lw), ws.shl(n, Nat.sub(n, k), hw)))), U.U32Nat.dbl(k, Nat.add(Word.to_nat(n, ws.shr(n, k, lw)), U.U32Nat.dbl(Nat.sub(n, k), Word.to_nat(n, hw)))), Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, ws.shr(n, k, lw))), U.U32Nat.dbl(n, Word.to_nat(n, hw))), Equal.cong(Nat, Nat, v => U.U32Nat.dbl(k, v), P.wv.V(n, ws.shr(n, k, hw), Word.or(n, ws.shr(n, k, lw), ws.shl(n, Nat.sub(n, k), hw))), Nat.add(Word.to_nat(n, ws.shr(n, k, lw)), U.U32Nat.dbl(Nat.sub(n, k), Word.to_nat(n, hw))), ws.gshr_v(n, k, hw, lw, hk)), Equal.trans(Nat, U.U32Nat.dbl(k, Nat.add(Word.to_nat(n, ws.shr(n, k, lw)), U.U32Nat.dbl(Nat.sub(n, k), Word.to_nat(n, hw)))), Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, ws.shr(n, k, lw))), U.U32Nat.dbl(k, U.U32Nat.dbl(Nat.sub(n, k), Word.to_nat(n, hw)))), Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, ws.shr(n, k, lw))), U.U32Nat.dbl(n, Word.to_nat(n, hw))), UL.dbl_add(k, Word.to_nat(n, ws.shr(n, k, lw)), U.U32Nat.dbl(Nat.sub(n, k), Word.to_nat(n, hw))), Equal.cong(Nat, Nat, v => Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, ws.shr(n, k, lw))), v), U.U32Nat.dbl(k, U.U32Nat.dbl(Nat.sub(n, k), Word.to_nat(n, hw))), U.U32Nat.dbl(n, Word.to_nat(n, hw)), ns.dkm(n, k, Word.to_nat(n, hw), hkle))))
439 P.wn.le_rw(Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, ws.shr(n, k, lw))), U.U32Nat.dbl(n, Word.to_nat(n, hw))), U.U32Nat.dbl(k, P.wv.V(n, ws.shr(n, k, hw), Word.or(n, ws.shr(n, k, lw), ws.shl(n, Nat.sub(n, k), hw)))), P.wv.V(n, hw, lw), Equal.sym(Nat, U.U32Nat.dbl(k, P.wv.V(n, ws.shr(n, k, hw), Word.or(n, ws.shr(n, k, lw), ws.shl(n, Nat.sub(n, k), hw)))), Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, ws.shr(n, k, lw))), U.U32Nat.dbl(n, Word.to_nat(n, hw))), e), ns.le_add_mono_r(U.U32Nat.dbl(k, Word.to_nat(n, ws.shr(n, k, lw))), Word.to_nat(n, lw), U.U32Nat.dbl(n, Word.to_nat(n, hw)), ws.shr_le(n, k, lw)))