Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
I
iris-coq
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
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
Maxime Dénès
iris-coq
Commits
40edf54c
Commit
40edf54c
authored
9 years ago
by
Robbert Krebbers
Browse files
Options
Downloads
Patches
Plain Diff
Primitive view shifts.
parent
6b76d292
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
iris/pviewshifts.v
+140
-0
140 additions, 0 deletions
iris/pviewshifts.v
with
140 additions
and
0 deletions
iris/pviewshifts.v
0 → 100644
+
140
−
0
View file @
40edf54c
Require
Export
iris
.
ownership
prelude
.
co_pset
.
Require
Import
iris
.
wsat
.
Local
Hint
Extern
10
(_
≤
_)
=>
omega
.
Local
Hint
Extern
100
(
@
eq
coPset
_
_)
=>
solve_elem_of
.
Local
Hint
Extern
100
(_
∉
_)
=>
solve_elem_of
.
Local
Hint
Extern
10
(
✓
{_}
_)
=>
repeat
match
goal
with
H
:
wsat
_
_
_
_
|
-
_
=>
apply
wsat_valid
in
H
end
;
solve_validN
.
Program
Definition
pvs
{
Σ
}
(
E1
E2
:
coPset
)
(
P
:
iProp
Σ
)
:
iProp
Σ
:=
{|
uPred_holds
n
r1
:=
∀
rf
k
Ef
σ
,
1
<
k
≤
n
→
(
E1
∪
E2
)
∩
Ef
=
∅
→
wsat
k
(
E1
∪
Ef
)
σ
(
r1
⋅
rf
)
→
∃
r2
,
P
k
r2
∧
wsat
k
(
E2
∪
Ef
)
σ
(
r2
⋅
rf
)
|}
.
Next
Obligation
.
intros
Σ
E1
E2
P
r1
r2
n
HP
Hr
rf
k
Ef
σ
??
Hwsat
;
simpl
in
*.
apply
HP
;
auto
.
by
rewrite
(
dist_le
_
_
_
_
Hr
);
last
lia
.
Qed
.
Next
Obligation
.
intros
Σ
E1
E2
P
r
rf
k
Ef
σ
;
simpl
in
*
;
lia
.
Qed
.
Next
Obligation
.
intros
Σ
E1
E2
P
r1
r2
n1
n2
HP
[
r3
?]
Hn
?
rf
k
Ef
σ
??
Hws
;
setoid_subst
.
destruct
(
HP
(
r3
⋅
rf
)
k
Ef
σ
)
as
(
r'
&
?
&
Hws'
);
rewrite
?(
associative
op
);
auto
.
exists
(
r'
⋅
r3
);
rewrite
-
(
associative
_);
split
;
last
done
.
apply
uPred_weaken
with
r'
k
;
eauto
using
@
ra_included_l
.
Qed
.
Arguments
pvs
{_}
_
_
_
%
I
:
simpl
never
.
Instance
:
Params
(
@
pvs
)
3
.
Section
pvs
.
Context
{
Σ
:
iParam
}
.
Implicit
Types
P
Q
:
iProp
Σ
.
Implicit
Types
m
:
icmra'
Σ
.
Global
Instance
pvs_ne
E1
E2
n
:
Proper
(
dist
n
==>
dist
n
)
(
@
pvs
Σ
E1
E2
)
.
Proof
.
intros
P
Q
HPQ
r1
n'
??;
simpl
;
split
;
intros
HP
rf
k
Ef
σ
???;
destruct
(
HP
rf
k
Ef
σ
)
as
(
r2
&
?
&
?);
auto
;
exists
r2
;
split_ands
;
auto
;
apply
HPQ
;
eauto
.
Qed
.
Global
Instance
pvs_proper
E1
E2
:
Proper
((
≡
)
==>
(
≡
))
(
@
pvs
Σ
E1
E2
)
.
Proof
.
apply
ne_proper
,
_
.
Qed
.
Lemma
pvs_intro
E
P
:
P
⊑
pvs
E
E
P
.
Proof
.
intros
r
n
?
HP
rf
k
Ef
σ
???;
exists
r
;
split
;
last
done
.
apply
uPred_weaken
with
r
n
;
eauto
.
Qed
.
Lemma
pvs_mono
E1
E2
P
Q
:
P
⊑
Q
→
pvs
E1
E2
P
⊑
pvs
E1
E2
Q
.
Proof
.
intros
HPQ
r
n
?
HP
rf
k
Ef
σ
???
.
destruct
(
HP
rf
k
Ef
σ
)
as
(
r2
&
?
&
?);
eauto
;
exists
r2
;
eauto
.
Qed
.
Lemma
pvs_timeless
E
P
:
TimelessP
P
→
(
▷
P
)
⊑
pvs
E
E
P
.
Proof
.
rewrite
uPred
.
timelessP_spec
=>
HP
r
[|
n
]
?
HP'
rf
k
Ef
σ
???;
first
lia
.
exists
r
;
split
;
last
done
.
apply
HP
,
uPred_weaken
with
r
n
;
eauto
using
cmra_valid_le
.
Qed
.
Lemma
pvs_trans
E1
E2
E3
P
:
E2
⊆
E1
∪
E3
→
pvs
E1
E2
(
pvs
E2
E3
P
)
⊑
pvs
E1
E3
P
.
Proof
.
intros
?
r1
n
?
HP1
rf
k
Ef
σ
???
.
destruct
(
HP1
rf
k
Ef
σ
)
as
(
r2
&
HP2
&
?);
auto
.
Qed
.
Lemma
pvs_mask_frame
E1
E2
Ef
P
:
Ef
∩
(
E1
∪
E2
)
=
∅
→
pvs
E1
E2
P
⊑
pvs
(
E1
∪
Ef
)
(
E2
∪
Ef
)
P
.
Proof
.
intros
?
r
n
?
HP
rf
k
Ef'
σ
???
.
destruct
(
HP
rf
k
(
Ef
∪
Ef'
)
σ
)
as
(
r'
&
?
&
?);
rewrite
?(
associative_L
_);
eauto
.
by
exists
r'
;
rewrite
-
(
associative_L
_)
.
Qed
.
Lemma
pvs_frame_r
E1
E2
P
Q
:
(
pvs
E1
E2
P
★
Q
)
⊑
pvs
E1
E2
(
P
★
Q
)
.
Proof
.
intros
r
n
?
(
r1
&
r2
&
Hr
&
HP
&
?)
rf
k
Ef
σ
???
.
destruct
(
HP
(
r2
⋅
rf
)
k
Ef
σ
)
as
(
r'
&
?
&
?);
eauto
.
{
by
rewrite
(
associative
_)
-
(
dist_le
_
_
_
_
Hr
);
last
lia
.
}
exists
(
r'
⋅
r2
);
split
;
last
by
rewrite
-
(
associative
_)
.
exists
r'
,
r2
;
split_ands
;
auto
;
apply
uPred_weaken
with
r2
n
;
auto
.
Qed
.
Lemma
pvs_open
i
P
:
inv
i
P
⊑
pvs
{[
i
]}
∅
(
▷
P
)
.
Proof
.
intros
r
[|
n
]
?
Hinv
rf
[|
k
]
Ef
σ
???;
try
lia
.
apply
inv_spec
in
Hinv
;
last
auto
.
destruct
(
wsat_open
k
Ef
σ
(
r
⋅
rf
)
i
P
)
as
(
rP
&
?
&
?);
auto
.
{
rewrite
lookup_wld_op_l
?Hinv
;
eauto
;
apply
dist_le
with
(
S
n
);
eauto
.
}
exists
(
rP
⋅
r
);
split
;
last
by
rewrite
(
left_id_L
_
_)
-
(
associative
_)
.
eapply
uPred_weaken
with
rP
(
S
k
);
eauto
using
@
ra_included_l
.
Qed
.
Lemma
pvs_close
i
P
:
(
inv
i
P
∧
▷
P
)
⊑
pvs
∅
{[
i
]}
True
.
Proof
.
intros
r
[|
n
]
?
[?
HP
]
rf
[|
k
]
Ef
σ
?
HE
?;
try
lia
;
exists
∅
;
split
;
[
done
|]
.
rewrite
(
left_id
_
_);
apply
wsat_close
with
P
r
.
*
apply
inv_spec
,
uPred_weaken
with
r
(
S
n
);
auto
.
*
solve_elem_of
+
HE
.
*
by
rewrite
-
(
left_id_L
∅
(
∪
)
Ef
)
.
*
apply
uPred_weaken
with
r
n
;
auto
.
Qed
.
Lemma
pvs_updateP
E
m
(
P
:
icmra'
Σ
→
Prop
)
:
m
⇝:
P
→
ownG
m
⊑
pvs
E
E
(
∃
m'
,
■
P
m'
∧
ownG
m'
)
.
Proof
.
intros
Hup
r
[|
n
]
?
Hinv
%
ownG_spec
rf
[|
k
]
Ef
σ
???;
try
lia
.
destruct
(
wsat_update_gst
k
(
E
∪
Ef
)
σ
r
rf
m
P
)
as
(
m'
&
?
&
?);
eauto
using
cmra_included_le
.
by
exists
(
update_gst
m'
r
);
split
;
[
exists
m'
;
split
;
[|
apply
ownG_spec
]|]
.
Qed
.
Lemma
pvs_alloc
E
P
:
¬
set_finite
E
→
▷
P
⊑
pvs
E
E
(
∃
i
,
■
(
i
∈
E
)
∧
inv
i
P
)
.
Proof
.
intros
?
r
[|
n
]
?
HP
rf
[|
k
]
Ef
σ
???;
try
lia
.
destruct
(
wsat_alloc
k
E
Ef
σ
rf
P
r
)
as
(
i
&
?
&
?
&
?);
auto
.
{
apply
uPred_weaken
with
r
n
;
eauto
.
}
exists
(
Res
{[
i
↦
to_agree
(
Later
(
iProp_unfold
P
))
]}
∅
∅
)
.
by
split
;
[
by
exists
i
;
split
;
rewrite
/
uPred_holds
/=|
]
.
Qed
.
(* Derived rules *)
Import
uPred
.
Global
Instance
pvs_mono'
E1
E2
:
Proper
((
⊑
)
==>
(
⊑
))
(
@
pvs
Σ
E1
E2
)
.
Proof
.
intros
P
Q
;
apply
pvs_mono
.
Qed
.
Lemma
pvs_trans'
E
P
:
pvs
E
E
(
pvs
E
E
P
)
⊑
pvs
E
E
P
.
Proof
.
apply
pvs_trans
;
solve_elem_of
.
Qed
.
Lemma
pvs_frame_l
E1
E2
P
Q
:
(
P
★
pvs
E1
E2
Q
)
⊑
pvs
E1
E2
(
P
★
Q
)
.
Proof
.
rewrite
!
(
commutative
_
P
);
apply
pvs_frame_r
.
Qed
.
Lemma
pvs_always_l
E1
E2
P
Q
:
(
□
P
∧
pvs
E1
E2
Q
)
⊑
pvs
E1
E2
(
□
P
∧
Q
)
.
Proof
.
by
rewrite
!
always_and_sep_l
pvs_frame_l
.
Qed
.
Lemma
pvs_always_r
E1
E2
P
Q
:
(
pvs
E1
E2
P
∧
□
Q
)
⊑
pvs
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
)
∧
pvs
E1
E2
P
)
⊑
pvs
E1
E2
Q
.
Proof
.
by
rewrite
pvs_always_l
always_elim
impl_elim_l
.
Qed
.
Lemma
pvs_impl_r
E1
E2
P
Q
:
(
pvs
E1
E2
P
∧
□
(
P
→
Q
))
⊑
pvs
E1
E2
Q
.
Proof
.
by
rewrite
(
commutative
_)
pvs_impl_l
.
Qed
.
Lemma
pvs_mask_weaken
E1
E2
P
:
E1
⊆
E2
→
pvs
E1
E1
P
⊑
pvs
E2
E2
P
.
Proof
.
intros
;
rewrite
(
union_difference_L
E1
E2
)
//
;
apply
pvs_mask_frame
;
auto
.
Qed
.
Lemma
pvs_update
E
m
m'
:
m
⇝
m'
→
ownG
m
⊑
pvs
E
E
(
ownG
m'
)
.
Proof
.
intros
;
rewrite
->
(
pvs_updateP
E
_
(
m'
=
));
last
by
apply
cmra_update_updateP
.
by
apply
pvs_mono
,
uPred
.
exist_elim
=>
m''
;
apply
uPred
.
const_elim_l
=>
->
.
Qed
.
End
pvs
.
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