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
George Pirlea
Iris
Commits
3c04addd
Commit
3c04addd
authored
May 20, 2016
by
Robbert Krebbers
Browse files
Improve iPvs to deal with mask changing viewshifts.
parent
2cec343c
Changes
1
Hide whitespace changes
Inline
Side-by-side
proofmode/pviewshifts.v
View file @
3c04addd
...
...
@@ -42,17 +42,20 @@ Global Instance fsa_split_fsa {A} (fsa : FSA Λ Σ A) E Φ :
FrameShiftAssertion
fsaV
fsa
→
FSASplit
(
fsa
E
Φ
)
E
fsa
fsaV
Φ
.
Proof
.
done
.
Qed
.
Lemma
tac_pvs_intro
Δ
E
Q
:
Δ
⊢
Q
→
Δ
⊢
|={
E
}=>
Q
.
Proof
.
intros
->.
apply
pvs_intro
.
Qed
.
Lemma
tac_pvs_intro
Δ
E
1
E2
Q
:
E1
=
E2
→
Δ
⊢
Q
→
Δ
⊢
|={
E
1
,
E2
}=>
Q
.
Proof
.
intros
->
->.
apply
pvs_intro
.
Qed
.
Lemma
tac_pvs_elim
Δ
Δ
'
E1
E2
E3
i
p
P'
P
Q
:
envs_lookup
i
Δ
=
Some
(
p
,
P'
)
→
P'
=
(|={
E1
,
E2
}=>
P
)%
I
→
Lemma
tac_pvs_elim
Δ
Δ
'
E1
E2
E3
i
p
P'
E1'
E2'
P
Q
:
envs_lookup
i
Δ
=
Some
(
p
,
P'
)
→
P'
=
(|={
E1'
,
E2'
}=>
P
)%
I
→
(
E1'
=
E1
∧
E2'
=
E2
∧
E2
⊆
E1
∪
E3
∨
E2
=
E2'
∪
E1
∖
E1'
∧
E2'
⊥
E1
∖
E1'
∧
E1'
⊆
E1
∧
E2'
⊆
E1'
∪
E3
)
→
envs_replace
i
p
false
(
Esnoc
Enil
i
P
)
Δ
=
Some
Δ
'
→
E2
⊆
E1
∪
E3
→
Δ
'
⊢
(|={
E2
,
E3
}=>
Q
)
→
Δ
⊢
|={
E1
,
E3
}=>
Q
.
Proof
.
intros
?
->
??
HQ
.
rewrite
envs_replace_sound
//
;
simpl
.
by
rewrite
always_if_elim
right_id
pvs_frame_r
wand_elim_r
HQ
pvs_trans
.
intros
?
->
HE
?
HQ
.
rewrite
envs_replace_sound
//
;
simpl
.
rewrite
always_if_elim
right_id
pvs_frame_r
wand_elim_r
HQ
.
destruct
HE
as
[(?&?&?)|(?&?&?&?)]
;
subst
;
first
(
by
apply
pvs_trans
).
etrans
;
[
eapply
pvs_mask_frame'
|
apply
pvs_trans
]
;
auto
;
set_solver
.
Qed
.
Lemma
tac_pvs_elim_fsa
{
A
}
(
fsa
:
FSA
Λ
Σ
A
)
fsaV
Δ
Δ
'
E
i
p
P'
P
Q
Φ
:
...
...
@@ -97,17 +100,20 @@ Proof.
Qed
.
End
pvs
.
Tactic
Notation
"iPvsIntro"
:
=
apply
tac_pvs_intro
.
Tactic
Notation
"iPvsIntro"
:
=
apply
tac_pvs_intro
;
first
try
fast_done
.
Tactic
Notation
"iPvsCore"
constr
(
H
)
:
=
match
goal
with
|
|-
_
⊢
|={
_
,
_
}=>
_
=>
eapply
tac_pvs_elim
with
_
_
H
_
_
_;
eapply
tac_pvs_elim
with
_
_
H
_
_
_
_
_;
[
env_cbv
;
reflexivity
||
fail
"iPvs:"
H
"not found"
|
let
P
:
=
match
goal
with
|-
?P
=
_
=>
P
end
in
reflexivity
||
fail
"iPvs:"
H
":"
P
"not a pvs with the right mask"
|
env_cbv
;
reflexivity
|
try
(
rewrite
(
idemp_L
(
∪
))
;
reflexivity
)|]
|
first
[
left
;
split_and
!
;
[
reflexivity
|
reflexivity
|
try
(
rewrite
(
idemp_L
(
∪
))
;
reflexivity
)]
|
right
;
split
;
first
reflexivity
]
|
env_cbv
;
reflexivity
|]
|
|-
_
=>
eapply
tac_pvs_elim_fsa
with
_
_
_
_
H
_
_
_
_;
[
env_cbv
;
reflexivity
||
fail
"iPvs:"
H
"not found"
...
...
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