Proof with eauto with val_erasure.
intros.
destruct v1,v2; simpl in *; inv Hval_erasure; auto;
unfold Val.cmplu, Val.cmplu_bool; simpl; eauto with val_erasure;
do 2 rewrite andb_if;
repeat match goal with
| [|- context[match ?Expr with | _ => _ end]] =>
destruct Expr eqn:?
end; simpl; eauto with val_erasure.
Qed.
Hint Resolve val_erasure_cmplu : val_erasure.

(* Specifications: *)
Lemma storev_pointer:
forall chunk m vptr v m',
Mem.storev chunk m vptr v = Some m' ->
isPointer vptr.
Lemma loadv_pointer:
forall chunk m vptr v,
Mem.loadv chunk m vptr = Some v ->
isPointer vptr.
Lemma memval_erasure_list_length:
forall mv mv',
memval_erasure_list mv mv' ->
length mv = length mv'.
Lemma storebytes_erasure:
forall m m' b ofs mv mv' m2
(Hstore: Mem.storebytes m b ofs mv = Some m2)
(Herased: mem_erasure m m')
(Hval_erasure: memval_erasure_list mv mv') ,
exists m2', Mem.storebytes m' b ofs mv' = Some m2'
/\ mem_erasure m2 m2'.
Lemma loadbytes_erasure:
forall m m' b ofs sz bytes
(Hmem_erasure: mem_erasure m m')
(Hloadbytes: Mem.loadbytes m b ofs sz = Some bytes),
exists bytes',
Mem.loadbytes m' b ofs sz = Some bytes' /\
memval_erasure_list bytes bytes'.
Lemma mem_erasure_idempotent:
forall m m',
mem_erasure m m' ->
mem_erasure m (erasePerm m').