From 96a1a9f6cbbccf15e85e0956dc85be330507cb7f Mon Sep 17 00:00:00 2001
From: Robbert Krebbers <mail@robbertkrebbers.nl>
Date: Sat, 16 Jan 2016 01:44:33 +0100
Subject: [PATCH] Hook languages into the Iris parameter.

---
 channel/heap_lang.v |  7 ++++++-
 iris/language.v     | 22 +++++++++++-----------
 iris/parameter.v    |  6 +++++-
 3 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/channel/heap_lang.v b/channel/heap_lang.v
index 70a1bc1a9..7b183a60f 100644
--- a/channel/heap_lang.v
+++ b/channel/heap_lang.v
@@ -408,7 +408,12 @@ 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.
+  Instance heap_lang : Language expr value state := {|
+    to_expr := v2e;
+    of_expr := e2v;
+    atomic := atomic;
+    prim_step := ectx_step
+  |}.
   Proof.
     - exact v2v.
     - exact e2e.
diff --git a/iris/language.v b/iris/language.v
index 0537cf866..a7940fc09 100644
--- a/iris/language.v
+++ b/iris/language.v
@@ -1,10 +1,10 @@
 Require Import prelude.prelude.
 
-Class Language (E V S : Type) := {
+Class Language (E V St : Type) := {
   to_expr : V → E;
   of_expr : E → option V;
   atomic : E → Prop;
-  prim_step : E → S → E → S → option E → Prop;
+  prim_step : E → St → E → St → option E → Prop;
   of_to_expr v : of_expr (to_expr v) = Some v;
   to_of_expr e v : of_expr e = Some v → to_expr v = e;
   values_stuck e σ e' σ' ef : prim_step e σ e' σ' ef → of_expr e = None;
@@ -14,9 +14,8 @@ Class Language (E V S : Type) := {
     prim_step e1 σ1 e2 σ2 ef →
     is_Some (of_expr e2)
 }.
-Arguments Build_Language {_ _ _} _ _ _ _ {_ _ _ _ _}.
 
-Section Lang.
+Section language.
   Context `{Language E V St}.
 
   Definition cfg : Type := (list E * St)%type.
@@ -30,11 +29,12 @@ Section Lang.
   Definition steps := rtc step.
   Definition stepn := nsteps step.
 
-  Definition is_ctx (ctx : E -> E) : Prop :=
-    (forall e, is_Some (of_expr (ctx e)) -> is_Some (of_expr e)) /\
-    (forall e1 σ1 e2 σ2 ef, prim_step e1 σ1 e2 σ2 ef -> prim_step (ctx e1) σ1 (ctx e2) σ2 ef) /\
-    (forall e1' σ1 e2 σ2 ef, of_expr e1' = None -> prim_step (ctx e1') σ1 e2 σ2 ef ->
-                            exists e2', e2 = ctx e2' /\ prim_step e1' σ1 e2' σ2 ef).
-
-End Lang.
+  Definition is_ctx (ctx : E → E) : Prop :=
+    (∀ e, is_Some (of_expr (ctx e)) → is_Some (of_expr e)) ∧
+    (∀ e1 σ1 e2 σ2 ef,
+      prim_step e1 σ1 e2 σ2 ef -> prim_step (ctx e1) σ1 (ctx e2) σ2 ef) ∧
+    (∀ e1' σ1 e2 σ2 ef,
+      of_expr e1' = None → prim_step (ctx e1') σ1 e2 σ2 ef →
+      ∃ e2', e2 = ctx e2' ∧ prim_step e1' σ1 e2' σ2 ef).
+End language.
 
diff --git a/iris/parameter.v b/iris/parameter.v
index 01bc287d0..9a70891f9 100644
--- a/iris/parameter.v
+++ b/iris/parameter.v
@@ -1,8 +1,11 @@
-Require Export modures.cmra.
+Require Export modures.cmra iris.language.
 
 Record iParam := IParam {
+  iexpr : Type;
+  ival : Type;
   istate : Type;
   icmra : cofeT → cmraT;
+  ilanguage : Language iexpr ival istate;
   icmra_empty A : Empty (icmra A);
   icmra_empty_spec A : RAIdentity (icmra A);
   icmra_map {A B} (f : A -n> B) : icmra A -n> icmra B;
@@ -12,6 +15,7 @@ Record iParam := IParam {
     icmra_map (g ◎ f) x ≡ icmra_map g (icmra_map f x);
   icmra_map_mono {A B} (f : A -n> B) : CMRAMonotone (icmra_map f)
 }.
+Existing Instances ilanguage.
 Existing Instances icmra_empty icmra_empty_spec icmra_map_ne icmra_map_mono.
 
 Lemma icmra_map_ext (Σ : iParam) {A B} (f g : A -n> B) m :
-- 
GitLab