Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Simon Spies
Iris
Commits
f0e60e9d
Commit
f0e60e9d
authored
Feb 11, 2016
by
Ralf Jung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Change some names related to the global ghost CMRA around
globalC -> globalF New notation: iPropG, iFunctorG
parent
e2efc09c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
40 additions
and
38 deletions
+40
-38
program_logic/auth.v
program_logic/auth.v
+8
-9
program_logic/ghost_ownership.v
program_logic/ghost_ownership.v
+30
-27
program_logic/viewshifts.v
program_logic/viewshifts.v
+2
-2
No files found.
program_logic/auth.v
View file @
f0e60e9d
...
...
@@ -4,11 +4,10 @@ Import uPred.
Section
auth
.
Context
{
A
:
cmraT
}
`
{
Empty
A
,
!
CMRAIdentity
A
}
`
{!
∀
a
:
A
,
Timeless
a
}.
Context
{
Λ
:
language
}
{
Σ
:
gid
→
iFunctor
}
(
AuthI
:
gid
)
`
{!
InG
Λ
Σ
AuthI
(
authRA
A
)}.
(* TODO: Come up with notation for "iProp Λ (globalC Σ)". *)
Context
(
N
:
namespace
)
(
φ
:
A
→
iProp
Λ
(
globalC
Σ
)).
Context
{
Λ
:
language
}
{
Σ
:
iFunctorG
}
(
AuthI
:
gid
)
`
{!
InG
Λ
Σ
AuthI
(
authRA
A
)}.
Context
(
N
:
namespace
)
(
φ
:
A
→
iPropG
Λ
Σ
).
Implicit
Types
P
Q
R
:
iProp
Λ
(
globalC
Σ
)
.
Implicit
Types
P
Q
R
:
iProp
G
Λ
Σ
.
Implicit
Types
a
b
:
A
.
Implicit
Types
γ
:
gname
.
...
...
@@ -23,12 +22,12 @@ Section auth.
(* TODO: Need this to be proven somewhere. *)
(* FIXME ✓ binds too strong, I need parenthesis here. *)
Hypothesis
auth_valid
:
forall
a
b
,
(
✓
(
Auth
(
Excl
a
)
b
)
:
iProp
Λ
(
globalC
Σ
)
)
⊑
(
∃
b'
,
a
≡
b
⋅
b'
).
forall
a
b
,
(
✓
(
Auth
(
Excl
a
)
b
)
:
iProp
G
Λ
Σ
)
⊑
(
∃
b'
,
a
≡
b
⋅
b'
).
Definition
auth_inv
(
γ
:
gname
)
:
iProp
Λ
(
globalC
Σ
)
:
=
Definition
auth_inv
(
γ
:
gname
)
:
iProp
G
Λ
Σ
:
=
(
∃
a
,
own
AuthI
γ
(
●
a
)
★
φ
a
)%
I
.
Definition
auth_own
(
γ
:
gname
)
(
a
:
A
)
:
iProp
Λ
(
globalC
Σ
)
:
=
own
AuthI
γ
(
◯
a
).
Definition
auth_ctx
(
γ
:
gname
)
:
iProp
Λ
(
globalC
Σ
)
:
=
inv
N
(
auth_inv
γ
).
Definition
auth_own
(
γ
:
gname
)
(
a
:
A
)
:
iProp
G
Λ
Σ
:
=
own
AuthI
γ
(
◯
a
).
Definition
auth_ctx
(
γ
:
gname
)
:
iProp
G
Λ
Σ
:
=
inv
N
(
auth_inv
γ
).
Lemma
auth_alloc
a
:
✓
a
→
φ
a
⊑
pvs
N
N
(
∃
γ
,
auth_ctx
γ
∧
auth_own
γ
a
).
...
...
@@ -78,7 +77,7 @@ Section auth.
step-indices. However, since A is timeless, that should not be
a restriction. *)
Lemma
auth_fsa
{
X
:
Type
}
{
FSA
}
(
FSAs
:
FrameShiftAssertion
(
A
:
=
X
)
FSA
)
`
{!
LocalUpdate
Lv
L
}
E
P
(
Q
:
X
→
iProp
Λ
(
globalC
Σ
)
)
γ
a
:
`
{!
LocalUpdate
Lv
L
}
E
P
(
Q
:
X
→
iProp
G
Λ
Σ
)
γ
a
:
nclose
N
⊆
E
→
(
auth_ctx
γ
★
auth_own
γ
a
★
(
∀
a'
,
▷φ
(
a
⋅
a'
)
-
★
FSA
(
E
∖
nclose
N
)
(
λ
x
,
■
(
Lv
a
∧
✓
(
L
a
⋅
a'
))
★
▷φ
(
L
a
⋅
a'
)
★
(
auth_own
γ
(
L
a
)
-
★
Q
x
))))
...
...
program_logic/ghost_ownership.v
View file @
f0e60e9d
...
...
@@ -7,52 +7,55 @@ Definition gid := nat.
(** Name of one instance of a particular CMRA in the ghost state. *)
Definition
gname
:
=
positive
.
(** The global CMRA: Indexed product over a gid i to (gname --fin--> Σ i) *)
Definition
global
C
(
Σ
:
gid
→
iFunctor
)
:
iFunctor
:
=
Definition
global
F
(
Σ
:
gid
→
iFunctor
)
:
iFunctor
:
=
iprodF
(
λ
i
,
mapF
gname
(
Σ
i
)).
Class
InG
(
Λ
:
language
)
(
Σ
:
gid
→
iFunctor
)
(
i
:
gid
)
(
A
:
cmraT
)
:
=
inG
:
A
=
Σ
i
(
laterC
(
iPreProp
Λ
(
global
C
Σ
))).
inG
:
A
=
Σ
i
(
laterC
(
iPreProp
Λ
(
global
F
Σ
))).
Definition
to_global
C
{
Λ
Σ
A
}
(
i
:
gid
)
`
{!
InG
Λ
Σ
i
A
}
(
γ
:
gname
)
(
a
:
A
)
:
iGst
Λ
(
global
C
Σ
)
:
=
Definition
to_global
F
{
Λ
Σ
A
}
(
i
:
gid
)
`
{!
InG
Λ
Σ
i
A
}
(
γ
:
gname
)
(
a
:
A
)
:
iGst
Λ
(
global
F
Σ
)
:
=
iprod_singleton
i
{[
γ
↦
cmra_transport
inG
a
]}.
Definition
own
{
Λ
Σ
A
}
(
i
:
gid
)
`
{!
InG
Λ
Σ
i
A
}
(
γ
:
gname
)
(
a
:
A
)
:
iProp
Λ
(
global
C
Σ
)
:
=
ownG
(
to_global
C
i
γ
a
).
Instance
:
Params
(@
to_global
C
)
6
.
(
i
:
gid
)
`
{!
InG
Λ
Σ
i
A
}
(
γ
:
gname
)
(
a
:
A
)
:
iProp
Λ
(
global
F
Σ
)
:
=
ownG
(
to_global
F
i
γ
a
).
Instance
:
Params
(@
to_global
F
)
6
.
Instance
:
Params
(@
own
)
6
.
Typeclasses
Opaque
to_globalC
own
.
Typeclasses
Opaque
to_globalF
own
.
Notation
iPropG
Λ
Σ
:
=
(
iProp
Λ
(
globalF
Σ
)).
Notation
iFunctorG
:
=
(
gid
→
iFunctor
).
Section
global
.
Context
{
Λ
:
language
}
{
Σ
:
gid
→
iFunctor
}
(
i
:
gid
)
`
{!
InG
Λ
Σ
i
A
}.
Context
{
Λ
:
language
}
{
Σ
:
iFunctor
G
}
(
i
:
gid
)
`
{!
InG
Λ
Σ
i
A
}.
Implicit
Types
a
:
A
.
(** * Properties of to_globalC *)
Instance
to_global
C
_ne
γ
n
:
Proper
(
dist
n
==>
dist
n
)
(
to_global
C
i
γ
).
Instance
to_global
F
_ne
γ
n
:
Proper
(
dist
n
==>
dist
n
)
(
to_global
F
i
γ
).
Proof
.
by
intros
a
a'
Ha
;
apply
iprod_singleton_ne
;
rewrite
Ha
.
Qed
.
Lemma
to_global
C
_validN
n
γ
a
:
✓
{
n
}
(
to_global
C
i
γ
a
)
↔
✓
{
n
}
a
.
Lemma
to_global
F
_validN
n
γ
a
:
✓
{
n
}
(
to_global
F
i
γ
a
)
↔
✓
{
n
}
a
.
Proof
.
by
rewrite
/
to_global
C
by
rewrite
/
to_global
F
iprod_singleton_validN
map_singleton_validN
cmra_transport_validN
.
Qed
.
Lemma
to_global
C
_op
γ
a1
a2
:
to_global
C
i
γ
(
a1
⋅
a2
)
≡
to_global
C
i
γ
a1
⋅
to_global
C
i
γ
a2
.
Lemma
to_global
F
_op
γ
a1
a2
:
to_global
F
i
γ
(
a1
⋅
a2
)
≡
to_global
F
i
γ
a1
⋅
to_global
F
i
γ
a2
.
Proof
.
by
rewrite
/
to_global
C
iprod_op_singleton
map_op_singleton
cmra_transport_op
.
by
rewrite
/
to_global
F
iprod_op_singleton
map_op_singleton
cmra_transport_op
.
Qed
.
Lemma
to_global
C
_unit
γ
a
:
unit
(
to_global
C
i
γ
a
)
≡
to_global
C
i
γ
(
unit
a
).
Lemma
to_global
F
_unit
γ
a
:
unit
(
to_global
F
i
γ
a
)
≡
to_global
F
i
γ
(
unit
a
).
Proof
.
by
rewrite
/
to_global
C
by
rewrite
/
to_global
F
iprod_unit_singleton
map_unit_singleton
cmra_transport_unit
.
Qed
.
Instance
to_global
C
_timeless
γ
m
:
Timeless
m
→
Timeless
(
to_global
C
i
γ
m
).
Proof
.
rewrite
/
to_global
C
;
apply
_
.
Qed
.
Instance
to_global
F
_timeless
γ
m
:
Timeless
m
→
Timeless
(
to_global
F
i
γ
m
).
Proof
.
rewrite
/
to_global
F
;
apply
_
.
Qed
.
(** * Transport empty *)
Instance
inG_empty
`
{
Empty
A
}
:
Empty
(
Σ
i
(
laterC
(
iPreProp
Λ
(
global
C
Σ
))))
:
=
Instance
inG_empty
`
{
Empty
A
}
:
Empty
(
Σ
i
(
laterC
(
iPreProp
Λ
(
global
F
Σ
))))
:
=
cmra_transport
inG
∅
.
Instance
inG_empty_spec
`
{
Empty
A
}
:
CMRAIdentity
A
→
CMRAIdentity
(
Σ
i
(
laterC
(
iPreProp
Λ
(
global
C
Σ
)))).
CMRAIdentity
A
→
CMRAIdentity
(
Σ
i
(
laterC
(
iPreProp
Λ
(
global
F
Σ
)))).
Proof
.
split
.
*
apply
cmra_transport_valid
,
cmra_empty_valid
.
...
...
@@ -66,12 +69,12 @@ Proof. by intros m m' Hm; rewrite /own Hm. Qed.
Global
Instance
own_proper
γ
:
Proper
((
≡
)
==>
(
≡
))
(
own
i
γ
)
:
=
ne_proper
_
.
Lemma
own_op
γ
a1
a2
:
own
i
γ
(
a1
⋅
a2
)
≡
(
own
i
γ
a1
★
own
i
γ
a2
)%
I
.
Proof
.
by
rewrite
/
own
-
ownG_op
to_global
C
_op
.
Qed
.
Proof
.
by
rewrite
/
own
-
ownG_op
to_global
F
_op
.
Qed
.
Lemma
always_own_unit
γ
a
:
(
□
own
i
γ
(
unit
a
))%
I
≡
own
i
γ
(
unit
a
).
Proof
.
by
rewrite
/
own
-
to_global
C
_unit
always_ownG_unit
.
Qed
.
Proof
.
by
rewrite
/
own
-
to_global
F
_unit
always_ownG_unit
.
Qed
.
Lemma
own_valid
γ
a
:
own
i
γ
a
⊑
✓
a
.
Proof
.
rewrite
/
own
ownG_valid
;
apply
valid_mono
=>
?
;
apply
to_global
C
_validN
.
rewrite
/
own
ownG_valid
;
apply
valid_mono
=>
?
;
apply
to_global
F
_validN
.
Qed
.
Lemma
own_valid_r
γ
a
:
own
i
γ
a
⊑
(
own
i
γ
a
★
✓
a
).
Proof
.
apply
(
uPred
.
always_entails_r'
_
_
),
own_valid
.
Qed
.
...
...
@@ -83,7 +86,7 @@ Proof. unfold own; apply _. Qed.
Lemma
own_alloc
a
E
:
✓
a
→
True
⊑
pvs
E
E
(
∃
γ
,
own
i
γ
a
).
Proof
.
intros
Ha
.
rewrite
-(
pvs_mono
_
_
(
∃
m
,
■
(
∃
γ
,
m
=
to_global
C
i
γ
a
)
∧
ownG
m
)%
I
).
rewrite
-(
pvs_mono
_
_
(
∃
m
,
■
(
∃
γ
,
m
=
to_global
F
i
γ
a
)
∧
ownG
m
)%
I
).
*
eapply
pvs_ownG_updateP_empty
,
(
iprod_singleton_updateP_empty
i
)
;
first
(
eapply
map_updateP_alloc'
,
cmra_transport_valid
,
Ha
)
;
naive_solver
.
*
apply
exist_elim
=>
m
;
apply
const_elim_l
=>-[
γ
->].
...
...
@@ -94,7 +97,7 @@ Lemma own_updateP γ a P E :
a
~~>
:
P
→
own
i
γ
a
⊑
pvs
E
E
(
∃
a'
,
■
P
a'
∧
own
i
γ
a'
).
Proof
.
intros
Ha
.
rewrite
-(
pvs_mono
_
_
(
∃
m
,
■
(
∃
a'
,
m
=
to_global
C
i
γ
a'
∧
P
a'
)
∧
ownG
m
)%
I
).
rewrite
-(
pvs_mono
_
_
(
∃
m
,
■
(
∃
a'
,
m
=
to_global
F
i
γ
a'
∧
P
a'
)
∧
ownG
m
)%
I
).
*
eapply
pvs_ownG_updateP
,
iprod_singleton_updateP
;
first
by
(
eapply
map_singleton_updateP'
,
cmra_transport_updateP'
,
Ha
).
naive_solver
.
...
...
@@ -106,7 +109,7 @@ Lemma own_updateP_empty `{Empty A, !CMRAIdentity A} γ a P E :
∅
~~>
:
P
→
True
⊑
pvs
E
E
(
∃
a
,
■
P
a
∧
own
i
γ
a
).
Proof
.
intros
Hemp
.
rewrite
-(
pvs_mono
_
_
(
∃
m
,
■
(
∃
a'
,
m
=
to_global
C
i
γ
a'
∧
P
a'
)
∧
ownG
m
)%
I
).
rewrite
-(
pvs_mono
_
_
(
∃
m
,
■
(
∃
a'
,
m
=
to_global
F
i
γ
a'
∧
P
a'
)
∧
ownG
m
)%
I
).
*
eapply
pvs_ownG_updateP_empty
,
iprod_singleton_updateP_empty
;
first
eapply
map_singleton_updateP_empty'
,
cmra_transport_updateP'
,
Hemp
.
naive_solver
.
...
...
program_logic/viewshifts.v
View file @
f0e60e9d
...
...
@@ -105,9 +105,9 @@ Proof. by intros; apply vs_alt, inv_alloc. Qed.
End
vs
.
Section
vs_ghost
.
Context
{
Λ
:
language
}
{
Σ
:
gid
→
iFunctor
}
(
i
:
gid
)
`
{!
InG
Λ
Σ
i
A
}.
Context
{
Λ
:
language
}
{
Σ
:
iFunctor
G
}
(
i
:
gid
)
`
{!
InG
Λ
Σ
i
A
}.
Implicit
Types
a
:
A
.
Implicit
Types
P
Q
R
:
iProp
Λ
(
globalC
Σ
)
.
Implicit
Types
P
Q
R
:
iProp
G
Λ
Σ
.
Lemma
vs_own_updateP
E
γ
a
φ
:
a
~~>
:
φ
→
own
i
γ
a
={
E
}=>
∃
a'
,
■
φ
a'
∧
own
i
γ
a'
.
...
...
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