(** Modular arithmetic operations: add, mul, opposite.
    (But not subtraction because of the pointer - pointer case. *)

Definition modarith (x: nval) :=
  match x with
  | Nothing => Nothing
  | I m => I (complete_mask m)
  | All => All
  end.

(* Specifications: *)
Lemma add_sound: forall v1 w1 v2 w2 x, vagree v1 w1 (modarith x) -> vagree v2 w2 (modarith x) -> vagree (Val.add v1 v2) (Val.add w1 w2) x.