Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Pierre-Marie Pédrot
Iris
Commits
c385725f
Commit
c385725f
authored
Mar 15, 2016
by
Ralf Jung
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of gitlab.mpi-sws.org:FP/iris-coq
parents
d0e62387
b5c5ff91
Changes
24
Hide whitespace changes
Inline
Side-by-side
Showing
24 changed files
with
114 additions
and
109 deletions
+114
-109
_CoqProject
_CoqProject
+1
-1
algebra/agree.v
algebra/agree.v
+3
-0
algebra/cmra.v
algebra/cmra.v
+16
-2
algebra/dec_agree.v
algebra/dec_agree.v
+1
-1
algebra/fin_maps.v
algebra/fin_maps.v
+6
-0
algebra/iprod.v
algebra/iprod.v
+7
-3
algebra/one_shot.v
algebra/one_shot.v
+7
-9
algebra/option.v
algebra/option.v
+6
-0
algebra/upred.v
algebra/upred.v
+33
-33
algebra/upred_big_op.v
algebra/upred_big_op.v
+5
-5
barrier/proof.v
barrier/proof.v
+1
-1
examples/one_shot.v
examples/one_shot.v
+1
-3
heap_lang/heap.v
heap_lang/heap.v
+1
-1
program_logic/auth.v
program_logic/auth.v
+1
-1
program_logic/ghost_ownership.v
program_logic/ghost_ownership.v
+3
-7
program_logic/global_functor.v
program_logic/global_functor.v
+4
-6
program_logic/invariants.v
program_logic/invariants.v
+1
-2
program_logic/ownership.v
program_logic/ownership.v
+5
-21
program_logic/pviewshifts.v
program_logic/pviewshifts.v
+2
-2
program_logic/resources.v
program_logic/resources.v
+2
-0
program_logic/saved_one_shot.v
program_logic/saved_one_shot.v
+3
-5
program_logic/saved_prop.v
program_logic/saved_prop.v
+2
-3
program_logic/sts.v
program_logic/sts.v
+1
-1
program_logic/weakestpre.v
program_logic/weakestpre.v
+2
-2
No files found.
_CoqProject
View file @
c385725f
...
...
@@ -89,10 +89,10 @@ heap_lang/par.v
heap_lang/tests.v
heap_lang/substitution.v
heap_lang/assert.v
heap_lang/one_shot.v
barrier/barrier.v
barrier/specification.v
barrier/protocol.v
barrier/proof.v
barrier/client.v
examples/joining_existentials.v
examples/one_shot.v
algebra/agree.v
View file @
c385725f
...
...
@@ -118,6 +118,9 @@ Proof.
Qed
.
Canonical
Structure
agreeR
:
cmraT
:
=
CMRAT
agree_cofe_mixin
agree_cmra_mixin
.
Global
Instance
agree_persistent
(
x
:
agree
A
)
:
Persistent
x
.
Proof
.
done
.
Qed
.
Program
Definition
to_agree
(
x
:
A
)
:
agree
A
:
=
{|
agree_car
n
:
=
x
;
agree_is_valid
n
:
=
True
|}.
Solve
Obligations
with
done
.
...
...
algebra/cmra.v
View file @
c385725f
...
...
@@ -120,6 +120,10 @@ Class CMRAUnit (A : cmraT) `{Empty A} := {
}.
Instance
cmra_unit_inhabited
`
{
CMRAUnit
A
}
:
Inhabited
A
:
=
populate
∅
.
(** * Persistent elements *)
Class
Persistent
{
A
:
cmraT
}
(
x
:
A
)
:
=
persistent
:
core
x
≡
x
.
Arguments
persistent
{
_
}
_
{
_
}.
(** * Discrete CMRAs *)
Class
CMRADiscrete
(
A
:
cmraT
)
:
=
{
cmra_discrete
:
>
Discrete
A
;
...
...
@@ -229,6 +233,8 @@ Lemma cmra_core_validN n x : ✓{n} x → ✓{n} core x.
Proof
.
rewrite
-{
1
}(
cmra_core_l
x
)
;
apply
cmra_validN_op_l
.
Qed
.
Lemma
cmra_core_valid
x
:
✓
x
→
✓
core
x
.
Proof
.
rewrite
-{
1
}(
cmra_core_l
x
)
;
apply
cmra_valid_op_l
.
Qed
.
Global
Instance
cmra_core_persistent
x
:
Persistent
(
core
x
).
Proof
.
apply
cmra_core_idemp
.
Qed
.
(** ** Order *)
Lemma
cmra_included_includedN
n
x
y
:
x
≼
y
→
x
≼
{
n
}
y
.
...
...
@@ -336,8 +342,8 @@ Section unit.
Proof
.
by
exists
x
;
rewrite
left_id
.
Qed
.
Global
Instance
cmra_unit_right_id
:
RightId
(
≡
)
∅
(
⋅
).
Proof
.
by
intros
x
;
rewrite
(
comm
op
)
left_id
.
Qed
.
Lemma
cmra_core_unit
:
core
∅
≡
∅
.
Proof
.
by
rewrite
-{
2
}(
cmra_core_l
∅
)
right_id
.
Qed
.
Global
Instance
cmra_unit_persistent
:
Persistent
∅
.
Proof
.
by
rewrite
/
Persistent
-{
2
}(
cmra_core_l
∅
)
right_id
.
Qed
.
End
unit
.
(** ** Local updates *)
...
...
@@ -454,6 +460,8 @@ Section cmra_transport.
Proof
.
by
destruct
H
.
Qed
.
Global
Instance
cmra_transport_timeless
x
:
Timeless
x
→
Timeless
(
T
x
).
Proof
.
by
destruct
H
.
Qed
.
Global
Instance
cmra_transport_persistent
x
:
Persistent
x
→
Persistent
(
T
x
).
Proof
.
by
destruct
H
.
Qed
.
Lemma
cmra_transport_updateP
(
P
:
A
→
Prop
)
(
Q
:
B
→
Prop
)
x
:
x
~~>
:
P
→
(
∀
y
,
P
y
→
Q
(
T
y
))
→
T
x
~~>
:
Q
.
Proof
.
destruct
H
;
eauto
using
cmra_updateP_weaken
.
Qed
.
...
...
@@ -509,6 +517,8 @@ Section unit.
Global
Instance
unit_cmra_unit
:
CMRAUnit
unitR
.
Global
Instance
unit_cmra_discrete
:
CMRADiscrete
unitR
.
Proof
.
by
apply
discrete_cmra_discrete
.
Qed
.
Global
Instance
unit_persistent
(
x
:
())
:
Persistent
x
.
Proof
.
done
.
Qed
.
End
unit
.
(** ** Product *)
...
...
@@ -564,6 +574,10 @@ Section prod.
CMRADiscrete
A
→
CMRADiscrete
B
→
CMRADiscrete
prodR
.
Proof
.
split
.
apply
_
.
by
intros
?
[]
;
split
;
apply
cmra_discrete_valid
.
Qed
.
Global
Instance
pair_persistent
x
y
:
Persistent
x
→
Persistent
y
→
Persistent
(
x
,
y
).
Proof
.
by
split
.
Qed
.
Lemma
prod_update
x
y
:
x
.
1
~~>
y
.
1
→
x
.
2
~~>
y
.
2
→
x
~~>
y
.
Proof
.
intros
??
n
z
[??]
;
split
;
simpl
in
*
;
auto
.
Qed
.
Lemma
prod_updateP
P1
P2
(
Q
:
A
*
B
→
Prop
)
x
:
...
...
algebra/dec_agree.v
View file @
c385725f
...
...
@@ -45,7 +45,7 @@ Qed.
Canonical
Structure
dec_agreeR
:
cmraT
:
=
discreteR
dec_agree_ra
.
(* Some properties of this CMRA *)
Lemma
dec_agree_
core_id
(
x
:
dec_agree
A
)
:
core
x
=
x
.
Global
Instance
dec_agree_
persistent
(
x
:
dec_agree
R
)
:
Persistent
x
.
Proof
.
done
.
Qed
.
Lemma
dec_agree_ne
a
b
:
a
≠
b
→
DecAgree
a
⋅
DecAgree
b
=
DecAgreeBot
.
...
...
algebra/fin_maps.v
View file @
c385725f
...
...
@@ -215,6 +215,12 @@ Lemma map_op_singleton (i : K) (x y : A) :
{[
i
:
=
x
]}
⋅
{[
i
:
=
y
]}
=
({[
i
:
=
x
⋅
y
]}
:
gmap
K
A
).
Proof
.
by
apply
(
merge_singleton
_
_
_
x
y
).
Qed
.
Global
Instance
map_persistent
m
:
(
∀
x
:
A
,
Persistent
x
)
→
Persistent
m
.
Proof
.
intros
?
i
.
by
rewrite
lookup_core
persistent
.
Qed
.
Global
Instance
map_singleton_persistent
i
(
x
:
A
)
:
Persistent
x
→
Persistent
{[
i
:
=
x
]}.
Proof
.
intros
.
by
rewrite
/
Persistent
map_core_singleton
persistent
.
Qed
.
Lemma
singleton_includedN
n
m
i
x
:
{[
i
:
=
x
]}
≼
{
n
}
m
↔
∃
y
,
m
!!
i
≡
{
n
}
≡
Some
y
∧
x
≼
{
n
}
y
.
Proof
.
...
...
algebra/iprod.v
View file @
c385725f
...
...
@@ -208,11 +208,15 @@ Section iprod_cmra.
Lemma
iprod_core_singleton
x
(
y
:
B
x
)
:
core
(
iprod_singleton
x
y
)
≡
iprod_singleton
x
(
core
y
).
Proof
.
by
move
=>
x'
;
destruct
(
decide
(
x
=
x'
))
as
[->|]
;
rewrite
iprod_lookup_core
?iprod_lookup_singleton
?iprod_lookup_singleton_ne
//
cmra_core_unit
.
move
=>
x'
;
destruct
(
decide
(
x
=
x'
))
as
[->|]
;
by
rewrite
iprod_lookup_core
?iprod_lookup_singleton
?iprod_lookup_singleton_ne
//
(
persistent
∅
)
.
Qed
.
Global
Instance
iprod_singleton_persistent
x
(
y
:
B
x
)
:
Persistent
y
→
Persistent
(
iprod_singleton
x
y
).
Proof
.
intros
.
rewrite
/
Persistent
iprod_core_singleton
.
by
f_equiv
.
Qed
.
Lemma
iprod_op_singleton
(
x
:
A
)
(
y1
y2
:
B
x
)
:
iprod_singleton
x
y1
⋅
iprod_singleton
x
y2
≡
iprod_singleton
x
(
y1
⋅
y2
).
Proof
.
...
...
algebra/one_shot.v
View file @
c385725f
...
...
@@ -210,16 +210,15 @@ Proof.
intros
[|
a
|
|]
;
simpl
;
auto
using
cmra_discrete_valid
.
Qed
.
Global
Instance
Shot_persistent
a
:
Persistent
a
→
Persistent
(
Shot
a
).
Proof
.
by
constructor
.
Qed
.
Lemma
one_shot_validN_inv_l
n
y
:
✓
{
n
}
(
OneShotPending
⋅
y
)
→
y
=
∅
.
Proof
.
destruct
y
as
[|
b
|
|]
;
[
done
|
|
done
|
done
].
destruct
1
.
Qed
.
Proof
.
by
destruct
y
;
inversion_clear
1
.
Qed
.
Lemma
one_shot_valid_inv_l
y
:
✓
(
OneShotPending
⋅
y
)
→
y
=
∅
.
Proof
.
intros
.
by
apply
one_shot_validN_inv_l
with
0
,
cmra_valid_validN
.
Qed
.
Lemma
one_shot_bot_largest
y
:
y
≼
OneShotBot
.
Proof
.
destruct
y
;
exists
OneShotBot
;
constructor
.
Qed
.
Proof
.
destruct
y
;
exists
OneShotBot
;
constructor
.
Qed
.
(** Internalized properties *)
Lemma
one_shot_equivI
{
M
}
(
x
y
:
one_shot
A
)
:
...
...
@@ -259,9 +258,8 @@ Proof.
-
destruct
(
Hx
n
b
)
as
(
c
&?&?)
;
try
done
.
exists
(
Shot
c
).
auto
.
-
destruct
(
Hx
n
(
core
a
))
as
(
c
&?&?)
;
try
done
.
{
rewrite
cmra_core_r
.
done
.
}
exists
(
Shot
c
).
split
;
first
by
auto
.
simpl
.
by
eapply
cmra_validN_op_l
.
{
by
rewrite
cmra_core_r
.
}
exists
(
Shot
c
).
split
;
simpl
;
eauto
using
cmra_validN_op_l
.
Qed
.
Lemma
one_shot_updateP'
(
P
:
A
→
Prop
)
a
:
a
~~>
:
P
→
Shot
a
~~>
:
λ
m'
,
∃
b
,
m'
=
Shot
b
∧
P
b
.
...
...
algebra/option.v
View file @
c385725f
...
...
@@ -130,6 +130,12 @@ Proof. by destruct mx, my; inversion_clear 1. Qed.
Lemma
option_op_positive_dist_r
n
mx
my
:
mx
⋅
my
≡
{
n
}
≡
None
→
my
≡
{
n
}
≡
None
.
Proof
.
by
destruct
mx
,
my
;
inversion_clear
1
.
Qed
.
Global
Instance
Some_persistent
(
x
:
A
)
:
Persistent
x
→
Persistent
(
Some
x
).
Proof
.
by
constructor
.
Qed
.
Global
Instance
option_persistent
(
mx
:
option
A
)
:
(
∀
x
:
A
,
Persistent
x
)
→
Persistent
mx
.
Proof
.
intros
.
destruct
mx
.
apply
_
.
apply
cmra_unit_persistent
.
Qed
.
(** Internalized properties *)
Lemma
option_equivI
{
M
}
(
x
y
:
option
A
)
:
(
x
≡
y
)
⊣
⊢
(
match
x
,
y
with
...
...
algebra/upred.v
View file @
c385725f
...
...
@@ -304,8 +304,8 @@ Infix "↔" := uPred_iff : uPred_scope.
Class
TimelessP
{
M
}
(
P
:
uPred
M
)
:
=
timelessP
:
▷
P
⊢
(
P
∨
▷
False
).
Arguments
timelessP
{
_
}
_
{
_
}.
Class
Persistent
{
M
}
(
P
:
uPred
M
)
:
=
persistent
:
P
⊢
□
P
.
Arguments
persistent
{
_
}
_
{
_
}.
Class
Persistent
P
{
M
}
(
P
:
uPred
M
)
:
=
persistent
P
:
P
⊢
□
P
.
Arguments
persistent
P
{
_
}
_
{
_
}.
Module
uPred
.
Definition
unseal
:
=
...
...
@@ -1002,8 +1002,8 @@ Proof.
rewrite
-(
cmra_core_idemp
a
)
Hx
.
apply
cmra_core_preservingN
,
cmra_includedN_l
.
Qed
.
Lemma
always_ownM
(
a
:
M
)
:
core
a
≡
a
→
(
□
uPred_ownM
a
)
⊣
⊢
uPred_ownM
a
.
Proof
.
by
intros
<-
;
rewrite
always_ownM_core
.
Qed
.
Lemma
always_ownM
(
a
:
M
)
:
Persistent
a
→
(
□
uPred_ownM
a
)
⊣
⊢
uPred_ownM
a
.
Proof
.
intros
.
by
rewrite
-(
persistent
a
)
always_ownM_core
.
Qed
.
Lemma
ownM_something
:
True
⊢
∃
a
,
uPred_ownM
a
.
Proof
.
unseal
;
split
=>
n
x
??.
by
exists
x
;
simpl
.
Qed
.
Lemma
ownM_empty
`
{
Empty
M
,
!
CMRAUnit
M
}
:
True
⊢
uPred_ownM
∅
.
...
...
@@ -1120,53 +1120,53 @@ Proof.
Qed
.
(* Always stable *)
Global
Instance
const_persistent
φ
:
Persistent
(
■
φ
:
uPred
M
)%
I
.
Proof
.
by
rewrite
/
Persistent
always_const
.
Qed
.
Global
Instance
always_persistent
P
:
Persistent
(
□
P
).
Global
Instance
const_persistent
φ
:
Persistent
P
(
■
φ
:
uPred
M
)%
I
.
Proof
.
by
rewrite
/
Persistent
P
always_const
.
Qed
.
Global
Instance
always_persistent
P
:
Persistent
P
(
□
P
).
Proof
.
by
intros
;
apply
always_intro'
.
Qed
.
Global
Instance
and_persistent
P
Q
:
Persistent
P
→
Persistent
Q
→
Persistent
(
P
∧
Q
).
Proof
.
by
intros
;
rewrite
/
Persistent
always_and
;
apply
and_mono
.
Qed
.
Persistent
P
P
→
Persistent
P
Q
→
Persistent
P
(
P
∧
Q
).
Proof
.
by
intros
;
rewrite
/
Persistent
P
always_and
;
apply
and_mono
.
Qed
.
Global
Instance
or_persistent
P
Q
:
Persistent
P
→
Persistent
Q
→
Persistent
(
P
∨
Q
).
Proof
.
by
intros
;
rewrite
/
Persistent
always_or
;
apply
or_mono
.
Qed
.
Persistent
P
P
→
Persistent
P
Q
→
Persistent
P
(
P
∨
Q
).
Proof
.
by
intros
;
rewrite
/
Persistent
P
always_or
;
apply
or_mono
.
Qed
.
Global
Instance
sep_persistent
P
Q
:
Persistent
P
→
Persistent
Q
→
Persistent
(
P
★
Q
).
Proof
.
by
intros
;
rewrite
/
Persistent
always_sep
;
apply
sep_mono
.
Qed
.
Persistent
P
P
→
Persistent
P
Q
→
Persistent
P
(
P
★
Q
).
Proof
.
by
intros
;
rewrite
/
Persistent
P
always_sep
;
apply
sep_mono
.
Qed
.
Global
Instance
forall_persistent
{
A
}
(
Ψ
:
A
→
uPred
M
)
:
(
∀
x
,
Persistent
(
Ψ
x
))
→
Persistent
(
∀
x
,
Ψ
x
).
Proof
.
by
intros
;
rewrite
/
Persistent
always_forall
;
apply
forall_mono
.
Qed
.
(
∀
x
,
Persistent
P
(
Ψ
x
))
→
Persistent
P
(
∀
x
,
Ψ
x
).
Proof
.
by
intros
;
rewrite
/
Persistent
P
always_forall
;
apply
forall_mono
.
Qed
.
Global
Instance
exist_persistent
{
A
}
(
Ψ
:
A
→
uPred
M
)
:
(
∀
x
,
Persistent
(
Ψ
x
))
→
Persistent
(
∃
x
,
Ψ
x
).
Proof
.
by
intros
;
rewrite
/
Persistent
always_exist
;
apply
exist_mono
.
Qed
.
(
∀
x
,
Persistent
P
(
Ψ
x
))
→
Persistent
P
(
∃
x
,
Ψ
x
).
Proof
.
by
intros
;
rewrite
/
Persistent
P
always_exist
;
apply
exist_mono
.
Qed
.
Global
Instance
eq_persistent
{
A
:
cofeT
}
(
a
b
:
A
)
:
Persistent
(
a
≡
b
:
uPred
M
)%
I
.
Proof
.
by
intros
;
rewrite
/
Persistent
always_eq
.
Qed
.
Persistent
P
(
a
≡
b
:
uPred
M
)%
I
.
Proof
.
by
intros
;
rewrite
/
Persistent
P
always_eq
.
Qed
.
Global
Instance
valid_persistent
{
A
:
cmraT
}
(
a
:
A
)
:
Persistent
(
✓
a
:
uPred
M
)%
I
.
Proof
.
by
intros
;
rewrite
/
Persistent
always_valid
.
Qed
.
Global
Instance
later_persistent
P
:
Persistent
P
→
Persistent
(
▷
P
).
Proof
.
by
intros
;
rewrite
/
Persistent
always_later
;
apply
later_mono
.
Qed
.
Global
Instance
ownM_
core_p
ersistent
(
a
:
M
)
:
Persistent
(
uPred_ownM
(
core
a
)
)
.
Proof
.
by
rewrite
/
Persistent
always_ownM
_core
.
Qed
.
Persistent
P
(
✓
a
:
uPred
M
)%
I
.
Proof
.
by
intros
;
rewrite
/
Persistent
P
always_valid
.
Qed
.
Global
Instance
later_persistent
P
:
Persistent
P
P
→
Persistent
P
(
▷
P
).
Proof
.
by
intros
;
rewrite
/
Persistent
P
always_later
;
apply
later_mono
.
Qed
.
Global
Instance
ownM_
persistent
:
P
ersistent
a
→
Persistent
P
(
@
uPred_ownM
M
a
).
Proof
.
intros
.
by
rewrite
/
Persistent
P
always_ownM
.
Qed
.
Global
Instance
default_persistent
{
A
}
P
(
Ψ
:
A
→
uPred
M
)
(
mx
:
option
A
)
:
Persistent
P
→
(
∀
x
,
Persistent
(
Ψ
x
))
→
Persistent
(
default
P
mx
Ψ
).
Persistent
P
P
→
(
∀
x
,
Persistent
P
(
Ψ
x
))
→
Persistent
P
(
default
P
mx
Ψ
).
Proof
.
destruct
mx
;
apply
_
.
Qed
.
(* Derived lemmas for always stable *)
Lemma
always_always
P
`
{!
Persistent
P
}
:
(
□
P
)
⊣
⊢
P
.
Lemma
always_always
P
`
{!
Persistent
P
P
}
:
(
□
P
)
⊣
⊢
P
.
Proof
.
apply
(
anti_symm
(
⊢
))
;
auto
using
always_elim
.
Qed
.
Lemma
always_intro
P
Q
`
{!
Persistent
P
}
:
P
⊢
Q
→
P
⊢
□
Q
.
Lemma
always_intro
P
Q
`
{!
Persistent
P
P
}
:
P
⊢
Q
→
P
⊢
□
Q
.
Proof
.
rewrite
-(
always_always
P
)
;
apply
always_intro'
.
Qed
.
Lemma
always_and_sep_l
P
Q
`
{!
Persistent
P
}
:
(
P
∧
Q
)
⊣
⊢
(
P
★
Q
).
Lemma
always_and_sep_l
P
Q
`
{!
Persistent
P
P
}
:
(
P
∧
Q
)
⊣
⊢
(
P
★
Q
).
Proof
.
by
rewrite
-(
always_always
P
)
always_and_sep_l'
.
Qed
.
Lemma
always_and_sep_r
P
Q
`
{!
Persistent
Q
}
:
(
P
∧
Q
)
⊣
⊢
(
P
★
Q
).
Lemma
always_and_sep_r
P
Q
`
{!
Persistent
P
Q
}
:
(
P
∧
Q
)
⊣
⊢
(
P
★
Q
).
Proof
.
by
rewrite
-(
always_always
Q
)
always_and_sep_r'
.
Qed
.
Lemma
always_sep_dup
P
`
{!
Persistent
P
}
:
P
⊣
⊢
(
P
★
P
).
Lemma
always_sep_dup
P
`
{!
Persistent
P
P
}
:
P
⊣
⊢
(
P
★
P
).
Proof
.
by
rewrite
-(
always_always
P
)
-
always_sep_dup'
.
Qed
.
Lemma
always_entails_l
P
Q
`
{!
Persistent
Q
}
:
(
P
⊢
Q
)
→
P
⊢
(
Q
★
P
).
Lemma
always_entails_l
P
Q
`
{!
Persistent
P
Q
}
:
(
P
⊢
Q
)
→
P
⊢
(
Q
★
P
).
Proof
.
by
rewrite
-(
always_always
Q
)
;
apply
always_entails_l'
.
Qed
.
Lemma
always_entails_r
P
Q
`
{!
Persistent
Q
}
:
(
P
⊢
Q
)
→
P
⊢
(
P
★
Q
).
Lemma
always_entails_r
P
Q
`
{!
Persistent
P
Q
}
:
(
P
⊢
Q
)
→
P
⊢
(
P
★
Q
).
Proof
.
by
rewrite
-(
always_always
Q
)
;
apply
always_entails_r'
.
Qed
.
End
uPred_logic
.
...
...
algebra/upred_big_op.v
View file @
c385725f
...
...
@@ -30,7 +30,7 @@ Notation "'Π★{set' X } Φ" := (uPred_big_sepS X Φ)
(** * Always stability for lists *)
Class
PersistentL
{
M
}
(
Ps
:
list
(
uPred
M
))
:
=
persistentL
:
Forall
Persistent
Ps
.
persistentL
:
Forall
Persistent
P
Ps
.
Arguments
persistentL
{
_
}
_
{
_
}.
Section
big_op
.
...
...
@@ -216,21 +216,21 @@ Section gset.
End
gset
.
(* Always stable *)
Global
Instance
big_and_persistent
Ps
:
PersistentL
Ps
→
Persistent
(
Π
∧
Ps
).
Global
Instance
big_and_persistent
Ps
:
PersistentL
Ps
→
Persistent
P
(
Π
∧
Ps
).
Proof
.
induction
1
;
apply
_
.
Qed
.
Global
Instance
big_sep_persistent
Ps
:
PersistentL
Ps
→
Persistent
(
Π★
Ps
).
Global
Instance
big_sep_persistent
Ps
:
PersistentL
Ps
→
Persistent
P
(
Π★
Ps
).
Proof
.
induction
1
;
apply
_
.
Qed
.
Global
Instance
nil_persistent
:
PersistentL
(@
nil
(
uPred
M
)).
Proof
.
constructor
.
Qed
.
Global
Instance
cons_persistent
P
Ps
:
Persistent
P
→
PersistentL
Ps
→
PersistentL
(
P
::
Ps
).
Persistent
P
P
→
PersistentL
Ps
→
PersistentL
(
P
::
Ps
).
Proof
.
by
constructor
.
Qed
.
Global
Instance
app_persistent
Ps
Ps'
:
PersistentL
Ps
→
PersistentL
Ps'
→
PersistentL
(
Ps
++
Ps'
).
Proof
.
apply
Forall_app_2
.
Qed
.
Global
Instance
zip_with_persistent
{
A
B
}
(
f
:
A
→
B
→
uPred
M
)
xs
ys
:
(
∀
x
y
,
Persistent
(
f
x
y
))
→
PersistentL
(
zip_with
f
xs
ys
).
(
∀
x
y
,
Persistent
P
(
f
x
y
))
→
PersistentL
(
zip_with
f
xs
ys
).
Proof
.
unfold
PersistentL
=>
?
;
revert
ys
;
induction
xs
=>
-[|??]
;
constructor
;
auto
.
Qed
.
...
...
barrier/proof.v
View file @
c385725f
...
...
@@ -51,7 +51,7 @@ Definition recv (l : loc) (R : iProp) : iProp :=
saved_prop_own
i
Q
★
▷
(
Q
-
★
R
))%
I
.
Global
Instance
barrier_ctx_persistent
(
γ
:
gname
)
(
l
:
loc
)
(
P
:
iProp
)
:
Persistent
(
barrier_ctx
γ
l
P
).
Persistent
P
(
barrier_ctx
γ
l
P
).
Proof
.
apply
_
.
Qed
.
(* TODO: Figure out if this has a "Global" or "Local" effect.
...
...
heap_lang
/one_shot.v
→
examples
/one_shot.v
View file @
c385725f
...
...
@@ -103,9 +103,7 @@ Proof.
rewrite
-(
exist_intro
n
).
ecancel
[
inv
_
_
]%
I
.
rewrite
[(
_
★
_
)%
I
]
comm
-
assoc
.
apply
const_elim_sep_l
=>->.
rewrite
const_equiv
//
left_id
/
one_shot_inv
-
or_intro_r
.
rewrite
-(
exist_intro
n
).
rewrite
-(
dec_agree_core_id
(
DecAgree
n
))
-(
Shot_core
(
DecAgree
n
:
dec_agreeR
_
))
{
1
}(
always_sep_dup
(
own
_
_
)).
rewrite
-(
exist_intro
n
)
{
1
}(
always_sep_dup
(
own
_
_
)).
solve_sep_entails
.
}
cancel
[
one_shot_inv
γ
l
].
(* FIXME: why aren't laters stripped? *)
...
...
heap_lang/heap.v
View file @
c385725f
...
...
@@ -33,7 +33,7 @@ Section definitions.
Global
Instance
heap_inv_proper
:
Proper
((
≡
)
==>
(
⊣
⊢
))
heap_inv
.
Proof
.
solve_proper
.
Qed
.
Global
Instance
heap_ctx_persistent
N
:
Persistent
(
heap_ctx
N
).
Global
Instance
heap_ctx_persistent
N
:
Persistent
P
(
heap_ctx
N
).
Proof
.
apply
_
.
Qed
.
End
definitions
.
Typeclasses
Opaque
heap_ctx
heap_mapsto
.
...
...
program_logic/auth.v
View file @
c385725f
...
...
@@ -30,7 +30,7 @@ Section definitions.
Proof
.
solve_proper
.
Qed
.
Global
Instance
auth_own_timeless
a
:
TimelessP
(
auth_own
a
).
Proof
.
apply
_
.
Qed
.
Global
Instance
auth_ctx_persistent
N
φ
:
Persistent
(
auth_ctx
N
φ
).
Global
Instance
auth_ctx_persistent
N
φ
:
Persistent
P
(
auth_ctx
N
φ
).
Proof
.
apply
_
.
Qed
.
End
definitions
.
...
...
program_logic/ghost_ownership.v
View file @
c385725f
...
...
@@ -36,10 +36,6 @@ Lemma own_op γ a1 a2 : own γ (a1 ⋅ a2) ⊣⊢ (own γ a1 ★ own γ a2).
Proof
.
by
rewrite
/
own
-
ownG_op
to_globalF_op
.
Qed
.
Global
Instance
own_mono
γ
:
Proper
(
flip
(
≼
)
==>
(
⊢
))
(
own
γ
).
Proof
.
move
=>
a
b
[
c
H
].
rewrite
H
own_op
.
eauto
with
I
.
Qed
.
Lemma
always_own_core
γ
a
:
(
□
own
γ
(
core
a
))
⊣
⊢
own
γ
(
core
a
).
Proof
.
by
rewrite
/
own
-
to_globalF_core
always_ownG_core
.
Qed
.
Lemma
always_own
γ
a
:
core
a
≡
a
→
(
□
own
γ
a
)
⊣
⊢
own
γ
a
.
Proof
.
by
intros
<-
;
rewrite
always_own_core
.
Qed
.
Lemma
own_valid
γ
a
:
own
γ
a
⊢
✓
a
.
Proof
.
rewrite
/
own
ownG_valid
/
to_globalF
.
...
...
@@ -53,9 +49,9 @@ 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
.
unfold
own
;
apply
_
.
Qed
.
Global
Instance
own_core_persistent
γ
a
:
Persistent
(
own
γ
(
core
a
)
).
Proof
.
by
rewrite
/
Persistent
always_own_core
.
Qed
.
Proof
.
rewrite
/
own
;
apply
_
.
Qed
.
Global
Instance
own_core_persistent
γ
a
:
Persistent
a
→
PersistentP
(
own
γ
a
).
Proof
.
rewrite
/
own
;
apply
_
.
Qed
.
(* TODO: This also holds if we just have ✓ a at the current step-idx, as Iris
assertion. However, the map_updateP_alloc does not suffice to show this. *)
...
...
program_logic/global_functor.v
View file @
c385725f
...
...
@@ -41,12 +41,10 @@ Lemma to_globalF_op γ a1 a2 :
Proof
.
by
rewrite
/
to_globalF
iprod_op_singleton
map_op_singleton
cmra_transport_op
.
Qed
.
Lemma
to_globalF_core
γ
a
:
core
(
to_globalF
γ
a
)
≡
to_globalF
γ
(
core
a
).
Proof
.
by
rewrite
/
to_globalF
iprod_core_singleton
map_core_singleton
cmra_transport_core
.
Qed
.
Global
Instance
to_globalF_timeless
γ
m
:
Timeless
m
→
Timeless
(
to_globalF
γ
m
).
Global
Instance
to_globalF_timeless
γ
m
:
Timeless
m
→
Timeless
(
to_globalF
γ
m
).
Proof
.
rewrite
/
to_globalF
;
apply
_
.
Qed
.
Global
Instance
to_globalF_persistent
γ
m
:
Persistent
m
→
Persistent
(
to_globalF
γ
m
).
Proof
.
rewrite
/
to_globalF
;
apply
_
.
Qed
.
End
to_globalF
.
...
...
program_logic/invariants.v
View file @
c385725f
...
...
@@ -23,7 +23,7 @@ Implicit Types Φ : val Λ → iProp Λ Σ.
Global
Instance
inv_contractive
N
:
Contractive
(@
inv
Λ
Σ
N
).
Proof
.
intros
n
???.
apply
exist_ne
=>
i
.
by
apply
and_ne
,
ownI_contractive
.
Qed
.
Global
Instance
inv_persistent
N
P
:
Persistent
(
inv
N
P
).
Global
Instance
inv_persistent
N
P
:
Persistent
P
(
inv
N
P
).
Proof
.
rewrite
/
inv
;
apply
_
.
Qed
.
Lemma
always_inv
N
P
:
(
□
inv
N
P
)
⊣
⊢
inv
N
P
.
...
...
@@ -96,5 +96,4 @@ Proof.
intros
.
rewrite
-(
pvs_mask_weaken
N
)
//.
by
rewrite
/
inv
(
pvs_allocI
N
)
;
last
apply
coPset_suffixes_infinite
.
Qed
.
End
inv
.
program_logic/ownership.v
View file @
c385725f
...
...
@@ -25,15 +25,8 @@ Proof.
apply
uPred
.
ownM_ne
,
Res_ne
;
auto
;
apply
singleton_ne
,
to_agree_ne
.
by
apply
Next_contractive
=>
j
?
;
rewrite
(
HPQ
j
).
Qed
.
Lemma
always_ownI
i
P
:
(
□
ownI
i
P
)
⊣
⊢
ownI
i
P
.
Proof
.
apply
uPred
.
always_ownM
.
by
rewrite
Res_core
!
cmra_core_unit
map_core_singleton
.
Qed
.
Global
Instance
ownI_persistent
i
P
:
Persistent
(
ownI
i
P
).
Proof
.
by
rewrite
/
Persistent
always_ownI
.
Qed
.
Lemma
ownI_sep_dup
i
P
:
ownI
i
P
⊣
⊢
(
ownI
i
P
★
ownI
i
P
).
Proof
.
apply
(
uPred
.
always_sep_dup
_
).
Qed
.
Global
Instance
ownI_persistent
i
P
:
PersistentP
(
ownI
i
P
).
Proof
.
rewrite
/
ownI
.
apply
_
.
Qed
.
(* physical state *)
Lemma
ownP_twice
σ
1
σ
2
:
(
ownP
σ
1
★
ownP
σ
2
:
iProp
Λ
Σ
)
⊢
False
.
...
...
@@ -52,25 +45,16 @@ Lemma ownG_op m1 m2 : ownG (m1 ⋅ m2) ⊣⊢ (ownG m1 ★ ownG m2).
Proof
.
by
rewrite
/
ownG
-
uPred
.
ownM_op
Res_op
!
left_id
.
Qed
.
Global
Instance
ownG_mono
:
Proper
(
flip
(
≼
)
==>
(
⊢
))
(@
ownG
Λ
Σ
).
Proof
.
move
=>
a
b
[
c
H
].
rewrite
H
ownG_op
.
eauto
with
I
.
Qed
.
Lemma
always_ownG_core
m
:
(
□
ownG
(
core
m
))
⊣
⊢
ownG
(
core
m
).
Proof
.
apply
uPred
.
always_ownM
.
by
rewrite
Res_core
!
cmra_core_unit
-{
2
}(
cmra_core_idemp
m
).
Qed
.
Lemma
always_ownG
m
:
core
m
≡
m
→
(
□
ownG
m
)
⊣
⊢
ownG
m
.
Proof
.
by
intros
<-
;
rewrite
always_ownG_core
.
Qed
.
Lemma
ownG_valid
m
:
ownG
m
⊢
✓
m
.
Proof
.
rewrite
/
ownG
uPred
.
ownM_valid
res_validI
/=
;
auto
with
I
.
Qed
.
Proof
.
rewrite
/
ownG
uPred
.
ownM_valid
res_validI
/=
;
auto
with
I
.
Qed
.
Lemma
ownG_valid_r
m
:
ownG
m
⊢
(
ownG
m
★
✓
m
).
Proof
.
apply
(
uPred
.
always_entails_r
_
_
),
ownG_valid
.
Qed
.
Lemma
ownG_empty
:
True
⊢
(
ownG
∅
:
iProp
Λ
Σ
).
Proof
.
apply
uPred
.
ownM_empty
.
Qed
.
Global
Instance
ownG_timeless
m
:
Timeless
m
→
TimelessP
(
ownG
m
).
Proof
.
rewrite
/
ownG
;
apply
_
.
Qed
.
Global
Instance
ownG_
core_
persistent
m
:
Persistent
(
ownG
(
core
m
)
).
Proof
.
by
rewrite
/
Persistent
always_ownG_core
.
Qed
.
Global
Instance
ownG_persistent
m
:
Persistent
m
→
PersistentP
(
ownG
m
).
Proof
.
rewrite
/
ownG
;
apply
_
.
Qed
.
(* inversion lemmas *)
Lemma
ownI_spec
n
r
i
P
:
...
...
program_logic/pviewshifts.v
View file @
c385725f
...
...
@@ -146,10 +146,10 @@ Lemma pvs_strip_pvs E P Q : P ⊢ (|={E}=> Q) → (|={E}=> P) ⊢ (|={E}=> Q).
Proof
.
move
=>->.
by
rewrite
pvs_trans'
.
Qed
.
Lemma
pvs_frame_l
E1
E2
P
Q
:
(
P
★
|={
E1
,
E2
}=>
Q
)
⊢
(|={
E1
,
E2
}=>
P
★
Q
).
Proof
.
rewrite
!(
comm
_
P
)
;
apply
pvs_frame_r
.
Qed
.
Lemma
pvs_always_l
E1
E2
P
Q
`
{!
Persistent
P
}
:
Lemma
pvs_always_l
E1
E2
P
Q
`
{!
Persistent
P
P
}
:
(
P
∧
|={
E1
,
E2
}=>
Q
)
⊢
(|={
E1
,
E2
}=>
P
∧
Q
).
Proof
.
by
rewrite
!
always_and_sep_l
pvs_frame_l
.
Qed
.
Lemma
pvs_always_r
E1
E2
P
Q
`
{!
Persistent
Q
}
:
Lemma
pvs_always_r
E1
E2
P
Q
`
{!
Persistent
P
Q
}
:
((|={
E1
,
E2
}=>
P
)
∧
Q
)
⊢
(|={
E1
,
E2
}=>
P
∧
Q
).
Proof
.
by
rewrite
!
always_and_sep_r
pvs_frame_r
.
Qed
.
Lemma
pvs_impl_l
E1
E2
P
Q
:
(
□
(
P
→
Q
)
∧
(|={
E1
,
E2
}=>
P
))
⊢
(|={
E1
,
E2
}=>
Q
).
...
...
program_logic/resources.v
View file @
c385725f
...
...
@@ -153,6 +153,8 @@ Lemma lookup_wld_op_r n r1 r2 i P :
Proof
.
rewrite
(
comm
_
r1
)
(
comm
_
(
wld
r1
))
;
apply
lookup_wld_op_l
.
Qed
.
Global
Instance
Res_timeless
e
σ
m
:
Timeless
m
→
Timeless
(@
Res
Λ
A
M
∅
e
σ
m
).
Proof
.
by
intros
?
?
[???]
;
constructor
;
apply
:
timeless
.
Qed
.
Global
Instance
Res_persistent
w
m
:
Persistent
m
→
Persistent
(@
Res
Λ
A
M
w
∅
m
).
Proof
.
constructor
;
apply
(
persistent
_
).
Qed
.
(** Internalized properties *)
Lemma
res_equivI
{
M'
}
r1
r2
:
...
...
program_logic/saved_one_shot.v
View file @
c385725f
...
...
@@ -9,8 +9,7 @@ Definition oneShotGF (F : cFunctor) : gFunctor :=
Instance
inGF_oneShotG
`
{
inGF
Λ
Σ
(
oneShotGF
F
)}
:
oneShotG
Λ
Σ
F
.
Proof
.
apply
:
inGF_inG
.
Qed
.
Definition
one_shot_pending
`
{
oneShotG
Λ
Σ
F
}
(
γ
:
gname
)
:
iPropG
Λ
Σ
:
=
Definition
one_shot_pending
`
{
oneShotG
Λ
Σ
F
}
(
γ
:
gname
)
:
iPropG
Λ
Σ
:
=
own
γ
OneShotPending
.
Definition
one_shot_own
`
{
oneShotG
Λ
Σ
F
}
(
γ
:
gname
)
(
x
:
F
(
iPropG
Λ
Σ
))
:
iPropG
Λ
Σ
:
=
...
...
@@ -23,9 +22,8 @@ Section one_shot.
Implicit
Types
x
y
:
F
(
iPropG
Λ
Σ
).
Implicit
Types
γ
:
gname
.
Global
Instance
ne_shot_own_persistent
γ
x
:
Persistent
(
one_shot_own
γ
x
).
Proof
.
by
rewrite
/
Persistent
always_own
.
Qed
.
Global
Instance
ne_shot_own_persistent
γ
x
:
PersistentP
(
one_shot_own
γ
x
).
Proof
.
rewrite
/
one_shot_own
;
apply
_
.
Qed
.
Lemma
one_shot_alloc_strong
N
(
G
:
gset
gname
)
:
True
⊢
pvs
N
N
(
∃
γ
,
■
(
γ
∉
G
)
∧
one_shot_pending
γ
).
...
...
program_logic/saved_prop.v
View file @
c385725f
...
...
@@ -20,9 +20,8 @@ Section saved_prop.
Implicit
Types
x
y
:
F
(
iPropG
Λ
Σ
).
Implicit
Types
γ
:
gname
.
Global
Instance
saved_prop_persistent
γ
x
:
Persistent
(
saved_prop_own
γ
x
).
Proof
.
by
rewrite
/
Persistent
always_own
.
Qed
.
Global
Instance
saved_prop_persistent
γ
x
:
PersistentP
(
saved_prop_own
γ
x
).
Proof
.
rewrite
/
saved_prop_own
;
apply
_
.
Qed
.
Lemma
saved_prop_alloc_strong
N
x
(
G
:
gset
gname
)
:
True
⊢
pvs
N
N
(
∃
γ
,
■
(
γ
∉
G
)
∧
saved_prop_own
γ
x
).
...
...
program_logic/sts.v
View file @
c385725f
...
...
@@ -42,7 +42,7 @@ Section definitions.
Global
Instance
sts_ctx_proper
N
:
Proper
(
pointwise_relation
_
(
≡
)
==>
(
⊣
⊢
))
(
sts_ctx
N
).
Proof
.
solve_proper
.
Qed
.
Global
Instance
sts_ctx_persistent
N
φ
:
Persistent
(
sts_ctx
N
φ
).
Global
Instance
sts_ctx_persistent
N
φ
:
Persistent
P
(
sts_ctx
N
φ
).