ProofShift.ws.gshl_lo: def of bend-osdev-word64@0.1.1.0 Import: import bend-osdev-word64@0.1.1.0/proof_shift.bend as ProofShift Lines 398-406 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=398&end_line=406 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 left by k < n: the high half takes the low half's top k bits def ws.gshl_lo(+n: Nat, +k: Nat, +hw: Word(n), +lw: Word(n), +ch: Word(n), +cl: Word(n), hk: {Nat.is_lt(k, n) == True{} : Bool}, h: {Nat.is_le(U.U32Nat.dbl(k, P.wv.V(n, hw, lw)), P.wv.V(n, ch, cl)) == True{} : Bool}) -> {P.wv.V(n, Word.or(n, ws.shl(n, k, hw), ws.shr(n, Nat.sub(n, k), lw)), ws.shl(n, k, lw)) == U.U32Nat.dbl(k, P.wv.V(n, hw, lw)) : Nat}: +hkle = P.wn.lt_le(k, n, hk) +hb = Equal.trans(Bool, Nat.is_lt(U.U32Nat.dbl(k, Word.to_nat(n, hw)), U.U32Nat.dbl(n, 1n)), Nat.is_lt(U.U32Nat.dbl(n, U.U32Nat.dbl(k, Word.to_nat(n, hw))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, 1n))), True{}, Equal.sym(Bool, Nat.is_lt(U.U32Nat.dbl(n, U.U32Nat.dbl(k, Word.to_nat(n, hw))), U.U32Nat.dbl(n, U.U32Nat.dbl(n, 1n))), Nat.is_lt(U.U32Nat.dbl(k, Word.to_nat(n, hw)), U.U32Nat.dbl(n, 1n)), UL.dbl_lt(n, U.U32Nat.dbl(k, Word.to_nat(n, hw)), U.U32Nat.dbl(n, 1n))), ws.hb(n, k, hw, lw, ch, cl, h)) +exh = ws.uniq(n, ws.ov(n, k, hw), 0n, Word.to_nat(n, ws.shl(n, k, hw)), U.U32Nat.dbl(k, Word.to_nat(n, hw)), Equal.trans(Nat, Nat.add(Word.to_nat(n, ws.shl(n, k, hw)), U.U32Nat.dbl(n, ws.ov(n, k, hw))), U.U32Nat.dbl(k, Word.to_nat(n, hw)), Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, hw)), U.U32Nat.dbl(n, 0n)), ws.shlk(n, k, hw), Equal.sym(Nat, Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, hw)), U.U32Nat.dbl(n, 0n)), U.U32Nat.dbl(k, Word.to_nat(n, hw)), ns.d0(n, U.U32Nat.dbl(k, Word.to_nat(n, hw))))), UL.word_value_lt(n, ws.shl(n, k, hw)), hb) +l3 = UO.nat_le_lt_trans(U.U32Nat.dbl(Nat.sub(n, k), Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))), Word.to_nat(n, lw), U.U32Nat.dbl(Nat.sub(n, k), U.U32Nat.dbl(k, 1n)), ws.shr_le(n, Nat.sub(n, k), lw), P.wn.lt_rw2(Word.to_nat(n, lw), U.U32Nat.dbl(n, 1n), U.U32Nat.dbl(Nat.sub(n, k), U.U32Nat.dbl(k, 1n)), Equal.sym(Nat, U.U32Nat.dbl(Nat.sub(n, k), U.U32Nat.dbl(k, 1n)), U.U32Nat.dbl(n, 1n), ns.dmk(n, k, 1n, hkle)), UL.word_value_lt(n, lw))) +hs = Equal.trans(Bool, Nat.is_lt(Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw)), U.U32Nat.dbl(k, 1n)), Nat.is_lt(U.U32Nat.dbl(Nat.sub(n, k), Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))), U.U32Nat.dbl(Nat.sub(n, k), U.U32Nat.dbl(k, 1n))), True{}, Equal.sym(Bool, Nat.is_lt(U.U32Nat.dbl(Nat.sub(n, k), Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))), U.U32Nat.dbl(Nat.sub(n, k), U.U32Nat.dbl(k, 1n))), Nat.is_lt(Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw)), U.U32Nat.dbl(k, 1n)), UL.dbl_lt(Nat.sub(n, k), Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw)), U.U32Nat.dbl(k, 1n))), l3) +ehi = ws.or_dis(n, k, ws.shl(n, k, hw), ws.shr(n, Nat.sub(n, k), lw), Word.to_nat(n, hw), exh, hs) Equal.trans(Nat, Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), U.U32Nat.dbl(n, Word.to_nat(n, Word.or(n, ws.shl(n, k, hw), ws.shr(n, Nat.sub(n, k), lw))))), Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), U.U32Nat.dbl(n, Nat.add(Word.to_nat(n, ws.shl(n, k, hw)), Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))))), U.U32Nat.dbl(k, P.wv.V(n, hw, lw)), Equal.cong(Nat, Nat, v => Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), U.U32Nat.dbl(n, v)), Word.to_nat(n, Word.or(n, ws.shl(n, k, hw), ws.shr(n, Nat.sub(n, k), lw))), Nat.add(Word.to_nat(n, ws.shl(n, k, hw)), Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))), ehi), Equal.trans(Nat, Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), U.U32Nat.dbl(n, Nat.add(Word.to_nat(n, ws.shl(n, k, hw)), Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))))), Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), Nat.add(U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))))), U.U32Nat.dbl(k, P.wv.V(n, hw, lw)), Equal.cong(Nat, Nat, v => Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), v), U.U32Nat.dbl(n, Nat.add(Word.to_nat(n, ws.shl(n, k, hw)), Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw)))), Nat.add(U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw)))), UL.dbl_add(n, Word.to_nat(n, ws.shl(n, k, hw)), Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw)))), Equal.trans(Nat, Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), Nat.add(U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))))), Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), Nat.add(U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw))))), U.U32Nat.dbl(k, P.wv.V(n, hw, lw)), Equal.cong(Nat, Nat, v => Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), v), Nat.add(U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw)))), Nat.add(U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw)))), UL.nat_add_comm(U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))))), Equal.trans(Nat, Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), Nat.add(U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw))))), Nat.add(Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw)))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw)))), U.U32Nat.dbl(k, P.wv.V(n, hw, lw)), Equal.sym(Nat, Nat.add(Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw)))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw)))), Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), Nat.add(U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw))))), UL.nat_add_assoc(Word.to_nat(n, ws.shl(n, k, lw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw))))), Equal.trans(Nat, Nat.add(Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw)))), U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw)))), Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, lw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw)))), U.U32Nat.dbl(k, P.wv.V(n, hw, lw)), Equal.cong(Nat, Nat, v => Nat.add(v, U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw)))), Nat.add(Word.to_nat(n, ws.shl(n, k, lw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shr(n, Nat.sub(n, k), lw)))), U.U32Nat.dbl(k, Word.to_nat(n, lw)), ws.g1b(n, k, lw, hkle)), Equal.trans(Nat, Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, lw)), U.U32Nat.dbl(n, Word.to_nat(n, ws.shl(n, k, hw)))), Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, lw)), U.U32Nat.dbl(n, U.U32Nat.dbl(k, Word.to_nat(n, hw)))), U.U32Nat.dbl(k, P.wv.V(n, hw, lw)), Equal.cong(Nat, Nat, v => Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, lw)), U.U32Nat.dbl(n, v)), Word.to_nat(n, ws.shl(n, k, hw)), U.U32Nat.dbl(k, Word.to_nat(n, hw)), exh), Equal.sym(Nat, U.U32Nat.dbl(k, P.wv.V(n, hw, lw)), Nat.add(U.U32Nat.dbl(k, Word.to_nat(n, lw)), U.U32Nat.dbl(n, U.U32Nat.dbl(k, Word.to_nat(n, hw)))), ws.ea(n, k, hw, lw)))))))) Uses (34): 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_le 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_add 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_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.d0 https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ns.dmk https://jend.leeeet.dev/definition.txt?path=bend-osdev-word64@0.1.1.0/proof_shift.bend&name=ws.ea 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.hb 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.ov 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.shlk 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_shift.bend&name=ws.uniq 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