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
Tej Chajed
iris
Commits
a64118a2
Commit
a64118a2
authored
Feb 09, 2016
by
Ralf Jung
Browse files
prove pvs_alloc, modulo the closure under suffixes being infinite
parent
680ce446
Changes
1
Hide whitespace changes
Inline
Side-by-side
program_logic/namespace.v
View file @
a64118a2
...
...
@@ -44,7 +44,7 @@ Local Hint Resolve nclose_subseteq ndot_nclose.
(** Derived forms and lemmas about them. *)
Definition
inv
{
Λ
Σ
}
(
N
:
namespace
)
(
P
:
iProp
Λ
Σ
)
:
iProp
Λ
Σ
:
=
(
∃
i
:
positive
,
ownI
(
encode
$
ndot
N
i
)
P
)%
I
.
(
∃
i
:
positive
,
■
(
i
∈
nclose
N
)
∧
ownI
i
P
)%
I
.
Section
inv
.
Context
{
Λ
:
language
}
{
Σ
:
iFunctor
}.
...
...
@@ -55,6 +55,7 @@ Implicit Types P Q R : iProp Λ Σ.
Global
Instance
inv_contractive
N
:
Contractive
(@
inv
Λ
Σ
N
).
Proof
.
intros
n
?
?
EQ
.
apply
exists_ne
=>
i
.
apply
and_ne
;
first
done
.
by
apply
ownI_contractive
.
Qed
.
...
...
@@ -75,17 +76,18 @@ Lemma pvs_open_close E N P Q R :
Proof
.
move
=>
HN
->
{
P
}.
rewrite
/
inv
and_exist_r
.
apply
exist_elim
=>
i
.
rewrite
-
associative
.
apply
const_elim_l
=>
HiN
.
(* Add this to the local context, so that solve_elem_of finds it. *)
assert
({[
encode
(
ndot
N
i
)
]}
⊆
nclose
N
)
by
eauto
.
assert
({[
encode
i
]}
⊆
nclose
N
)
by
eauto
.
rewrite
always_and_sep_l'
(
always_sep_dup'
(
ownI
_
_
)).
rewrite
{
1
}
pvs_openI
!
pvs_frame_r
.
(* TODO is there a common pattern here in the way we combine pvs_trans
and pvs_mask_frame_mono? *)
rewrite
-(
pvs_trans
E
(
E
∖
{[
(
encode
(
ndot
N
i
))
]}))
;
rewrite
-(
pvs_trans
E
(
E
∖
{[
encode
i
]}))
;
last
by
solve_elem_of
.
(* FIXME: Shouldn't eauto work, since I added a Hint Extern? *)
apply
pvs_mask_frame_mono
;
[
solve_elem_of
..|].
rewrite
(
commutative
_
(
▷
R
)%
I
)
-
associative
wand_elim_r
pvs_frame_l
.
rewrite
-(
pvs_trans
_
(
E
∖
{[
(
encode
(
ndot
N
i
))
]})
E
)
;
last
by
solve_elem_of
.
rewrite
-(
pvs_trans
_
(
E
∖
{[
encode
i
]})
E
)
;
last
by
solve_elem_of
.
apply
pvs_mask_frame_mono
;
[
solve_elem_of
..|].
rewrite
associative
-
always_and_sep_l'
pvs_closeI
pvs_frame_r
left_id
.
apply
pvs_mask_frame'
;
solve_elem_of
.
...
...
@@ -93,8 +95,8 @@ Qed.
Lemma
pvs_alloc
N
P
:
▷
P
⊑
pvs
N
N
(
inv
N
P
).
Proof
.
(* FIXME: Can we have the E that contains exactly all (encode $ ndot N i) for all i?
If not, then we have to change the def. of inv
. *)
rewrite
/
inv
(
pvs_allocI
N
)
;
first
done
.
(* FIXME use coPset_suffixes_infinite
. *)
Abort
.
End
inv
.
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