Hint Extern 3 (list_nodups _ = true) => (compute; reflexivity).
Hint Extern 3 (typecheck _ _ = true) => (compute; reflexivity).
Hint Extern 3 (expcheck _ _ = true) => (compute; reflexivity).
Hint Resolve andb_true_intro.
Obligation Tactic := idtac.
Module Semax : SEMAX.
Local Open Scope pred.
(******  CONSTRUCTION OF rmap FOR THE CONT LANGUAGE *****)
Inductive kind := VAL: adr -> kind | FUN: list var -> kind.
Module AV0 <: ADR_VAL0.
Definition address := adr.
Definition some_address := 0.
Definition kind := kind.
End AV0.
Module AV := SimpleAdrVal AV0.
Module R := Rmaps AV.
Module RML := Rmaps_Lemmas R.
Export RML. Export R.
Instance Cross_rmap : Cross_alg rmap := Cross_rmap_simple (fun _ => I).
Obligation Tactic := idtac.
(******  MAPSTO AND RELATED OPERATORS *****)
Program Definition mapsto (v1 v2: adr) : pred rmap :=
fun w => forall i,
if eq_dec i v1 then w @ i = YES pfullshare (VAL v2) NoneP else identity (w @ i).
Next Obligation.
intros. intros ? ? ? ?.
intro i; specialize (H0 i).
destruct (eq_dec i v1).
apply (age1_YES _ _ _ _ _ H); auto.
destruct (identity_resource (a @ i)) as [? _]. specialize (H1 H0).
apply identity_resource.
generalize (age1_resource_at _ _ H i (a @ i)); intro.
generalize (resource_at_approx a i); intro.
destruct (a @ i); try contradiction.
rewrite H2; simpl in *; auto.
rewrite H2; simpl in *; auto.
Qed.

Lemma singleton_rmap_OK:
forall v v' m,
resource_fmap (approx (level m))
oo (fun i => if eq_dec i v then YES pfullshare (VAL v') NoneP else core m @  i) =
(fun i => if eq_dec i v then YES pfullshare (VAL v') NoneP else core m @ i).