ProofShift.ws.gshr_v: def of bend-osdev-word64@0.1.1.0 Import: import bend-osdev-word64@0.1.1.0/proof_shift.bend as ProofShift Lines 426-434 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=426&end_line=434 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 # a shift right by k < n: the low half takes the high half's low k bits def ws.gshr_v(+n: Nat, +k: Nat, +hw: Word(n), +lw: Word(n), hk: {Nat.is_lt(k, n) == True{} : Bool}) -> {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))) : Nat}: +hkle = P.wn.lt_le(k, n, hk) +hmle = ns.sub_le(n, k) +es = Equal.cong(Nat, Nat, v => Word.to_nat(n, ws.shr(n, v, hw)), Nat.sub(n, Nat.sub(n, k)), k, ns.sub_sub(k, n, hkle)) +l3 = UO.nat_le_lt_trans(U.U32Nat.dbl(k, Word.to_nat(n, ws.shr(n, k, lw))), Word.to_nat(n, lw), U.U32Nat.dbl(k, U.U32Nat.dbl(Nat.sub(n, k), 1n)), ws.shr_le(n, k, lw), P.wn.lt_rw2(Word.to_nat(n, lw), U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(k, U.U32Nat.dbl(Nat.sub(n, k), 1n)), Equal.sym(Nat, U.U32Nat.dbl(k, U.U32Nat.dbl(Nat.sub(n, k), 1n)), U.U32Nat.dbl(n, 1n), ns.dkm(n, k, 1n, hkle)), UL.word_value_lt(n, lw))) +hy = Equal.trans(Bool, Nat.is_lt(Word.to_nat(n, ws.shr(n, k, lw)), U.U32Nat.dbl(Nat.sub(n, k), 1n)), Nat.is_lt(U.U32Nat.dbl(k, Word.to_nat(n, ws.shr(n, k, lw))), U.U32Nat.dbl(k, U.U32Nat.dbl(Nat.sub(n, k), 1n))), True{}, Equal.sym(Bool, Nat.is_lt(U.U32Nat.dbl(k, Word.to_nat(n, ws.shr(n, k, lw))), U.U32Nat.dbl(k, U.U32Nat.dbl(Nat.sub(n, k), 1n))), Nat.is_lt(Word.to_nat(n, ws.shr(n, k, lw)), U.U32Nat.dbl(Nat.sub(n, k), 1n)), UL.dbl_lt(k, Word.to_nat(n, ws.shr(n, k, lw)), U.U32Nat.dbl(Nat.sub(n, k), 1n))), l3) +eor = Equal.trans(Nat, Word.to_nat(n, Word.or(n, ws.shr(n, k, lw), ws.shl(n, Nat.sub(n, k), hw))), Word.to_nat(n, Word.or(n, ws.shl(n, Nat.sub(n, k), hw), ws.shr(n, k, lw))), Nat.add(Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), Word.to_nat(n, ws.shr(n, k, lw))), Equal.cong(Word(n), Nat, v => Word.to_nat(n, v), Word.or(n, ws.shr(n, k, lw), ws.shl(n, Nat.sub(n, k), hw)), Word.or(n, ws.shl(n, Nat.sub(n, k), hw), ws.shr(n, k, lw)), UL.word_or_comm(n, ws.shr(n, k, lw), ws.shl(n, Nat.sub(n, k), hw))), ws.or_dis(n, Nat.sub(n, k), ws.shl(n, Nat.sub(n, k), hw), ws.shr(n, k, lw), Nat.sub(Word.to_nat(n, hw), U.U32Nat.dbl(Nat.sub(n, Nat.sub(n, k)), Word.to_nat(n, ws.shr(n, Nat.sub(n, Nat.sub(n, k)), hw)))), ws.g1a(n, Nat.sub(n, k), hw, hmle), hy)) Equal.trans(Nat, Nat.add(Word.to_nat(n, Word.or(n, ws.shr(n, k, lw), ws.shl(n, Nat.sub(n, k), hw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, k, hw)))), Nat.add(Nat.add(Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), Word.to_nat(n, ws.shr(n, k, lw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(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))), Equal.cong(Nat, Nat, v => Nat.add(v, U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, k, hw)))), Word.to_nat(n, Word.or(n, ws.shr(n, k, lw), ws.shl(n, Nat.sub(n, k), hw))), Nat.add(Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), Word.to_nat(n, ws.shr(n, k, lw))), eor), Equal.trans(Nat, Nat.add(Nat.add(Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), Word.to_nat(n, ws.shr(n, k, lw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, k, hw)))), Nat.add(Nat.add(Word.to_nat(n, ws.shr(n, k, lw)), Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(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))), Equal.cong(Nat, Nat, v => Nat.add(v, U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, k, hw)))), Nat.add(Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), Word.to_nat(n, ws.shr(n, k, lw))), Nat.add(Word.to_nat(n, ws.shr(n, k, lw)), Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw))), UL.nat_add_comm(Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), Word.to_nat(n, ws.shr(n, k, lw)))), Equal.trans(Nat, Nat.add(Nat.add(Word.to_nat(n, ws.shr(n, k, lw)), Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, k, hw)))), Nat.add(Word.to_nat(n, ws.shr(n, k, lw)), Nat.add(Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(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))), UL.nat_add_assoc(Word.to_nat(n, ws.shr(n, k, lw)), Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, k, hw)))), Equal.trans(Nat, Nat.add(Word.to_nat(n, ws.shr(n, k, lw)), Nat.add(Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, k, hw))))), Nat.add(Word.to_nat(n, ws.shr(n, k, lw)), Nat.add(Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(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))), Equal.cong(Nat, Nat, v => Nat.add(Word.to_nat(n, ws.shr(n, k, lw)), Nat.add(Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), U.U32Nat.dbl(n, v))), Word.to_nat(n, ws.shr(n, k, hw)), Word.to_nat(n, ws.shr(n, Nat.sub(n, Nat.sub(n, k)), hw)), Equal.sym(Nat, Word.to_nat(n, ws.shr(n, Nat.sub(n, Nat.sub(n, k)), hw)), Word.to_nat(n, ws.shr(n, k, hw)), es)), Equal.cong(Nat, Nat, v => Nat.add(Word.to_nat(n, ws.shr(n, k, lw)), v), Nat.add(Word.to_nat(n, ws.shl(n, Nat.sub(n, k), hw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, Nat.sub(n, k)), hw)))), U.U32Nat.dbl(Nat.sub(n, k), Word.to_nat(n, hw)), ws.g1b(n, Nat.sub(n, k), hw, hmle)))))) Uses (30): 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.add https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.is_lt https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Nat.sub https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=Word.or 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_lt https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=nat_add_assoc https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=nat_add_comm https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=word_or_comm https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS.bend&name=word_value_lt https://jend.leeeet.dev/definition.txt?path=bend-osdev-u32@0.1.0.0/LAWS_order.bend&name=nat_le_lt_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-word64@0.1.1.0/proof_shift.bend&name=ns.dkm https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ns.sub_le https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ns.sub_sub https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.g1a https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.g1b https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.or_dis https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.shl 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_shift.bend&name=ws.shr_le https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_value.bend&name=wn.lt_le https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_value.bend&name=wn.lt_rw2 https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_value.bend&name=wv.V