Section Read.
Variable (A : Type) (x : ptr).
Definition read_s : spec A :=
(fun i => x \in dom i /\ exists v:A, look x i = dyn v,
fun y i m => m = i /\ forall v, look x i = dyn v -> y = Val v).
Definition read_sp (p : ideald read_s.1) (v : ans A) m :=
m \In id_val p /\ exists w, v = Val w /\ look x m = dyn w.

Lemma read_coherent : coherent read_sp.