def wv.gsub
bend-osdev-word64@0.1.1.0 · proof_value.bend:508
import bend-osdev-word64@0.1.1.0/proof_value.bend as ProofValue
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
508
509
510def wv.gsub(+n: Nat, +ah: Word(n), +al: Word(n), +bh: Word(n), +bl: Word(n)) -> {Nat.add(Nat.add(Word.to_nat(n, Word.sub(n, al, bl)), U.U32Nat.dbl(n, Word.to_nat(n, wv.subhi(n, ah, al, bh, bl)))), wv.V(n, bh, bl)) == Nat.add(wv.V(n, ah, al), wv.Q(n, U.U32Nat.bit(Nat.is_lt(wv.V(n, ah, al), wv.V(n, bh, bl))))) : Nat}:
511 +hs = wv.val_lt2(n, Word.to_nat(n, Word.sub(n, al, bl)), Word.to_nat(n, wv.subhi(n, ah, al, bh, bl)), UL.word_value_lt(n, Word.sub(n, al, bl)), UL.word_value_lt(n, wv.subhi(n, ah, al, bh, bl)))
512 +hb = wv.val_lt2(n, Word.to_nat(n, bl), Word.to_nat(n, bh), UL.word_value_lt(n, bl), UL.word_value_lt(n, bh))
513 +ch = wv.char_sub(n, Nat.add(U.U32Nat.bit(Cmp.is_lt(Word.cmp(n, ah, bh))), U.U32Nat.bit(Cmp.is_lt(Word.cmp(n, Word.sub(n, ah, bh), wv.bitw(n, wv.c1sub(n, al, bl)))))), Nat.add(Word.to_nat(n, Word.sub(n, al, bl)), U.U32Nat.dbl(n, Word.to_nat(n, wv.subhi(n, ah, al, bh, bl)))), wv.V(n, ah, al), wv.V(n, bh, bl), wv.gsub.sum(n, ah, al, bh, bl), hs, hb)
514 %ch : {Nat.add(Nat.add(Word.to_nat(n, Word.sub(n, al, bl)), U.U32Nat.dbl(n, Word.to_nat(n, wv.subhi(n, ah, al, bh, bl)))), wv.V(n, bh, bl)) == Nat.add(wv.V(n, ah, al), wv.Q(n, _)) : Nat}
515 wv.gsub.sum(n, ah, al, bh, bl)