def wv.gadd_nowrap

bend-osdev-word64@0.1.1.0 · proof_value.bend:504

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

504# with the sum no more than another word's value, nothing wraps
505def wv.gadd_nowrap(+n: Nat, +ah: Word(n), +al: Word(n), +bh: Word(n), +bl: Word(n), +ch: Word(n), +cl: Word(n), h: {Nat.is_le(Nat.add(wv.V(n, ah, al), wv.V(n, bh, bl)), wv.V(n, ch, cl)) == True{} : Bool}) -> {Nat.add(Word.to_nat(n, Word.add(n, al, bl)), U.U32Nat.dbl(n, Word.to_nat(n, wv.addhi(n, ah, al, bh, bl)))) == Nat.add(wv.V(n, ah, al), wv.V(n, bh, bl)) : Nat}:
506  wv.nowrap(n, Nat.add(U.U32Nat.bit(Cmp.is_lt(Word.cmp(n, Word.add(n, ah, bh), ah))), U.U32Nat.bit(Cmp.is_lt(Word.cmp(n, wv.addhi(n, ah, al, bh, bl), Word.add(n, ah, bh))))), Nat.add(Word.to_nat(n, Word.add(n, al, bl)), U.U32Nat.dbl(n, Word.to_nat(n, wv.addhi(n, ah, al, bh, bl)))), wv.V(n, ah, al), wv.V(n, bh, bl), wv.V(n, ch, cl), wv.gadd.sum(n, ah, al, bh, bl), h, wv.val_lt2(n, Word.to_nat(n, cl), Word.to_nat(n, ch), UL.word_value_lt(n, cl), UL.word_value_lt(n, ch)))

Uses (17)

Used by (1)