def u32_exact

bend-collections-laws-math@1.0.0.0 · proofs/lib/lemmas/proofs/subtraction_bounds.bend:52

import bend-collections-laws-math@1.0.0.0/proofs/lib/lemmas/proofs/subtraction_bounds.bend as SubtractionBounds
import Base
import bend-collections-laws-math@1.0.0.0/proofs/lib/lemmas/spec/numeric.bend as S
import bend-collections-laws-math@1.0.0.0/proofs/lib/lemmas/proofs/numeric.bend as Numeric

52def u32_exact(a: U32, b: U32, enough: {Nat.is_le(U32.to_nat(b), U32.to_nat(a)) == True{} : Bool}) -> {U32.to_nat(U32.sub(a, b)) == Nat.sub(U32.to_nat(a), U32.to_nat(b)) : Nat}:
53  match a b:
54    case U32{+x} U32{+y}:
55      %Equal.sym(Nat, Word.to_nat(32n, Word.sub(32n, x, y)), S.unsigned(32n, Word.sub(32n, x, y)), Numeric.primitive_word_interpretation(32n, Word.sub(32n, x, y))) : {_ == Nat.sub(Word.to_nat(32n, x), Word.to_nat(32n, y)) : Nat}
56      %Equal.sym(Nat, Word.to_nat(32n, x), S.unsigned(32n, x), Numeric.primitive_word_interpretation(32n, x)) : {S.unsigned(32n, Word.sub(32n, x, y)) == Nat.sub(_, Word.to_nat(32n, y)) : Nat}
57      %Equal.sym(Nat, Word.to_nat(32n, y), S.unsigned(32n, y), Numeric.primitive_word_interpretation(32n, y)) : {S.unsigned(32n, Word.sub(32n, x, y)) == Nat.sub(S.unsigned(32n, x), _) : Nat}
58      exact(32n, x, y, primitive_bound(x, y, enough))

Uses (14)

Used by (3)