From 2b300ebb800e4a6f0957a64a820f72a17de9daf4 Mon Sep 17 00:00:00 2001
From: Ralf Jung <post@ralfj.de>
Date: Tue, 19 Jan 2016 09:57:43 +0100
Subject: [PATCH] use the heap_lang to show that we can actually instantiate
 IParam :)

---
 {channel => barrier}/heap_lang.v | 19 ++++++++++---------
 iris/language.v                  |  1 +
 iris/parameter.v                 |  7 +++----
 3 files changed, 14 insertions(+), 13 deletions(-)
 rename {channel => barrier}/heap_lang.v (97%)

diff --git a/channel/heap_lang.v b/barrier/heap_lang.v
similarity index 97%
rename from channel/heap_lang.v
rename to barrier/heap_lang.v
index bd73b6656..f67a22da5 100644
--- a/channel/heap_lang.v
+++ b/barrier/heap_lang.v
@@ -1,5 +1,5 @@
 Require Import Autosubst.Autosubst.
-Require Import prelude.option prelude.gmap iris.language.
+Require Import prelude.option prelude.gmap iris.language iris.parameter.
 
 Set Bullet Behavior "Strict Subproofs".
 
@@ -318,7 +318,7 @@ Proof.
     exists K''; by eauto using f_equal, f_equal2, f_equal3, v2e_inj.
 
   intros Hfill Hred Hnval. 
-  Time revert K' Hfill; induction K=>K' /= Hfill;
+  revert K' Hfill; induction K=>K' /= Hfill;
     first (now eexists; reflexivity);
     (destruct K'; simpl;
       (* The first case is: K' is EmpyCtx. *)
@@ -408,12 +408,7 @@ 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 := {|
-    of_val := v2e;
-    to_val := e2v;
-    atomic := atomic;
-    prim_step := ectx_step
-  |}.
+  Instance heap_lang : Language expr value state := Build_Language v2e e2v atomic ectx_step.
   Proof.
     - exact v2v.
     - exact e2e.
@@ -431,7 +426,7 @@ Section Language.
   Lemma fill_is_ctx K: is_ctx (fill K).
   Proof.
     split.
-    - intros ? [v Hval]. eapply fill_value. eassumption.
+    - intros ? Hnval. by eapply fill_not_value.
     - intros ? ? ? ? ? (K' & e1' & e2' & Heq1 & Heq2 & Hstep).
       exists (comp_ctx K K'), e1', e2'. rewrite -!fill_comp Heq1 Heq2.
       split; last split; reflexivity || assumption.
@@ -445,3 +440,9 @@ Section Language.
   Qed.
 
 End Language.
+
+(* This is just to demonstrate that we can instantiate IParam. *)
+Module IParam.
+  Definition Σ := IParamConst heap_lang unitRA.
+  Print Assumptions Σ.
+End IParam.
diff --git a/iris/language.v b/iris/language.v
index 443340947..525ffd4a9 100644
--- a/iris/language.v
+++ b/iris/language.v
@@ -14,6 +14,7 @@ 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}.
diff --git a/iris/parameter.v b/iris/parameter.v
index 7bb6d313e..aa75615fe 100644
--- a/iris/parameter.v
+++ b/iris/parameter.v
@@ -17,7 +17,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)
 }.
-Arguments IParam _ _ _ _ _ {_ _} _ {_ _ _ _}.
+Arguments IParam {_ _ _} _ _ {_ _} _ {_ _ _ _}.
 Existing Instances ilanguage.
 Existing Instances icmra_empty icmra_empty_spec icmra_map_ne icmra_map_mono.
 
@@ -27,13 +27,12 @@ Proof.
   by intros ?; apply equiv_dist=> n; apply icmra_map_ne=> ?; apply equiv_dist.
 Qed.
 
-Definition IParamConst (iexpr ival istate : Type)
+Definition IParamConst {iexpr ival istate : Type}
            (ilanguage : Language iexpr ival istate)
            (icmra : cmraT) {icmra_empty : Empty icmra}
            {icmra_empty_spec : RAIdentity icmra}:
   iParam.
-eapply (IParam iexpr ival istate ilanguage
-                   (fun _ => icmra) (fun _ _ _ => cid)).
+eapply (IParam ilanguage (fun _ => icmra) (fun _ _ _ => cid)).
 Unshelve.
 - by intros.
 - by intros.
-- 
GitLab