Definition isPointer (v : val) :=
    match v with
    | Vptr _ _ => true
    | _ => false
    end.Definition val_erasure v1 v2 : Prop :=
    match v1, v2 with
    | Vundef, _ => True
    | v1, v2 => v1 = v2
    end.Definition optionval_erasure (v1 v2 : option val) : Prop :=
    match v1, v2 with
    | Some v1, Some v2 => val_erasure v1 v2
    | None, None => True
    | _, _ => False
    end.Definition memval_erasure mv1 mv2 : Prop :=
    match mv1, mv2 with
    | Undef, _ => True
    | Fragment v1 q1 n1, Fragment v2 q2 n2 =>
      val_erasure v1 v2 /\ q1 = q2 /\ n1 = n2
    | mv1, mv2 => mv1 = mv2
    end.

(* Specifications: *)
Lemma val_erasure_refl: forall v, val_erasure v v.
Lemma memval_erasure_refl: forall mval, memval_erasure mval mval.
Lemma val_erasure_list_refl: forall vs, val_erasure_list vs vs.
Lemma memval_erasure_list_refl: forall vs, memval_erasure_list vs vs.