def ws.gshr_hi_le
bend-osdev-word64@0.1.1.0 · proof_shift.bend:451
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
451def ws.gshr_hi_le(+n: Nat, +k: Nat, +hw: Word(n), +lw: Word(n), +h1: {Nat.is_le(n, k) == True{} : Bool}) -> {Nat.is_le(U.U32Nat.dbl(k, P.wv.V(n, Word.zero(n), ws.shr(n, Nat.sub(k, n), hw))), P.wv.V(n, hw, lw)) == True{} : Bool}:
452 +e = Equal.trans(Nat, U.U32Nat.dbl(k, P.wv.V(n, Word.zero(n), ws.shr(n, Nat.sub(k, n), hw))), U.U32Nat.dbl(k, Word.to_nat(n, ws.shr(n, Nat.sub(k, n), hw))), U.U32Nat.dbl(n, U.U32Nat.dbl(Nat.sub(k, n), Word.to_nat(n, ws.shr(n, Nat.sub(k, n), hw)))), Equal.cong(Nat, Nat, v => U.U32Nat.dbl(k, v), P.wv.V(n, Word.zero(n), ws.shr(n, Nat.sub(k, n), hw)), Word.to_nat(n, ws.shr(n, Nat.sub(k, n), hw)), ws.gshr_hi_v(n, k, hw)), ns.dnj(n, k, Word.to_nat(n, ws.shr(n, Nat.sub(k, n), hw)), h1))
453 +l1 = Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(n, U.U32Nat.dbl(Nat.sub(k, n), Word.to_nat(n, ws.shr(n, Nat.sub(k, n), hw)))), U.U32Nat.dbl(n, Word.to_nat(n, hw))), Nat.is_le(U.U32Nat.dbl(Nat.sub(k, n), Word.to_nat(n, ws.shr(n, Nat.sub(k, n), hw))), Word.to_nat(n, hw)), True{}, UL.dbl_le(n, U.U32Nat.dbl(Nat.sub(k, n), Word.to_nat(n, ws.shr(n, Nat.sub(k, n), hw))), Word.to_nat(n, hw)), ws.shr_le(n, Nat.sub(k, n), hw))
454 P.wn.le_rw(U.U32Nat.dbl(n, U.U32Nat.dbl(Nat.sub(k, n), Word.to_nat(n, ws.shr(n, Nat.sub(k, n), hw)))), U.U32Nat.dbl(k, P.wv.V(n, Word.zero(n), ws.shr(n, Nat.sub(k, n), hw))), P.wv.V(n, hw, lw), Equal.sym(Nat, U.U32Nat.dbl(k, P.wv.V(n, Word.zero(n), ws.shr(n, Nat.sub(k, n), hw))), U.U32Nat.dbl(n, U.U32Nat.dbl(Nat.sub(k, n), Word.to_nat(n, ws.shr(n, Nat.sub(k, n), hw)))), e), UO.nat_le_trans(U.U32Nat.dbl(n, U.U32Nat.dbl(Nat.sub(k, n), Word.to_nat(n, ws.shr(n, Nat.sub(k, n), hw)))), U.U32Nat.dbl(n, Word.to_nat(n, hw)), P.wv.V(n, hw, lw), l1, UL.nat_le_add(U.U32Nat.dbl(n, Word.to_nat(n, hw)), Word.to_nat(n, lw))))