Canonical Structure exn_eqMixin := EqMixin eqexnP.Canonical Structure exn_eqType := EqType exn exn_eqMixin.(* Answer type *)
Inductive ans (A : Type) : Type := Val of A | Exn of exn.(* Answer type *)
Inductive ans (A : Type) : Type := Val of A | Exn of exn.(* Answer type *)
Inductive ans (A : Type) : Type := Val of A | Exn of exn.Notation pre := (Pred heap).Notation post A := (ans A -> heap -> heap -> Prop).Definition spec B := pre * post B : Type.Notation ideald P := (ideal (defed P)).(* we carve out the model out of the following base type *)
Definition prog := ideald P -> ans A -> Pred heap.

(* Specifications: *)
Lemma modelE (e1 e2 : ST) : e1 = e2 <-> model e1 = model e2.
Lemma st_refl e : st_leq e e.
Lemma st_asym e1 e2 : st_leq e1 e2 -> st_leq e2 e1 -> e1 = e2.
Lemma st_trans e1 e2 e3 : st_leq e1 e2 -> st_leq e2 e3 -> st_leq e1 e3.
Lemma st_bot_coherent : coherent st_bot'.
Lemma st_bot_dstrict : def_strict st_bot'.