Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Dan Frumin
iris-coq
Commits
762b22c1
Commit
762b22c1
authored
May 27, 2016
by
Robbert Krebbers
Browse files
Merge branch 'master' of gitlab.mpi-sws.org:FP/iris-coq
parents
69d67c60
40dfc35a
Changes
3
Hide whitespace changes
Inline
Side-by-side
_CoqProject
View file @
762b22c1
...
...
@@ -67,6 +67,7 @@ program_logic/ownership.v
program_logic/weakestpre.v
program_logic/weakestpre_fix.v
program_logic/pviewshifts.v
program_logic/lviewshifts.v
program_logic/resources.v
program_logic/hoare.v
program_logic/language.v
...
...
program_logic/invariants.v
View file @
762b22c1
From
iris
.
program_logic
Require
Import
ownership
.
From
iris
.
program_logic
Require
Export
namespaces
.
From
iris
.
program_logic
Require
Export
namespaces
lviewshifts
.
From
iris
.
proofmode
Require
Import
pviewshifts
.
Import
uPred
.
...
...
@@ -31,16 +31,34 @@ Proof.
by
rewrite
/
inv
(
pvs_allocI
N
);
last
apply
coPset_suffixes_infinite
.
Qed
.
(
**
Invariants
can
be
opened
around
any
frame
-
shifting
assertion
.
*
)
(
**
Fairly
explicit
form
of
opening
invariants
*
)
Lemma
inv_open
E
N
P
:
nclose
N
⊆
E
→
inv
N
P
⊢
∃
E
'
,
■
(
E
∖
nclose
N
⊆
E
'
∧
E
'
⊆
E
)
★
|={
E
,
E
'
}=>
▷
P
★
(
▷
P
={
E
'
,
E
}=
★
True
).
Proof
.
rewrite
/
inv
.
iIntros
{?}
"Hinv"
.
iDestruct
"Hinv"
as
{
i
}
"[% #Hi]"
.
iExists
(
E
∖
{
[
i
]
}
).
iSplit
.
{
iPureIntro
.
set_solver
.
}
iPvs
(
pvs_openI
'
with
"Hi"
)
as
"HP"
;
[
set_solver
..
|
].
iPvsIntro
.
iSplitL
"HP"
;
first
done
.
iIntros
"HP"
.
iPvs
(
pvs_closeI
'
_
_
P
with
"[HP]"
);
[
set_solver
|
iSplit
;
done
|
set_solver
|
].
iPvsIntro
.
done
.
Qed
.
(
**
Invariants
can
be
opened
around
any
frame
-
shifting
assertion
.
This
is
less
verbose
to
apply
than
[
inv_open
].
*
)
Lemma
inv_fsa
{
A
}
(
fsa
:
FSA
Λ
Σ
A
)
`
{!
FrameShiftAssertion
fsaV
fsa
}
E
N
P
Ψ
:
fsaV
→
nclose
N
⊆
E
→
(
inv
N
P
★
(
▷
P
-
★
fsa
(
E
∖
nclose
N
)
(
λ
a
,
▷
P
★
Ψ
a
)))
⊢
fsa
E
Ψ
.
Proof
.
iIntros
{??}
"[#Hinv HΨ]"
;
rewrite
/
inv
;
iDestruct
"Hinv"
as
{
i
}
"[% Hi]"
.
iApply
(
fsa_open_close
E
(
E
∖
{
[
encode
i
]
}
));
auto
;
first
by
set_solver
.
iPvs
(
pvs_openI
'
_
_
with
"Hi"
)
as
"HP"
;
[
set_solver
..
|
iPvsIntro
].
iApply
(
fsa_mask_weaken
_
(
E
∖
N
));
first
set_solver
.
iApply
fsa_wand_r
;
iSplitL
;
[
by
iApply
"HΨ"
|
iIntros
{
v
}
"[HP HΨ]"
].
iPvs
(
pvs_closeI
'
_
_
P
with
"[HP]"
);
[
auto
|
by
iSplit
|
set_solver
|
done
].
iIntros
{??}
"[Hinv HΨ]"
.
iDestruct
(
inv_open
E
N
P
with
"Hinv"
)
as
{
E
'
}
"[% Hvs]"
;
first
done
.
iApply
(
fsa_open_close
E
E
'
);
auto
;
first
set_solver
.
iPvs
"Hvs"
as
"[HP Hvs]"
;
first
set_solver
.
(
*
TODO
:
How
do
I
do
sth
.
like
[
iSpecialize
"HΨ HP"
]
?
*
)
iPvsIntro
.
iApply
(
fsa_mask_weaken
_
(
E
∖
N
));
first
set_solver
.
iApply
fsa_wand_r
.
iSplitR
"Hvs"
;
first
by
iApply
"HΨ"
.
simpl
.
iIntros
{
v
}
"[HP HΨ]"
.
iPvs
(
"Hvs"
with
"HP"
);
first
set_solver
.
by
iPvsIntro
.
Qed
.
End
inv
.
program_logic/lviewshifts.v
0 → 100644
View file @
762b22c1
From
iris
.
program_logic
Require
Export
pviewshifts
.
Import
uPred
.
(
*
Some
notation
for
linear
view
shifts
.
*
)
Definition
lvs
{
Λ
Σ
}
(
E1
E2
:
coPset
)
(
P
Q
:
iProp
Λ
Σ
)
:
iProp
Λ
Σ
:=
(
P
-
★
|={
E1
,
E2
}=>
Q
)
%
I
.
Arguments
lvs
{
_
_
}
_
_
_
%
I
_
%
I
.
Instance:
Params
(
@
lvs
)
4.
Notation
"P ={ E1 , E2 }=★ Q"
:=
(
lvs
E1
E2
P
%
I
Q
%
I
)
(
at
level
99
,
E1
,
E2
at
level
50
,
Q
at
level
200
,
format
"P ={ E1 , E2 }=★ Q"
)
:
uPred_scope
.
Notation
"P ={ E1 , E2 }=★ Q"
:=
(
True
⊢
(
P
={
E1
,
E2
}=
★
Q
)
%
I
)
(
at
level
99
,
E1
,
E2
at
level
50
,
Q
at
level
200
,
format
"P ={ E1 , E2 }=★ Q"
)
:
C_scope
.
Notation
"P ={ E }=★ Q"
:=
(
P
={
E
,
E
}=
★
Q
)
%
I
(
at
level
99
,
E
at
level
50
,
Q
at
level
200
,
format
"P ={ E }=★ Q"
)
:
uPred_scope
.
Notation
"P ={ E }=★ Q"
:=
(
True
⊢
(
P
={
E
}=
★
Q
)
%
I
)
(
at
level
99
,
E
at
level
50
,
Q
at
level
200
,
format
"P ={ E }=★ Q"
)
:
C_scope
.
(
*
TODO
:
Also
prove
some
lemmas
.
*
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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