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