diff --git a/theories/heap_lang/lang.v b/theories/heap_lang/lang.v index f0b7642901132ed9744a5362d500e63aaaedfff8..0791353e7adb17ce1b9c602579143f26b158255b 100644 --- a/theories/heap_lang/lang.v +++ b/theories/heap_lang/lang.v @@ -735,19 +735,3 @@ Proof. apply (H κs (fill_item K (foldl (flip fill_item) e2' Ks)) σ' efs). econstructor 1 with (K := Ks ++ [K]); last done; simpl; by rewrite fill_app. Qed. - -(** Define some derived forms. *) -Notation Lam x e := (Rec BAnon x e) (only parsing). -Notation Let x e1 e2 := (App (Lam x e2) e1) (only parsing). -Notation Seq e1 e2 := (Let BAnon e1 e2) (only parsing). -Notation LamV x e := (RecV BAnon x e) (only parsing). -Notation LetCtx x e2 := (AppRCtx (LamV x e2)) (only parsing). -Notation SeqCtx e2 := (LetCtx BAnon e2) (only parsing). -Notation Match e0 x1 e1 x2 e2 := (Case e0 (Lam x1 e1) (Lam x2 e2)) (only parsing). -Notation Alloc e := (AllocN (Val $ LitV $ LitInt 1) e) (only parsing). - -(* Skip should be atomic, we sometimes open invariants around - it. Hence, we need to explicitly use LamV instead of e.g., Seq. *) -Notation Skip := (App (Val $ LamV BAnon (Val $ LitV LitUnit)) (Val $ LitV LitUnit)). - -Notation ResolveProph e1 e2 := (Resolve Skip e1 e2) (only parsing). diff --git a/theories/heap_lang/lifting.v b/theories/heap_lang/lifting.v index 347e58868d602d75318b5df02f46a449d0137bc2..00802e47193a21f5572bcf3dabbebe01b333f0f6 100644 --- a/theories/heap_lang/lifting.v +++ b/theories/heap_lang/lifting.v @@ -4,7 +4,7 @@ From iris.base_logic.lib Require Export proph_map. From iris.program_logic Require Export weakestpre. From iris.program_logic Require Import ectx_lifting total_ectx_lifting. From iris.heap_lang Require Export lang. -From iris.heap_lang Require Import tactics. +From iris.heap_lang Require Import tactics notation. From iris.proofmode Require Import tactics. From stdpp Require Import fin_maps. Set Default Proof Using "Type". diff --git a/theories/heap_lang/notation.v b/theories/heap_lang/notation.v index 420fb7154b8fcd495c82da743315c9ba56dedd49..ae3d54943398868d220d02a885f142349408b181 100644 --- a/theories/heap_lang/notation.v +++ b/theories/heap_lang/notation.v @@ -1,20 +1,35 @@ From iris.program_logic Require Import language. -From iris.heap_lang Require Export lang tactics. +From iris.heap_lang Require Export lang. Set Default Proof Using "Type". Delimit Scope expr_scope with E. Delimit Scope val_scope with V. +(** Coercions to make programs easier to type. *) Coercion LitInt : Z >-> base_lit. Coercion LitBool : bool >-> base_lit. Coercion LitLoc : loc >-> base_lit. Coercion LitProphecy : proph_id >-> base_lit. Coercion App : expr >-> Funclass. -Coercion Val : val >-> expr. +Coercion Val : val >-> expr. Coercion Var : string >-> expr. +(** Define some derived forms. *) +Notation Lam x e := (Rec BAnon x e) (only parsing). +Notation Let x e1 e2 := (App (Lam x e2) e1) (only parsing). +Notation Seq e1 e2 := (Let BAnon e1 e2) (only parsing). +Notation LamV x e := (RecV BAnon x e) (only parsing). +Notation LetCtx x e2 := (AppRCtx (LamV x e2)) (only parsing). +Notation SeqCtx e2 := (LetCtx BAnon e2) (only parsing). +Notation Match e0 x1 e1 x2 e2 := (Case e0 (Lam x1 e1) (Lam x2 e2)) (only parsing). +Notation Alloc e := (AllocN (Val $ LitV $ LitInt 1) e) (only parsing). + +(* Skip should be atomic, we sometimes open invariants around + it. Hence, we need to explicitly use LamV instead of e.g., Seq. *) +Notation Skip := (App (Val $ LamV BAnon (Val $ LitV LitUnit)) (Val $ LitV LitUnit)). + (* No scope for the values, does not conflict and scope is often not inferred properly. *) Notation "# l" := (LitV l%Z%V) (at level 8, format "# l"). @@ -141,4 +156,5 @@ Notation "'match:' e0 'with' 'SOME' x => e2 | 'NONE' => e1 'end'" := (Match e0 BAnon e1 x%binder e2) (e0, e1, x, e2 at level 200, only parsing) : expr_scope. +Notation ResolveProph e1 e2 := (Resolve Skip e1 e2) (only parsing). Notation "'resolve_proph:' p 'to:' v" := (ResolveProph p v) (at level 100) : expr_scope.