diff --git a/barrier/heap_lang.v b/barrier/heap_lang.v index 9dfcbf9cdb31369556aeb987da4654ca2275a1b2..bf647cb23d828d6f53e1f92d675a9d3bd62085b8 100644 --- a/barrier/heap_lang.v +++ b/barrier/heap_lang.v @@ -406,19 +406,26 @@ Section Language. Definition ectx_step e1 σ1 e2 σ2 (ef: option expr) := exists K e1' e2', e1 = fill K e1' /\ e2 = fill K e2' /\ prim_step e1' σ1 e2' σ2 ef. - Instance heap_lang : Language expr value state := Build_Language v2e e2v atomic ectx_step. - Proof. - - exact v2v. - - exact e2e. - - intros e1 σ1 e2 σ2 ef (K & e1' & e2' & He1 & He2 & Hstep). subst e1 e2. - eapply fill_not_value. eapply reducible_not_value. do 4 eexists; eassumption. - - exact atomic_not_value. - - intros ? ? ? ? ? Hatomic (K & e1' & e2' & Heq1 & Heq2 & Hstep). - subst. move: (Hatomic). rewrite (atomic_fill e1' K). (* RJ: this is kind of annoying. *) - + rewrite !fill_empty. eauto using atomic_step. - + assumption. - + clear Hatomic. eapply reducible_not_value. do 4 eexists; eassumption. - Defined. + Program Instance heap_lang : Language expr value state := {| + of_val := v2e; + to_val := e2v; + language.atomic := atomic; + language.prim_step := ectx_step; + to_of_val := v2v; + of_to_val := e2e; + language.atomic_not_value := atomic_not_value + |}. + Next Obligation. + intros e1 σ1 e2 σ2 ef (K & e1' & e2' & He1 & He2 & Hstep). subst e1 e2. + eapply fill_not_value. eapply reducible_not_value. do 4 eexists; eassumption. + Qed. + Next Obligation. + intros ? ? ? ? ? Hatomic (K & e1' & e2' & Heq1 & Heq2 & Hstep). + subst. move: (Hatomic). rewrite (atomic_fill e1' K). + - rewrite !fill_empty. eauto using atomic_step. + - assumption. + - clear Hatomic. eapply reducible_not_value. do 4 eexists; eassumption. + Qed. (** We can have bind with arbitrary evaluation contexts **) Lemma fill_is_ctx K: is_ctx (fill K). diff --git a/iris/language.v b/iris/language.v index 09c9aee60741e217cb7bb73cf17f86bf8dca1bce..b3aa860f254bf8a0c7183223058e5d463688657b 100644 --- a/iris/language.v +++ b/iris/language.v @@ -14,7 +14,6 @@ Class Language (E V St : Type) := { prim_step e1 σ1 e2 σ2 ef → is_Some (to_val e2) }. -Arguments Build_Language {_ _ _} _ _ _ _ {_ _ _ _ _}. Section language. Context `{Language E V St}.