(** Generic operations that just do constant propagation. *)

Definition unop_int (sem: int -> int) (x: aval) :=
  match x with I n => I (sem n) | _ => ntop1 x end.

Lemma unop_int_sound: forall sem v x, vmatch v x -> vmatch (match v with Vint i => Vint(sem i) | _ => Vundef end) (unop_int sem x).