Skip to content
GitLab
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
80bc8f1f
Commit
80bc8f1f
authored
Sep 20, 2016
by
Robbert Krebbers
Browse files
Validity and update lemmas for owning multiple ghosts.
parent
186da990
Changes
6
Hide whitespace changes
Inline
Side-by-side
heap_lang/lib/spin_lock.v
View file @
80bc8f1f
...
...
@@ -32,7 +32,7 @@ Section proof.
Definition
locked
(
γ
:
gname
)
:
iProp
Σ
:
=
own
γ
(
Excl
()).
Lemma
locked_exclusive
(
γ
:
gname
)
:
locked
γ
★
locked
γ
⊢
False
.
Proof
.
rewrite
/
locked
-
own_op
own_valid
.
by
iIntros
(?).
Qed
.
Proof
.
rewrite
/
locked
own_valid
_2
.
by
iIntros
(?).
Qed
.
Global
Instance
lock_inv_ne
n
γ
l
:
Proper
(
dist
n
==>
dist
n
)
(
lock_inv
γ
l
).
Proof
.
solve_proper
.
Qed
.
...
...
program_logic/boxes.v
View file @
80bc8f1f
...
...
@@ -57,7 +57,7 @@ Proof. apply _. Qed.
Lemma
box_own_auth_agree
γ
b1
b2
:
box_own_auth
γ
(
●
Excl'
b1
)
★
box_own_auth
γ
(
◯
Excl'
b2
)
⊢
b1
=
b2
.
Proof
.
rewrite
/
box_own_prop
-
own_op
own_valid
prod_validI
/=
and_elim_l
.
rewrite
/
box_own_prop
own_valid
_2
prod_validI
/=
and_elim_l
.
by
iDestruct
1
as
%
[[[]
[=]%
leibniz_equiv
]
?]%
auth_valid_discrete
.
Qed
.
...
...
@@ -74,7 +74,7 @@ Qed.
Lemma
box_own_agree
γ
Q1
Q2
:
(
box_own_prop
γ
Q1
★
box_own_prop
γ
Q2
)
⊢
▷
(
Q1
≡
Q2
).
Proof
.
rewrite
/
box_own_prop
-
own_op
own_valid
prod_validI
/=
and_elim_r
.
rewrite
/
box_own_prop
own_valid
_2
prod_validI
/=
and_elim_r
.
rewrite
option_validI
/=
agree_validI
agree_equivI
later_equivI
/=.
iIntros
"#HQ !>"
.
rewrite
-{
2
}(
iProp_fold_unfold
Q1
).
iRewrite
"HQ"
.
by
rewrite
iProp_fold_unfold
.
...
...
program_logic/cancelable_invariants.v
View file @
80bc8f1f
...
...
@@ -39,7 +39,7 @@ Section proofs.
Proof
.
by
rewrite
cinv_own_op
Qp_div_2
.
Qed
.
Lemma
cinv_own_valid
γ
q1
q2
:
cinv_own
γ
q1
★
cinv_own
γ
q2
⊢
✓
(
q1
+
q2
)%
Qp
.
Proof
.
rewrite
/
cinv_own
-
own_op
own_valid
.
by
iIntros
"% !%"
.
Qed
.
Proof
.
rewrite
/
cinv_own
own_valid
_2
.
by
iIntros
"% !%"
.
Qed
.
Lemma
cinv_own_1_l
γ
q
:
cinv_own
γ
1
★
cinv_own
γ
q
⊢
False
.
Proof
.
rewrite
cinv_own_valid
.
by
iIntros
(?%(
exclusive_l
1
%
Qp
)).
Qed
.
...
...
program_logic/ghost_ownership.v
View file @
80bc8f1f
...
...
@@ -52,6 +52,7 @@ Lemma own_op γ a1 a2 : own γ (a1 ⋅ a2) ⊣⊢ own γ a1 ★ own γ a2.
Proof
.
by
rewrite
!
own_eq
/
own_def
-
ownM_op
iRes_singleton_op
.
Qed
.
Global
Instance
own_mono
γ
:
Proper
(
flip
(
≼
)
==>
(
⊢
))
(@
own
Σ
A
_
γ
).
Proof
.
move
=>
a
b
[
c
->].
rewrite
own_op
.
eauto
with
I
.
Qed
.
Lemma
own_valid
γ
a
:
own
γ
a
⊢
✓
a
.
Proof
.
rewrite
!
own_eq
/
own_def
ownM_valid
/
iRes_singleton
.
...
...
@@ -60,10 +61,16 @@ Proof.
(* implicit arguments differ a bit *)
by
trans
(
✓
cmra_transport
inG_prf
a
:
iProp
Σ
)%
I
;
last
destruct
inG_prf
.
Qed
.
Lemma
own_valid_2
γ
a1
a2
:
own
γ
a1
★
own
γ
a2
⊢
✓
(
a1
⋅
a2
).
Proof
.
by
rewrite
-
own_op
own_valid
.
Qed
.
Lemma
own_valid_3
γ
a1
a2
a3
:
own
γ
a1
★
own
γ
a2
★
own
γ
a3
⊢
✓
(
a1
⋅
a2
⋅
a3
).
Proof
.
by
rewrite
-!
own_op
assoc
own_valid
.
Qed
.
Lemma
own_valid_r
γ
a
:
own
γ
a
⊢
own
γ
a
★
✓
a
.
Proof
.
apply
:
uPred
.
always_entails_r
.
apply
own_valid
.
Qed
.
Lemma
own_valid_l
γ
a
:
own
γ
a
⊢
✓
a
★
own
γ
a
.
Proof
.
by
rewrite
comm
-
own_valid_r
.
Qed
.
Global
Instance
own_timeless
γ
a
:
Timeless
a
→
TimelessP
(
own
γ
a
).
Proof
.
rewrite
!
own_eq
/
own_def
;
apply
_
.
Qed
.
Global
Instance
own_core_persistent
γ
a
:
Persistent
a
→
PersistentP
(
own
γ
a
).
...
...
@@ -107,13 +114,23 @@ Proof.
intros
;
rewrite
(
own_updateP
(
a'
=))
;
last
by
apply
cmra_update_updateP
.
by
apply
rvs_mono
,
exist_elim
=>
a''
;
apply
pure_elim_l
=>
->.
Qed
.
Lemma
own_update_2
γ
a1
a2
a'
:
a1
⋅
a2
~~>
a'
→
own
γ
a1
★
own
γ
a2
=
r
=>
own
γ
a'
.
Proof
.
intros
.
rewrite
-
own_op
.
by
apply
own_update
.
Qed
.
Lemma
own_update_3
γ
a1
a2
a3
a'
:
a1
⋅
a2
⋅
a3
~~>
a'
→
own
γ
a1
★
own
γ
a2
★
own
γ
a3
=
r
=>
own
γ
a'
.
Proof
.
intros
.
rewrite
-!
own_op
assoc
.
by
apply
own_update
.
Qed
.
End
global
.
Arguments
own_valid
{
_
_
}
[
_
]
_
_
.
Arguments
own_valid_2
{
_
_
}
[
_
]
_
_
_
.
Arguments
own_valid_3
{
_
_
}
[
_
]
_
_
_
_
.
Arguments
own_valid_l
{
_
_
}
[
_
]
_
_
.
Arguments
own_valid_r
{
_
_
}
[
_
]
_
_
.
Arguments
own_updateP
{
_
_
}
[
_
]
_
_
_
_
.
Arguments
own_update
{
_
_
}
[
_
]
_
_
_
_
.
Arguments
own_update_2
{
_
_
}
[
_
]
_
_
_
_
_
.
Arguments
own_update_3
{
_
_
}
[
_
]
_
_
_
_
_
_
.
Lemma
own_empty
`
{
inG
Σ
(
A
:
ucmraT
)}
γ
:
True
=
r
=>
own
γ
∅
.
Proof
.
...
...
program_logic/ownership.v
View file @
80bc8f1f
...
...
@@ -56,13 +56,13 @@ Qed.
(* Physical state *)
Lemma
ownP_twice
σ
1
σ
2
:
ownP
σ
1
★
ownP
σ
2
⊢
False
.
Proof
.
rewrite
/
ownP
-
own_op
own_valid
.
by
iIntros
(?).
Qed
.
Proof
.
rewrite
/
ownP
own_valid
_2
.
by
iIntros
(?).
Qed
.
Global
Instance
ownP_timeless
σ
:
TimelessP
(@
ownP
Λ
Σ
_
σ
).
Proof
.
rewrite
/
ownP
;
apply
_
.
Qed
.
Lemma
ownP_agree
σ
1
σ
2
:
ownP_auth
σ
1
★
ownP
σ
2
⊢
σ
1
=
σ
2
.
Proof
.
rewrite
/
ownP
/
ownP_auth
-
own_op
own_valid
-
auth_both_op
.
rewrite
/
ownP
/
ownP_auth
own_valid
_2
-
auth_both_op
.
by
iIntros
([[[]
[=]%
leibniz_equiv
]
_
]%
auth_valid_discrete
).
Qed
.
Lemma
ownP_update
σ
1
σ
2
:
ownP_auth
σ
1
★
ownP
σ
1
=
r
=>
ownP_auth
σ
2
★
ownP
σ
2
.
...
...
@@ -85,7 +85,7 @@ Proof. by rewrite (own_empty (A:=coPset_disjUR) enabled_name). Qed.
Lemma
ownE_op
E1
E2
:
E1
⊥
E2
→
ownE
(
E1
∪
E2
)
⊣
⊢
ownE
E1
★
ownE
E2
.
Proof
.
intros
.
by
rewrite
/
ownE
-
own_op
coPset_disj_union
.
Qed
.
Lemma
ownE_disjoint
E1
E2
:
ownE
E1
★
ownE
E2
⊢
E1
⊥
E2
.
Proof
.
rewrite
/
ownE
-
own_op
own_valid
.
by
iIntros
(?%
coPset_disj_valid_op
).
Qed
.
Proof
.
rewrite
/
ownE
own_valid
_2
.
by
iIntros
(?%
coPset_disj_valid_op
).
Qed
.
Lemma
ownE_op'
E1
E2
:
E1
⊥
E2
∧
ownE
(
E1
∪
E2
)
⊣
⊢
ownE
E1
★
ownE
E2
.
Proof
.
iSplit
;
[
iIntros
"[% ?]"
;
by
iApply
ownE_op
|].
...
...
@@ -100,7 +100,7 @@ Proof. by rewrite (own_empty (A:=gset_disjUR _) disabled_name). Qed.
Lemma
ownD_op
E1
E2
:
E1
⊥
E2
→
ownD
(
E1
∪
E2
)
⊣
⊢
ownD
E1
★
ownD
E2
.
Proof
.
intros
.
by
rewrite
/
ownD
-
own_op
gset_disj_union
.
Qed
.
Lemma
ownD_disjoint
E1
E2
:
ownD
E1
★
ownD
E2
⊢
E1
⊥
E2
.
Proof
.
rewrite
/
ownD
-
own_op
own_valid
.
by
iIntros
(?%
gset_disj_valid_op
).
Qed
.
Proof
.
rewrite
/
ownD
own_valid
_2
.
by
iIntros
(?%
gset_disj_valid_op
).
Qed
.
Lemma
ownD_op'
E1
E2
:
E1
⊥
E2
∧
ownD
(
E1
∪
E2
)
⊣
⊢
ownD
E1
★
ownD
E2
.
Proof
.
iSplit
;
[
iIntros
"[% ?]"
;
by
iApply
ownD_op
|].
...
...
@@ -115,7 +115,7 @@ Lemma invariant_lookup `{irisG Λ Σ} (I : gmap positive (iProp Σ)) i P :
own
invariant_name
(
◯
{[
i
:
=
invariant_unfold
P
]})
⊢
∃
Q
,
I
!!
i
=
Some
Q
★
▷
(
Q
≡
P
).
Proof
.
rewrite
-
own_op
own_valid
auth_validI
/=.
iIntros
"[#HI #HvI]"
.
rewrite
own_valid
_2
auth_validI
/=.
iIntros
"[#HI #HvI]"
.
iDestruct
"HI"
as
(
I'
)
"HI"
.
rewrite
gmap_equivI
gmap_validI
.
iSpecialize
(
"HI"
$!
i
).
iSpecialize
(
"HvI"
$!
i
).
rewrite
left_id_L
lookup_fmap
lookup_op
lookup_singleton
uPred
.
option_equivI
.
...
...
program_logic/saved_prop.v
View file @
80bc8f1f
...
...
@@ -35,7 +35,7 @@ Section saved_prop.
Lemma
saved_prop_agree
γ
x
y
:
saved_prop_own
γ
x
★
saved_prop_own
γ
y
⊢
▷
(
x
≡
y
).
Proof
.
rewrite
-
own_op
own_valid
agree_validI
agree_equivI
later_equivI
.
rewrite
own_valid
_2
agree_validI
agree_equivI
later_equivI
.
set
(
G1
:
=
cFunctor_map
F
(
iProp_fold
,
iProp_unfold
)).
set
(
G2
:
=
cFunctor_map
F
(@
iProp_unfold
Σ
,
@
iProp_fold
Σ
)).
assert
(
∀
z
,
G2
(
G1
z
)
≡
z
)
as
help
.
...
...
Write
Preview
Supports
Markdown
0%
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!
Cancel
Please
register
or
sign in
to comment