Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
ReLoC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Iris
ReLoC
Commits
11b432e8
Commit
11b432e8
authored
5 years ago
by
Dan Frumin
Browse files
Options
Downloads
Patches
Plain Diff
clean up the context typing a bit
parent
74a31dc7
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
theories/typing/contextual_refinement.v
+127
-103
127 additions, 103 deletions
theories/typing/contextual_refinement.v
with
127 additions
and
103 deletions
theories/typing/contextual_refinement.v
+
127
−
103
View file @
11b432e8
...
@@ -6,14 +6,14 @@ From iris.proofmode Require Import tactics.
...
@@ -6,14 +6,14 @@ From iris.proofmode Require Import tactics.
From
reloc
.
typing
Require
Export
types
interp
fundamental
.
From
reloc
.
typing
Require
Export
types
interp
fundamental
.
Inductive
ctx_item
:=
Inductive
ctx_item
:=
(*
λ-rec
*)
(*
Base lambda calculus
*)
|
CTX_Rec
(
f
x
:
binder
)
|
CTX_Rec
(
f
x
:
binder
)
|
CTX_AppL
(
e2
:
expr
)
|
CTX_AppL
(
e2
:
expr
)
|
CTX_AppR
(
e1
:
expr
)
|
CTX_AppR
(
e1
:
expr
)
(* Bin op *)
(* Base types and their operations *)
|
CTX_UnOp
(
op
:
un_op
)
|
CTX_BinOpL
(
op
:
bin_op
)
(
e2
:
expr
)
|
CTX_BinOpL
(
op
:
bin_op
)
(
e2
:
expr
)
|
CTX_BinOpR
(
op
:
bin_op
)
(
e1
:
expr
)
|
CTX_BinOpR
(
op
:
bin_op
)
(
e1
:
expr
)
(* If *)
|
CTX_IfL
(
e1
:
expr
)
(
e2
:
expr
)
|
CTX_IfL
(
e1
:
expr
)
(
e2
:
expr
)
|
CTX_IfM
(
e0
:
expr
)
(
e2
:
expr
)
|
CTX_IfM
(
e0
:
expr
)
(
e2
:
expr
)
|
CTX_IfR
(
e0
:
expr
)
(
e1
:
expr
)
|
CTX_IfR
(
e0
:
expr
)
(
e1
:
expr
)
...
@@ -28,6 +28,20 @@ Inductive ctx_item :=
...
@@ -28,6 +28,20 @@ Inductive ctx_item :=
|
CTX_CaseL
(
e1
:
expr
)
(
e2
:
expr
)
|
CTX_CaseL
(
e1
:
expr
)
(
e2
:
expr
)
|
CTX_CaseM
(
e0
:
expr
)
(
e2
:
expr
)
|
CTX_CaseM
(
e0
:
expr
)
(
e2
:
expr
)
|
CTX_CaseR
(
e0
:
expr
)
(
e1
:
expr
)
|
CTX_CaseR
(
e0
:
expr
)
(
e1
:
expr
)
(* Concurrency *)
|
CTX_Fork
(* Heap *)
|
CTX_Alloc
|
CTX_Load
|
CTX_StoreL
(
e2
:
expr
)
|
CTX_StoreR
(
e1
:
expr
)
(* Compare-exchange and FAA *)
|
CTX_CmpXchgL
(
e1
:
expr
)
(
e2
:
expr
)
|
CTX_CmpXchgM
(
e0
:
expr
)
(
e2
:
expr
)
|
CTX_CmpXchgR
(
e0
:
expr
)
(
e1
:
expr
)
|
CTX_FAAL
(
e1
:
expr
)
(
e2
:
expr
)
|
CTX_FAAM
(
e0
:
expr
)
(
e2
:
expr
)
|
CTX_FAAR
(
e0
:
expr
)
(
e1
:
expr
)
(* Recursive Types *)
(* Recursive Types *)
|
CTX_Fold
|
CTX_Fold
|
CTX_Unfold
|
CTX_Unfold
...
@@ -36,39 +50,49 @@ Inductive ctx_item :=
...
@@ -36,39 +50,49 @@ Inductive ctx_item :=
|
CTX_TApp
|
CTX_TApp
(* Existential types *)
(* Existential types *)
(* | CTX_Pack *)
(* | CTX_Pack *)
(* TODO: Unpack contexts are still relevant *)
(* | CTX_UnpackL (e' : expr) *)
(* | CTX_UnpackL (e' : expr) *)
(* | CTX_UnpackR (e : expr) *)
(* | CTX_UnpackR (e : expr) *)
(* Concurrency *)
.
|
CTX_Fork
(* Reference Types *)
|
CTX_Alloc
|
CTX_Load
|
CTX_StoreL
(
e2
:
expr
)
|
CTX_StoreR
(
e1
:
expr
)
(* Compare-exchange used for fine-grained concurrency *)
|
CTX_CmpXchg_L
(
e1
:
expr
)
(
e2
:
expr
)
|
CTX_CmpXchg_M
(
e0
:
expr
)
(
e2
:
expr
)
|
CTX_CmpXchg_R
(
e0
:
expr
)
(
e1
:
expr
)
.
Fixpoint
fill_ctx_item
(
ctx
:
ctx_item
)
(
e
:
expr
)
:
expr
:=
Fixpoint
fill_ctx_item
(
ctx
:
ctx_item
)
(
e
:
expr
)
:
expr
:=
match
ctx
with
match
ctx
with
(* Base lambda calculus *)
|
CTX_Rec
f
x
=>
Rec
f
x
e
|
CTX_Rec
f
x
=>
Rec
f
x
e
|
CTX_AppL
e2
=>
App
e
e2
|
CTX_AppL
e2
=>
App
e
e2
|
CTX_AppR
e1
=>
App
e1
e
|
CTX_AppR
e1
=>
App
e1
e
(* Base types and operations *)
|
CTX_UnOp
op
=>
UnOp
op
e
|
CTX_BinOpL
op
e2
=>
BinOp
op
e
e2
|
CTX_BinOpR
op
e1
=>
BinOp
op
e1
e
|
CTX_IfL
e1
e2
=>
If
e
e1
e2
|
CTX_IfM
e0
e2
=>
If
e0
e
e2
|
CTX_IfR
e0
e1
=>
If
e0
e1
e
(* Products *)
|
CTX_PairL
e2
=>
Pair
e
e2
|
CTX_PairL
e2
=>
Pair
e
e2
|
CTX_PairR
e1
=>
Pair
e1
e
|
CTX_PairR
e1
=>
Pair
e1
e
|
CTX_Fst
=>
Fst
e
|
CTX_Fst
=>
Fst
e
|
CTX_Snd
=>
Snd
e
|
CTX_Snd
=>
Snd
e
(* Sums *)
|
CTX_InjL
=>
InjL
e
|
CTX_InjL
=>
InjL
e
|
CTX_InjR
=>
InjR
e
|
CTX_InjR
=>
InjR
e
|
CTX_CaseL
e1
e2
=>
Case
e
e1
e2
|
CTX_CaseL
e1
e2
=>
Case
e
e1
e2
|
CTX_CaseM
e0
e2
=>
Case
e0
e
e2
|
CTX_CaseM
e0
e2
=>
Case
e0
e
e2
|
CTX_CaseR
e0
e1
=>
Case
e0
e1
e
|
CTX_CaseR
e0
e1
=>
Case
e0
e1
e
|
CTX_BinOpL
op
e2
=>
BinOp
op
e
e2
(* Concurrency *)
|
CTX_BinOpR
op
e1
=>
BinOp
op
e1
e
|
CTX_Fork
=>
Fork
e
|
CTX_IfL
e1
e2
=>
If
e
e1
e2
(* Heap & atomic CAS/FAA *)
|
CTX_IfM
e0
e2
=>
If
e0
e
e2
|
CTX_Alloc
=>
Alloc
e
|
CTX_IfR
e0
e1
=>
If
e0
e1
e
|
CTX_Load
=>
Load
e
|
CTX_StoreL
e2
=>
Store
e
e2
|
CTX_StoreR
e1
=>
Store
e1
e
|
CTX_CmpXchgL
e1
e2
=>
CmpXchg
e
e1
e2
|
CTX_CmpXchgM
e0
e2
=>
CmpXchg
e0
e
e2
|
CTX_CmpXchgR
e0
e1
=>
CmpXchg
e0
e1
e
|
CTX_FAAL
e1
e2
=>
FAA
e
e1
e2
|
CTX_FAAM
e0
e2
=>
FAA
e0
e
e2
|
CTX_FAAR
e0
e1
=>
FAA
e0
e1
e
(* Recursive & polymorphic types *)
|
CTX_Fold
=>
e
|
CTX_Fold
=>
e
|
CTX_Unfold
=>
rec_unfold
e
|
CTX_Unfold
=>
rec_unfold
e
|
CTX_TLam
=>
Λ
:
e
|
CTX_TLam
=>
Λ
:
e
...
@@ -76,14 +100,6 @@ Fixpoint fill_ctx_item (ctx : ctx_item) (e : expr) : expr :=
...
@@ -76,14 +100,6 @@ Fixpoint fill_ctx_item (ctx : ctx_item) (e : expr) : expr :=
(* | CTX_Pack => Pack e *)
(* | CTX_Pack => Pack e *)
(* | CTX_UnpackL e1 => Unpack e e1 *)
(* | CTX_UnpackL e1 => Unpack e e1 *)
(* | CTX_UnpackR e0 => Unpack e0 e *)
(* | CTX_UnpackR e0 => Unpack e0 e *)
|
CTX_Fork
=>
Fork
e
|
CTX_Alloc
=>
Alloc
e
|
CTX_Load
=>
Load
e
|
CTX_StoreL
e2
=>
Store
e
e2
|
CTX_StoreR
e1
=>
Store
e1
e
|
CTX_CmpXchg_L
e1
e2
=>
CmpXchg
e
e1
e2
|
CTX_CmpXchg_M
e0
e2
=>
CmpXchg
e0
e
e2
|
CTX_CmpXchg_R
e0
e1
=>
CmpXchg
e0
e1
e
end
.
end
.
Definition
ctx
:=
list
ctx_item
.
Definition
ctx
:=
list
ctx_item
.
...
@@ -94,6 +110,7 @@ Definition fill_ctx (K : ctx) (e : expr) : expr := foldr fill_ctx_item e K.
...
@@ -94,6 +110,7 @@ Definition fill_ctx (K : ctx) (e : expr) : expr := foldr fill_ctx_item e K.
(** typed ctx *)
(** typed ctx *)
Inductive
typed_ctx_item
:
Inductive
typed_ctx_item
:
ctx_item
→
stringmap
type
→
type
→
stringmap
type
→
type
→
Prop
:=
ctx_item
→
stringmap
type
→
type
→
stringmap
type
→
type
→
Prop
:=
(* Base lambda calculus *)
|
TP_CTX_Rec
Γ
τ
τ'
f
x
:
|
TP_CTX_Rec
Γ
τ
τ'
f
x
:
typed_ctx_item
(
CTX_Rec
f
x
)
(
<
[
f
:=
TArrow
τ
τ'
]
>
(
<
[
x
:=
τ
]
>
Γ
))
τ'
Γ
(
TArrow
τ
τ'
)
typed_ctx_item
(
CTX_Rec
f
x
)
(
<
[
f
:=
TArrow
τ
τ'
]
>
(
<
[
x
:=
τ
]
>
Γ
))
τ'
Γ
(
TArrow
τ
τ'
)
|
TP_CTX_AppL
Γ
e2
τ
τ'
:
|
TP_CTX_AppL
Γ
e2
τ
τ'
:
...
@@ -102,6 +119,33 @@ Inductive typed_ctx_item :
...
@@ -102,6 +119,33 @@ Inductive typed_ctx_item :
|
TP_CTX_AppR
Γ
e1
τ
τ'
:
|
TP_CTX_AppR
Γ
e1
τ
τ'
:
typed
Γ
e1
(
TArrow
τ
τ'
)
→
typed
Γ
e1
(
TArrow
τ
τ'
)
→
typed_ctx_item
(
CTX_AppR
e1
)
Γ
τ
Γ
τ'
typed_ctx_item
(
CTX_AppR
e1
)
Γ
τ
Γ
τ'
(* Base types and operations *)
|
TP_CTX_BinOpL_Nat
op
Γ
e2
τ
:
typed
Γ
e2
TNat
→
binop_nat_res_type
op
=
Some
τ
→
typed_ctx_item
(
CTX_BinOpL
op
e2
)
Γ
TNat
Γ
τ
|
TP_CTX_BinOpR_Nat
op
e1
Γ
τ
:
typed
Γ
e1
TNat
→
binop_nat_res_type
op
=
Some
τ
→
typed_ctx_item
(
CTX_BinOpR
op
e1
)
Γ
TNat
Γ
τ
|
TP_CTX_BinOpL_Bool
op
Γ
e2
τ
:
typed
Γ
e2
TBool
→
binop_bool_res_type
op
=
Some
τ
→
typed_ctx_item
(
CTX_BinOpL
op
e2
)
Γ
TBool
Γ
τ
|
TP_CTX_BinOpR_Bool
op
e1
Γ
τ
:
typed
Γ
e1
TBool
→
binop_bool_res_type
op
=
Some
τ
→
typed_ctx_item
(
CTX_BinOpR
op
e1
)
Γ
TBool
Γ
τ
|
TP_CTX_IfL
Γ
e1
e2
τ
:
typed
Γ
e1
τ
→
typed
Γ
e2
τ
→
typed_ctx_item
(
CTX_IfL
e1
e2
)
Γ
(
TBool
)
Γ
τ
|
TP_CTX_IfM
Γ
e0
e2
τ
:
typed
Γ
e0
(
TBool
)
→
typed
Γ
e2
τ
→
typed_ctx_item
(
CTX_IfM
e0
e2
)
Γ
τ
Γ
τ
|
TP_CTX_IfR
Γ
e0
e1
τ
:
typed
Γ
e0
(
TBool
)
→
typed
Γ
e1
τ
→
typed_ctx_item
(
CTX_IfR
e0
e1
)
Γ
τ
Γ
τ
(* Products *)
|
TP_CTX_PairL
Γ
e2
τ
τ'
:
|
TP_CTX_PairL
Γ
e2
τ
τ'
:
typed
Γ
e2
τ'
→
typed
Γ
e2
τ'
→
typed_ctx_item
(
CTX_PairL
e2
)
Γ
τ
Γ
(
TProd
τ
τ'
)
typed_ctx_item
(
CTX_PairL
e2
)
Γ
τ
Γ
(
TProd
τ
τ'
)
...
@@ -112,6 +156,7 @@ Inductive typed_ctx_item :
...
@@ -112,6 +156,7 @@ Inductive typed_ctx_item :
typed_ctx_item
CTX_Fst
Γ
(
TProd
τ
τ'
)
Γ
τ
typed_ctx_item
CTX_Fst
Γ
(
TProd
τ
τ'
)
Γ
τ
|
TP_CTX_Snd
Γ
τ
τ'
:
|
TP_CTX_Snd
Γ
τ
τ'
:
typed_ctx_item
CTX_Snd
Γ
(
TProd
τ
τ'
)
Γ
τ'
typed_ctx_item
CTX_Snd
Γ
(
TProd
τ
τ'
)
Γ
τ'
(* Sums *)
|
TP_CTX_InjL
Γ
τ
τ'
:
|
TP_CTX_InjL
Γ
τ
τ'
:
typed_ctx_item
CTX_InjL
Γ
τ
Γ
(
TSum
τ
τ'
)
typed_ctx_item
CTX_InjL
Γ
τ
Γ
(
TSum
τ
τ'
)
|
TP_CTX_InjR
Γ
τ
τ'
:
|
TP_CTX_InjR
Γ
τ
τ'
:
...
@@ -125,49 +170,10 @@ Inductive typed_ctx_item :
...
@@ -125,49 +170,10 @@ Inductive typed_ctx_item :
|
TP_CTX_CaseR
Γ
e0
e1
τ1
τ2
τ'
:
|
TP_CTX_CaseR
Γ
e0
e1
τ1
τ2
τ'
:
typed
Γ
e0
(
TSum
τ1
τ2
)
→
typed
Γ
e1
(
TArrow
τ1
τ'
)
→
typed
Γ
e0
(
TSum
τ1
τ2
)
→
typed
Γ
e1
(
TArrow
τ1
τ'
)
→
typed_ctx_item
(
CTX_CaseR
e0
e1
)
Γ
(
TArrow
τ2
τ'
)
Γ
τ'
typed_ctx_item
(
CTX_CaseR
e0
e1
)
Γ
(
TArrow
τ2
τ'
)
Γ
τ'
|
TP_CTX_IfL
Γ
e1
e2
τ
:
(* Concurrency *)
typed
Γ
e1
τ
→
typed
Γ
e2
τ
→
typed_ctx_item
(
CTX_IfL
e1
e2
)
Γ
(
TBool
)
Γ
τ
|
TP_CTX_IfM
Γ
e0
e2
τ
:
typed
Γ
e0
(
TBool
)
→
typed
Γ
e2
τ
→
typed_ctx_item
(
CTX_IfM
e0
e2
)
Γ
τ
Γ
τ
|
TP_CTX_IfR
Γ
e0
e1
τ
:
typed
Γ
e0
(
TBool
)
→
typed
Γ
e1
τ
→
typed_ctx_item
(
CTX_IfR
e0
e1
)
Γ
τ
Γ
τ
|
TP_CTX_BinOpL_Nat
op
Γ
e2
τ
:
typed
Γ
e2
TNat
→
binop_nat_res_type
op
=
Some
τ
→
typed_ctx_item
(
CTX_BinOpL
op
e2
)
Γ
TNat
Γ
τ
|
TP_CTX_BinOpR_Nat
op
e1
Γ
τ
:
typed
Γ
e1
TNat
→
binop_nat_res_type
op
=
Some
τ
→
typed_ctx_item
(
CTX_BinOpR
op
e1
)
Γ
TNat
Γ
τ
|
TP_CTX_BinOpL_Bool
op
Γ
e2
τ
:
typed
Γ
e2
TBool
→
binop_bool_res_type
op
=
Some
τ
→
typed_ctx_item
(
CTX_BinOpL
op
e2
)
Γ
TBool
Γ
τ
|
TP_CTX_BinOpR_Bool
op
e1
Γ
τ
:
typed
Γ
e1
TBool
→
binop_bool_res_type
op
=
Some
τ
→
typed_ctx_item
(
CTX_BinOpR
op
e1
)
Γ
TBool
Γ
τ
|
TP_CTX_Fold
Γ
τ
:
typed_ctx_item
CTX_Fold
Γ
τ
.[(
TRec
τ
)
/
]
Γ
(
TRec
τ
)
|
TP_CTX_Unfold
Γ
τ
:
typed_ctx_item
CTX_Unfold
Γ
(
TRec
τ
)
Γ
τ
.[(
TRec
τ
)
/
]
|
TP_CTX_TLam
Γ
τ
:
typed_ctx_item
CTX_TLam
(
Autosubst_Classes
.
subst
(
ren
(
+
1
%
nat
))
<$>
Γ
)
τ
Γ
(
TForall
τ
)
|
TP_CTX_TApp
Γ
τ
τ'
:
typed_ctx_item
CTX_TApp
Γ
(
TForall
τ
)
Γ
τ
.[
τ'
/
]
(* | TP_CTX_Pack Γ τ τ' : *)
(* typed_ctx_item CTX_Pack Γ τ.[τ'/] Γ (TExists τ) *)
(* | TP_CTX_UnpackL e2 Γ τ τ2 : *)
(* typed (subst (ren (+1)) <$> Γ) e2 (TArrow τ (subst (ren (+1)) τ2)) → *)
(* typed_ctx_item (CTX_UnpackL e2) Γ (TExists τ) Γ τ2 *)
(* | TP_CTX_UnpackR e1 Γ τ τ2 : *)
(* typed Γ e1 (TExists τ) → *)
(* typed_ctx_item (CTX_UnpackR e1) (subst (ren (+1)) <$> Γ) (TArrow τ (subst (ren (+1)) τ2)) Γ τ2 *)
|
TP_CTX_Fork
Γ
:
|
TP_CTX_Fork
Γ
:
typed_ctx_item
CTX_Fork
Γ
TUnit
Γ
TUnit
typed_ctx_item
CTX_Fork
Γ
TUnit
Γ
TUnit
(* Heap *)
|
TPCTX_Alloc
Γ
τ
:
|
TPCTX_Alloc
Γ
τ
:
typed_ctx_item
CTX_Alloc
Γ
τ
Γ
(
Tref
τ
)
typed_ctx_item
CTX_Alloc
Γ
τ
Γ
(
Tref
τ
)
|
TP_CTX_Load
Γ
τ
:
|
TP_CTX_Load
Γ
τ
:
...
@@ -180,15 +186,33 @@ Inductive typed_ctx_item :
...
@@ -180,15 +186,33 @@ Inductive typed_ctx_item :
|
TP_CTX_CasL
Γ
e1
e2
τ
:
|
TP_CTX_CasL
Γ
e1
e2
τ
:
EqType
τ
→
UnboxedType
τ
→
EqType
τ
→
UnboxedType
τ
→
typed
Γ
e1
τ
→
typed
Γ
e2
τ
→
typed
Γ
e1
τ
→
typed
Γ
e2
τ
→
typed_ctx_item
(
CTX_CmpXchg
_
L
e1
e2
)
Γ
(
Tref
τ
)
Γ
(
TProd
τ
TBool
)
typed_ctx_item
(
CTX_CmpXchgL
e1
e2
)
Γ
(
Tref
τ
)
Γ
(
TProd
τ
TBool
)
|
TP_CTX_CasM
Γ
e0
e2
τ
:
|
TP_CTX_CasM
Γ
e0
e2
τ
:
EqType
τ
→
UnboxedType
τ
→
EqType
τ
→
UnboxedType
τ
→
typed
Γ
e0
(
Tref
τ
)
→
typed
Γ
e2
τ
→
typed
Γ
e0
(
Tref
τ
)
→
typed
Γ
e2
τ
→
typed_ctx_item
(
CTX_CmpXchg
_
M
e0
e2
)
Γ
τ
Γ
(
TProd
τ
TBool
)
typed_ctx_item
(
CTX_CmpXchgM
e0
e2
)
Γ
τ
Γ
(
TProd
τ
TBool
)
|
TP_CTX_CasR
Γ
e0
e1
τ
:
|
TP_CTX_CasR
Γ
e0
e1
τ
:
EqType
τ
→
UnboxedType
τ
→
EqType
τ
→
UnboxedType
τ
→
typed
Γ
e0
(
Tref
τ
)
→
typed
Γ
e1
τ
→
typed
Γ
e0
(
Tref
τ
)
→
typed
Γ
e1
τ
→
typed_ctx_item
(
CTX_CmpXchg_R
e0
e1
)
Γ
τ
Γ
(
TProd
τ
TBool
)
.
typed_ctx_item
(
CTX_CmpXchgR
e0
e1
)
Γ
τ
Γ
(
TProd
τ
TBool
)
(* Polymorphic & recursive types *)
|
TP_CTX_Fold
Γ
τ
:
typed_ctx_item
CTX_Fold
Γ
τ
.[(
TRec
τ
)
/
]
Γ
(
TRec
τ
)
|
TP_CTX_Unfold
Γ
τ
:
typed_ctx_item
CTX_Unfold
Γ
(
TRec
τ
)
Γ
τ
.[(
TRec
τ
)
/
]
|
TP_CTX_TLam
Γ
τ
:
typed_ctx_item
CTX_TLam
(
Autosubst_Classes
.
subst
(
ren
(
+
1
%
nat
))
<$>
Γ
)
τ
Γ
(
TForall
τ
)
|
TP_CTX_TApp
Γ
τ
τ'
:
typed_ctx_item
CTX_TApp
Γ
(
TForall
τ
)
Γ
τ
.[
τ'
/
]
(* | TP_CTX_Pack Γ τ τ' : *)
(* typed_ctx_item CTX_Pack Γ τ.[τ'/] Γ (TExists τ) *)
(* | TP_CTX_UnpackL e2 Γ τ τ2 : *)
(* typed (subst (ren (+1)) <$> Γ) e2 (TArrow τ (subst (ren (+1)) τ2)) → *)
(* typed_ctx_item (CTX_UnpackL e2) Γ (TExists τ) Γ τ2 *)
(* | TP_CTX_UnpackR e1 Γ τ τ2 : *)
(* typed Γ e1 (TExists τ) → *)
(* typed_ctx_item (CTX_UnpackR e1) (subst (ren (+1)) <$> Γ) (TArrow τ (subst (ren (+1)) τ2)) Γ τ2 *)
.
Inductive
typed_ctx
:
ctx
→
stringmap
type
→
type
→
stringmap
type
→
type
→
Prop
:=
Inductive
typed_ctx
:
ctx
→
stringmap
type
→
type
→
stringmap
type
→
type
→
Prop
:=
|
TPCTX_nil
Γ
τ
:
|
TPCTX_nil
Γ
τ
:
...
@@ -288,6 +312,27 @@ Section bin_log_related_under_typed_ctx.
...
@@ -288,6 +312,27 @@ Section bin_log_related_under_typed_ctx.
+
iApply
(
bin_log_related_app
_
_
_
_
_
_
τ2
with
"[]"
)
.
+
iApply
(
bin_log_related_app
_
_
_
_
_
_
τ2
with
"[]"
)
.
by
iApply
fundamental
.
by
iApply
fundamental
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_nat_binop
with
"[]"
);
try
(
by
iApply
fundamental
);
eauto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_nat_binop
with
"[]"
);
try
(
by
iApply
fundamental
);
eauto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_bool_binop
with
"[]"
);
try
(
by
iApply
fundamental
);
eauto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_bool_binop
with
"[]"
);
try
(
by
iApply
fundamental
);
eauto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_if
with
"[] []"
);
try
by
iApply
fundamental
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_if
with
"[] []"
);
try
by
iApply
fundamental
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_if
with
"[] []"
);
try
by
iApply
fundamental
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_pair
with
"[]"
)
.
+
iApply
(
bin_log_related_pair
with
"[]"
)
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
by
iApply
fundamental
.
by
iApply
fundamental
.
...
@@ -314,25 +359,25 @@ Section bin_log_related_under_typed_ctx.
...
@@ -314,25 +359,25 @@ Section bin_log_related_under_typed_ctx.
by
iApply
fundamental
.
by
iApply
fundamental
.
by
iApply
fundamental
.
by
iApply
fundamental
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_if
with
"[] []"
);
+
iApply
(
bin_log_related_fork
with
"[]"
)
.
try
by
iApply
fundamental
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_if
with
"[] []"
);
+
iApply
(
bin_log_related_alloc
with
"[]"
)
.
try
by
iApply
fundamental
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_if
with
"[] []"
);
+
iApply
(
bin_log_related_load
with
"[]"
)
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_store
with
"[]"
);
try
by
iApply
fundamental
.
try
by
iApply
fundamental
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_
nat_binop
with
"[]"
);
+
iApply
(
bin_log_related_
store
with
"[]"
);
try
(
by
iApply
fundamental
);
eauto
.
try
by
iApply
fundamental
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_
nat_binop
with
"[]"
);
+
iApply
(
bin_log_related_
CmpXchg
with
"[]
[]
"
);
try
(
by
iApply
fundamental
);
eauto
.
try
(
by
iApply
fundamental
);
eauto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_
bool_binop
with
"[]"
);
+
iApply
(
bin_log_related_
CmpXchg
with
"[]
[]
"
);
try
(
by
iApply
fundamental
);
eauto
.
try
(
by
iApply
fundamental
);
eauto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_
bool_binop
with
"[]"
);
+
iApply
(
bin_log_related_
CmpXchg
with
"[]
[]
"
);
try
(
by
iApply
fundamental
);
eauto
.
try
(
by
iApply
fundamental
);
eauto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_fold
with
"[]"
)
.
+
iApply
(
bin_log_related_fold
with
"[]"
)
.
...
@@ -350,26 +395,5 @@ Section bin_log_related_under_typed_ctx.
...
@@ -350,26 +395,5 @@ Section bin_log_related_under_typed_ctx.
(* iApply (IHK with "[Hrel]"); auto. *)
(* iApply (IHK with "[Hrel]"); auto. *)
(* + iApply bin_log_related_unpack; try by (iIntros; fundamental). *)
(* + iApply bin_log_related_unpack; try by (iIntros; fundamental). *)
(* iIntros. iApply (IHK with "[Hrel]"); auto. *)
(* iIntros. iApply (IHK with "[Hrel]"); auto. *)
+
iApply
(
bin_log_related_fork
with
"[]"
)
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_alloc
with
"[]"
)
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_load
with
"[]"
)
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_store
with
"[]"
);
try
by
iApply
fundamental
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_store
with
"[]"
);
try
by
iApply
fundamental
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_CmpXchg
with
"[] []"
);
try
(
by
iApply
fundamental
);
eauto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_CmpXchg
with
"[] []"
);
try
(
by
iApply
fundamental
);
eauto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
+
iApply
(
bin_log_related_CmpXchg
with
"[] []"
);
try
(
by
iApply
fundamental
);
eauto
.
iApply
(
IHK
with
"[Hrel]"
);
auto
.
Qed
.
Qed
.
End
bin_log_related_under_typed_ctx
.
End
bin_log_related_under_typed_ctx
.
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment