Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Marianna Rapoport
iris-coq
Commits
12d7f42c
Commit
12d7f42c
authored
Feb 24, 2016
by
Ralf Jung
Browse files
seal STS ownership
parent
18f2e6b0
Changes
1
Hide whitespace changes
Inline
Side-by-side
program_logic/sts.v
View file @
12d7f42c
...
...
@@ -13,18 +13,35 @@ Instance inGF_stsG sts `{inGF Λ Σ (stsGF sts)}
`
{
Inhabited
(
sts
.
state
sts
)}
:
stsG
Λ
Σ
sts
.
Proof
.
split
;
try
apply
_
.
apply
:
inGF_inG
.
Qed
.
Section
definitions
.
Context
`
{
i
:
stsG
Λ
Σ
sts
}
(
γ
:
gname
).
Import
sts
.
Definition
sts_inv
(
φ
:
state
sts
→
iPropG
Λ
Σ
)
:
iPropG
Λ
Σ
:
=
(
∃
s
,
own
γ
(
sts_auth
s
∅
)
★
φ
s
)%
I
.
Definition
sts_ownS
(
S
:
states
sts
)
(
T
:
tokens
sts
)
:
iPropG
Λ
Σ
:
=
own
γ
(
sts_frag
S
T
).
Definition
sts_own
(
s
:
state
sts
)
(
T
:
tokens
sts
)
:
iPropG
Λ
Σ
:
=
own
γ
(
sts_frag_up
s
T
).
Definition
sts_ctx
(
N
:
namespace
)
(
φ
:
state
sts
→
iPropG
Λ
Σ
)
:
iPropG
Λ
Σ
:
=
inv
N
(
sts_inv
φ
).
End
definitions
.
Definition
sts_ownS_def
`
{
i
:
stsG
Λ
Σ
sts
}
(
γ
:
gname
)
(
S
:
sts
.
states
sts
)
(
T
:
sts
.
tokens
sts
)
:
iPropG
Λ
Σ
:
=
own
γ
(
sts_frag
S
T
).
Definition
sts_own_def
`
{
i
:
stsG
Λ
Σ
sts
}
(
γ
:
gname
)
(
s
:
sts
.
state
sts
)
(
T
:
sts
.
tokens
sts
)
:
iPropG
Λ
Σ
:
=
own
γ
(
sts_frag_up
s
T
).
(* Perform sealing. *)
Module
Type
StsOwnSig
.
Parameter
sts_ownS
:
∀
`
{
i
:
stsG
Λ
Σ
sts
}
(
γ
:
gname
)
(
S
:
sts
.
states
sts
)
(
T
:
sts
.
tokens
sts
),
iPropG
Λ
Σ
.
Parameter
sts_own
:
∀
`
{
i
:
stsG
Λ
Σ
sts
}
(
γ
:
gname
)
(
s
:
sts
.
state
sts
)
(
T
:
sts
.
tokens
sts
),
iPropG
Λ
Σ
.
Axiom
sts_ownS_def
:
@
sts_ownS
=
@
sts_ownS_def
.
Axiom
sts_own_def
:
@
sts_own
=
@
sts_own_def
.
End
StsOwnSig
.
Module
Export
StsOwn
:
StsOwnSig
.
Definition
sts_ownS
:
=
@
sts_ownS_def
.
Definition
sts_own
:
=
@
sts_own_def
.
Definition
sts_ownS_def
:
=
Logic
.
eq_refl
(@
sts_ownS_def
).
Definition
sts_own_def
:
=
Logic
.
eq_refl
(@
sts_own_def
).
End
StsOwn
.
Definition
sts_inv
`
{
i
:
stsG
Λ
Σ
sts
}
(
γ
:
gname
)
(
φ
:
sts
.
state
sts
→
iPropG
Λ
Σ
)
:
iPropG
Λ
Σ
:
=
(
∃
s
,
own
γ
(
sts_auth
s
∅
)
★
φ
s
)%
I
.
Definition
sts_ctx
`
{
i
:
stsG
Λ
Σ
sts
}
(
γ
:
gname
)
(
N
:
namespace
)
(
φ
:
sts
.
state
sts
→
iPropG
Λ
Σ
)
:
iPropG
Λ
Σ
:
=
inv
N
(
sts_inv
γ
φ
).
Instance
:
Params
(@
sts_inv
)
5
.
Instance
:
Params
(@
sts_ownS
)
5
.
Instance
:
Params
(@
sts_own
)
6
.
...
...
@@ -46,9 +63,11 @@ Section sts.
Proper
(
pointwise_relation
_
(
≡
)
==>
(
≡
))
(
sts_inv
γ
).
Proof
.
by
intros
φ
1
φ
2
H
φ
;
rewrite
/
sts_inv
;
setoid_rewrite
H
φ
.
Qed
.
Global
Instance
sts_ownS_proper
γ
:
Proper
((
≡
)
==>
(
≡
)
==>
(
≡
))
(
sts_ownS
γ
).
Proof
.
intros
S1
S2
HS
T1
T2
HT
.
by
rewrite
/
sts_ownS
HS
HT
.
Qed
.
Proof
.
intros
S1
S2
HS
T1
T2
HT
.
by
rewrite
!
sts_ownS_def
/
Top
.
sts_ownS_def
HS
HT
.
Qed
.
Global
Instance
sts_own_proper
γ
s
:
Proper
((
≡
)
==>
(
≡
))
(
sts_own
γ
s
).
Proof
.
intros
T1
T2
HT
.
by
rewrite
/
sts_own
HT
.
Qed
.
Proof
.
intros
T1
T2
HT
.
by
rewrite
!
sts_own_def
/
Top
.
sts_own
_def
HT
.
Qed
.
Global
Instance
sts_ctx_ne
n
γ
N
:
Proper
(
pointwise_relation
_
(
dist
n
)
==>
dist
n
)
(
sts_ctx
γ
N
).
Proof
.
by
intros
φ
1
φ
2
H
φ
;
rewrite
/
sts_ctx
H
φ
.
Qed
.
...
...
@@ -61,17 +80,24 @@ Section sts.
Lemma
sts_ownS_weaken
E
γ
S1
S2
T1
T2
:
T2
⊆
T1
→
S1
⊆
S2
→
sts
.
closed
S2
T2
→
sts_ownS
γ
S1
T1
⊑
(|={
E
}=>
sts_ownS
γ
S2
T2
).
Proof
.
intros
?
?
?.
by
apply
own_update
,
sts_update_frag
.
Qed
.
Proof
.
intros
?
?
?.
rewrite
sts_ownS_def
.
by
apply
own_update
,
sts_update_frag
.
Qed
.
Lemma
sts_own_weaken
E
γ
s
S
T1
T2
:
T2
⊆
T1
→
s
∈
S
→
sts
.
closed
S
T2
→
sts_own
γ
s
T1
⊑
(|={
E
}=>
sts_ownS
γ
S
T2
).
Proof
.
intros
???.
by
apply
own_update
,
sts_update_frag_up
.
Qed
.
Proof
.
intros
???.
rewrite
sts_ownS_def
sts_own_def
.
by
apply
own_update
,
sts_update_frag_up
.
Qed
.
Lemma
sts_ownS_op
γ
S1
S2
T1
T2
:
T1
∩
T2
⊆
∅
→
sts
.
closed
S1
T1
→
sts
.
closed
S2
T2
→
sts_ownS
γ
(
S1
∩
S2
)
(
T1
∪
T2
)
≡
(
sts_ownS
γ
S1
T1
★
sts_ownS
γ
S2
T2
)%
I
.
Proof
.
intros
.
by
rewrite
/
sts_ownS
-
own_op
sts_op_frag
.
Qed
.
Proof
.
intros
.
by
rewrite
sts_ownS_def
/
Top
.
sts_ownS_def
-
own_op
sts_op_frag
.
Qed
.
Lemma
sts_alloc
E
N
s
:
nclose
N
⊆
E
→
...
...
@@ -85,7 +111,7 @@ Section sts.
rewrite
sep_exist_l
.
apply
exist_elim
=>
γ
.
rewrite
-(
exist_intro
γ
).
trans
(
▷
sts_inv
γ
φ
★
sts_own
γ
s
(
⊤
∖
sts
.
tok
s
))%
I
.
{
rewrite
/
sts_inv
-(
exist_intro
s
)
later_sep
.
ecancel
[
▷
φ
_
]%
I
.
ecancel
[
▷
φ
_
]%
I
.
rewrite
sts_own_def
.
by
rewrite
-
later_intro
-
own_op
sts_op_auth_frag_up
;
last
set_solver
.
}
rewrite
(
inv_alloc
N
)
/
sts_ctx
pvs_frame_r
.
by
rewrite
always_and_sep_l
.
...
...
@@ -95,7 +121,7 @@ Section sts.
(
▷
sts_inv
γ
φ
★
sts_ownS
γ
S
T
)
⊑
(|={
E
}=>
∃
s
,
■
(
s
∈
S
)
★
▷
φ
s
★
own
γ
(
sts_auth
s
T
)).
Proof
.
rewrite
/
sts_inv
/
sts_ownS
later_exist
sep_exist_r
.
apply
exist_elim
=>
s
.
rewrite
/
sts_inv
sts_ownS
_def
later_exist
sep_exist_r
.
apply
exist_elim
=>
s
.
rewrite
later_sep
pvs_timeless
!
pvs_frame_r
.
apply
pvs_mono
.
rewrite
-(
exist_intro
s
).
rewrite
[(
_
★
▷φ
_
)%
I
]
comm
-!
assoc
-
own_op
-[(
▷φ
_
★
_
)%
I
]
comm
.
...
...
@@ -112,7 +138,7 @@ Section sts.
sts
.
steps
(
s
,
T
)
(
s'
,
T'
)
→
(
▷
φ
s'
★
own
γ
(
sts_auth
s
T
))
⊑
(|={
E
}=>
▷
sts_inv
γ
φ
★
sts_own
γ
s'
T'
).
Proof
.
intros
Hstep
.
rewrite
/
sts_inv
/
sts_own
-(
exist_intro
s'
)
later_sep
.
intros
Hstep
.
rewrite
/
sts_inv
sts_own
_def
-(
exist_intro
s'
)
later_sep
.
(* TODO it would be really nice to use cancel here *)
rewrite
[(
_
★
▷
φ
_
)%
I
]
comm
-
assoc
.
rewrite
-
pvs_frame_l
.
apply
sep_mono_r
.
rewrite
-
later_intro
.
...
...
@@ -162,5 +188,8 @@ Section sts.
■
(
sts
.
steps
(
s
,
T
)
(
s'
,
T'
))
★
▷
φ
s'
★
(
sts_own
γ
s'
T'
-
★
Ψ
x
)))
→
P
⊑
fsa
E
Ψ
.
Proof
.
apply
sts_fsaS
.
Qed
.
Proof
.
rewrite
sts_own_def
.
intros
.
eapply
sts_fsaS
;
try
done
;
[].
by
rewrite
sts_ownS_def
sts_own_def
.
Qed
.
End
sts
.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment