ProofShift.ws.shr_le: def of bend-osdev-word64@0.1.1.0 Import: import bend-osdev-word64@0.1.1.0/proof_shift.bend as ProofShift Lines 311-319 of bend-osdev-word64@0.1.1.0/proof_shift.bend: https://jend.leeeet.dev/read.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&start_line=311&end_line=319 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 # k shifts right: the floor of the value divided by 2^k def ws.shr_le(+n: Nat, j: Nat, +w: Word(n)) -> {Nat.is_le(U.U32Nat.dbl(j, Word.to_nat(n, ws.shr(n, j, w))), Word.to_nat(n, w)) == True{} : Bool}: match j: case 0n: UL.nat_le_refl(Word.to_nat(n, w)) case 1n+ +p: +e1 = Equal.trans(Nat, Nat.double(U.U32Nat.dbl(p, Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))))), U.U32Nat.dbl(p, Nat.double(Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))))), U.U32Nat.dbl(p, Nat.double(U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), Equal.sym(Nat, U.U32Nat.dbl(p, Nat.double(Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))))), Nat.double(U.U32Nat.dbl(p, Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))))), ns.dbl_double(p, Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))))), Equal.cong(Nat, Nat, v => U.U32Nat.dbl(p, Nat.double(v)), 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)))) +l1 = Equal.trans(Bool, Nat.is_le(U.U32Nat.dbl(p, Nat.double(U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), U.U32Nat.dbl(p, Word.to_nat(n, ws.shr(n, p, w)))), Nat.is_le(Nat.double(U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w)))), Word.to_nat(n, ws.shr(n, p, w))), True{}, UL.dbl_le(p, Nat.double(U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w)))), Word.to_nat(n, ws.shr(n, p, w))), ns.half_le(Word.to_nat(n, ws.shr(n, p, w)))) P.wn.le_rw(U.U32Nat.dbl(p, Nat.double(U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), Nat.double(U.U32Nat.dbl(p, Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))))), Word.to_nat(n, w), Equal.sym(Nat, Nat.double(U.U32Nat.dbl(p, Word.to_nat(n, Word.shr(n, ws.shr(n, p, w))))), U.U32Nat.dbl(p, Nat.double(U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), e1), UO.nat_le_trans(U.U32Nat.dbl(p, Nat.double(U.U32Nat.half(Word.to_nat(n, ws.shr(n, p, w))))), U.U32Nat.dbl(p, Word.to_nat(n, ws.shr(n, p, w))), Word.to_nat(n, w), l1, ws.shr_le(n, p, w))) Uses (20): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Bool https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.cong https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.sym https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Equal.trans https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.double https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.is_le https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.shr https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.to_nat https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=dbl_le https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=nat_le_refl https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=word_shr_value https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS_order.bend&name=nat_le_trans https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/u32.bend&name=U32Nat.dbl https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/u32.bend&name=U32Nat.half https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ns.dbl_double https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ns.half_le https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.shr https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_value.bend&name=wn.le_rw