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
Jonas Kastberg
iris
Commits
afae72fd
Commit
afae72fd
authored
Oct 05, 2016
by
Robbert Krebbers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
No longer put proof mode class instances in their own file.
parent
5f519f56
Changes
33
Hide whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
153 additions
and
166 deletions
+153
-166
_CoqProject
_CoqProject
+0
-4
heap_lang/adequacy.v
heap_lang/adequacy.v
+1
-1
heap_lang/heap.v
heap_lang/heap.v
+1
-1
heap_lang/lib/counter.v
heap_lang/lib/counter.v
+1
-1
heap_lang/lib/spawn.v
heap_lang/lib/spawn.v
+1
-1
heap_lang/lib/spin_lock.v
heap_lang/lib/spin_lock.v
+1
-1
heap_lang/lib/ticket_lock.v
heap_lang/lib/ticket_lock.v
+1
-1
heap_lang/lifting.v
heap_lang/lifting.v
+1
-1
heap_lang/proofmode.v
heap_lang/proofmode.v
+2
-1
program_logic/adequacy.v
program_logic/adequacy.v
+1
-1
program_logic/auth.v
program_logic/auth.v
+2
-2
program_logic/boxes.v
program_logic/boxes.v
+2
-2
program_logic/cancelable_invariants.v
program_logic/cancelable_invariants.v
+1
-1
program_logic/ectx_lifting.v
program_logic/ectx_lifting.v
+1
-1
program_logic/ghost_ownership.v
program_logic/ghost_ownership.v
+14
-0
program_logic/hoare.v
program_logic/hoare.v
+1
-1
program_logic/invariants.v
program_logic/invariants.v
+27
-1
program_logic/lifting.v
program_logic/lifting.v
+1
-1
program_logic/ownership.v
program_logic/ownership.v
+1
-1
program_logic/pviewshifts.v
program_logic/pviewshifts.v
+52
-1
program_logic/sts.v
program_logic/sts.v
+2
-2
program_logic/thread_local.v
program_logic/thread_local.v
+2
-1
program_logic/viewshifts.v
program_logic/viewshifts.v
+2
-2
program_logic/weakestpre.v
program_logic/weakestpre.v
+30
-1
proofmode/ghost_ownership.v
proofmode/ghost_ownership.v
+0
-15
proofmode/invariants.v
proofmode/invariants.v
+0
-29
proofmode/pviewshifts.v
proofmode/pviewshifts.v
+0
-54
proofmode/weakestpre.v
proofmode/weakestpre.v
+0
-32
tests/atomic.v
tests/atomic.v
+1
-2
tests/counter.v
tests/counter.v
+1
-1
tests/joining_existentials.v
tests/joining_existentials.v
+1
-1
tests/one_shot.v
tests/one_shot.v
+1
-1
tests/proofmode.v
tests/proofmode.v
+1
-1
No files found.
_CoqProject
View file @
afae72fd
...
...
@@ -116,15 +116,11 @@ tests/list_reverse.v
tests/tree_sum.v
tests/counter.v
proofmode/coq_tactics.v
proofmode/pviewshifts.v
proofmode/environments.v
proofmode/intro_patterns.v
proofmode/spec_patterns.v
proofmode/sel_patterns.v
proofmode/tactics.v
proofmode/notation.v
proofmode/invariants.v
proofmode/weakestpre.v
proofmode/ghost_ownership.v
proofmode/classes.v
proofmode/class_instances.v
heap_lang/adequacy.v
View file @
afae72fd
...
...
@@ -2,7 +2,7 @@ From iris.program_logic Require Export weakestpre adequacy.
From
iris
.
heap_lang
Require
Export
heap
.
From
iris
.
program_logic
Require
Import
auth
ownership
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
From
iris
.
proofmode
Require
Import
tactics
weakestpre
.
From
iris
.
proofmode
Require
Import
tactics
.
Definition
heap
Σ
:
gFunctors
:
=
#[
auth
Σ
heapUR
;
iris
Σ
heap_lang
].
...
...
heap_lang/heap.v
View file @
afae72fd
...
...
@@ -2,7 +2,7 @@ From iris.heap_lang Require Export lifting.
From
iris
.
algebra
Require
Import
upred_big_op
gmap
frac
dec_agree
.
From
iris
.
program_logic
Require
Export
invariants
ghost_ownership
.
From
iris
.
program_logic
Require
Import
ownership
auth
.
From
iris
.
proofmode
Require
Import
weakestpre
.
From
iris
.
proofmode
Require
Import
tactics
.
Import
uPred
.
(* TODO: The entire construction could be generalized to arbitrary languages that have
a finmap as their state. Or maybe even beyond "as their state", i.e. arbitrary
...
...
heap_lang/lib/counter.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
weakestpre
.
From
iris
.
heap_lang
Require
Export
lang
.
From
iris
.
proofmode
Require
Import
invariants
tactics
.
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
program_logic
Require
Import
auth
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
...
...
heap_lang/lib/spawn.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
weakestpre
.
From
iris
.
heap_lang
Require
Export
lang
.
From
iris
.
proofmode
Require
Import
invariants
tactics
.
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
From
iris
.
algebra
Require
Import
excl
.
...
...
heap_lang/lib/spin_lock.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
weakestpre
.
From
iris
.
heap_lang
Require
Export
lang
.
From
iris
.
proofmode
Require
Import
invariants
tactics
.
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
From
iris
.
algebra
Require
Import
excl
.
From
iris
.
heap_lang
.
lib
Require
Import
lock
.
...
...
heap_lang/lib/ticket_lock.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
weakestpre
.
From
iris
.
heap_lang
Require
Export
lang
.
From
iris
.
proofmode
Require
Import
invariant
s
.
From
iris
.
proofmode
Require
Import
tactic
s
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
From
iris
.
algebra
Require
Import
auth
gset
.
From
iris
.
heap_lang
.
lib
Require
Export
lock
.
...
...
heap_lang/lifting.v
View file @
afae72fd
...
...
@@ -2,7 +2,7 @@ From iris.program_logic Require Export weakestpre.
From
iris
.
program_logic
Require
Import
ownership
ectx_lifting
.
(* for ownP *)
From
iris
.
heap_lang
Require
Export
lang
.
From
iris
.
heap_lang
Require
Import
tactics
.
From
iris
.
proofmode
Require
Import
weakestpre
.
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
prelude
Require
Import
fin_maps
.
Import
uPred
.
...
...
heap_lang/proofmode.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
weakestpre
.
From
iris
.
proofmode
Require
Import
coq_tactics
.
From
iris
.
proofmode
Require
Export
weakestpre
.
From
iris
.
proofmode
Require
Export
tactics
.
From
iris
.
heap_lang
Require
Export
wp_tactics
heap
.
Import
uPred
.
...
...
program_logic/adequacy.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
weakestpre
.
From
iris
.
algebra
Require
Import
gmap
auth
agree
gset
coPset
upred_big_op
.
From
iris
.
program_logic
Require
Import
ownership
.
From
iris
.
proofmode
Require
Import
tactics
weakestpre
.
From
iris
.
proofmode
Require
Import
tactics
.
Import
uPred
.
Record
adequate
{
Λ
}
(
e1
:
expr
Λ
)
(
σ
1
:
state
Λ
)
(
φ
:
val
Λ
→
Prop
)
:
=
{
...
...
program_logic/auth.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
pviewshif
ts
.
From
iris
.
program_logic
Require
Export
invarian
ts
.
From
iris
.
algebra
Require
Export
auth
.
From
iris
.
algebra
Require
Import
gmap
.
From
iris
.
proofmode
Require
Import
invariant
s
.
From
iris
.
proofmode
Require
Import
tactic
s
.
Import
uPred
.
(* The CMRA we need. *)
...
...
program_logic/boxes.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
pviewshif
ts
.
From
iris
.
program_logic
Require
Export
invarian
ts
.
From
iris
.
algebra
Require
Import
auth
gmap
agree
upred_big_op
.
From
iris
.
proofmode
Require
Import
tactics
invariants
.
From
iris
.
proofmode
Require
Import
tactics
.
Import
uPred
.
(** The CMRAs we need. *)
...
...
program_logic/cancelable_invariants.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
invariants
.
From
iris
.
algebra
Require
Export
frac
.
From
iris
.
proofmode
Require
Import
invariants
tactics
.
From
iris
.
proofmode
Require
Import
tactics
.
Import
uPred
.
Class
cinvG
Σ
:
=
cinv_inG
:
>
inG
Σ
fracR
.
...
...
program_logic/ectx_lifting.v
View file @
afae72fd
(** Some derived lemmas for ectx-based languages *)
From
iris
.
program_logic
Require
Export
ectx_language
weakestpre
lifting
.
From
iris
.
program_logic
Require
Import
ownership
.
From
iris
.
proofmode
Require
Import
weakestpre
.
From
iris
.
proofmode
Require
Import
tactics
.
Section
wp
.
Context
{
expr
val
ectx
state
}
{
Λ
:
EctxLanguage
expr
val
ectx
state
}.
...
...
program_logic/ghost_ownership.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
model
.
From
iris
.
algebra
Require
Import
iprod
gmap
.
From
iris
.
proofmode
Require
Import
classes
.
Import
uPred
.
(** The class [inG Σ A] expresses that the CMRA [A] is in the list of functors
...
...
@@ -145,3 +146,16 @@ Proof.
-
apply
cmra_transport_valid
,
ucmra_unit_valid
.
-
intros
x
;
destruct
inG_prf
.
by
rewrite
left_id
.
Qed
.
(** Proofmode class instances *)
Section
proofmode_classes
.
Context
`
{
inG
Σ
A
}.
Implicit
Types
a
b
:
A
.
Global
Instance
into_and_own
p
γ
a
b1
b2
:
IntoOp
a
b1
b2
→
IntoAnd
p
(
own
γ
a
)
(
own
γ
b1
)
(
own
γ
b2
).
Proof
.
intros
.
apply
mk_into_and_sep
.
by
rewrite
(
into_op
a
)
own_op
.
Qed
.
Global
Instance
from_sep_own
γ
a
b1
b2
:
FromOp
a
b1
b2
→
FromSep
(
own
γ
a
)
(
own
γ
b1
)
(
own
γ
b2
).
Proof
.
intros
.
by
rewrite
/
FromSep
-
own_op
from_op
.
Qed
.
End
proofmode_classes
.
program_logic/hoare.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
weakestpre
viewshifts
.
From
iris
.
proofmode
Require
Import
weakestpre
.
From
iris
.
proofmode
Require
Import
tactics
.
Definition
ht
`
{
irisG
Λ
Σ
}
(
E
:
coPset
)
(
P
:
iProp
Σ
)
(
e
:
expr
Λ
)
(
Φ
:
val
Λ
→
iProp
Σ
)
:
iProp
Σ
:
=
...
...
program_logic/invariants.v
View file @
afae72fd
...
...
@@ -2,7 +2,7 @@ From iris.program_logic Require Export pviewshifts.
From
iris
.
program_logic
Require
Export
namespaces
.
From
iris
.
program_logic
Require
Import
ownership
.
From
iris
.
algebra
Require
Import
gmap
.
From
iris
.
proofmode
Require
Import
pviewshift
s
.
From
iris
.
proofmode
Require
Import
tactics
coq_tactics
intro_pattern
s
.
Import
uPred
.
(** Derived forms and lemmas about them. *)
...
...
@@ -61,3 +61,29 @@ Proof.
iIntros
"!==> {$HP} HP"
.
iApply
"Hclose"
;
auto
.
Qed
.
End
inv
.
Tactic
Notation
"iInvCore"
constr
(
N
)
"as"
tactic
(
tac
)
constr
(
Hclose
)
:
=
let
Htmp
:
=
iFresh
in
let
patback
:
=
intro_pat
.
parse_one
Hclose
in
let
pat
:
=
constr
:
(
IList
[[
IName
Htmp
;
patback
]])
in
iVs
(
inv_open
_
N
with
"[#]"
)
as
pat
;
[
idtac
|
iAssumption
||
fail
"iInv: invariant"
N
"not found"
|
idtac
]
;
[
solve_ndisj
||
match
goal
with
|-
?P
=>
fail
"iInv: cannot solve"
P
end
|
tac
Htmp
].
Tactic
Notation
"iInv"
constr
(
N
)
"as"
constr
(
pat
)
constr
(
Hclose
)
:
=
iInvCore
N
as
(
fun
H
=>
iDestruct
H
as
pat
)
Hclose
.
Tactic
Notation
"iInv"
constr
(
N
)
"as"
"("
simple_intropattern
(
x1
)
")"
constr
(
pat
)
constr
(
Hclose
)
:
=
iInvCore
N
as
(
fun
H
=>
iDestruct
H
as
(
x1
)
pat
)
Hclose
.
Tactic
Notation
"iInv"
constr
(
N
)
"as"
"("
simple_intropattern
(
x1
)
simple_intropattern
(
x2
)
")"
constr
(
pat
)
constr
(
Hclose
)
:
=
iInvCore
N
as
(
fun
H
=>
iDestruct
H
as
(
x1
x2
)
pat
)
Hclose
.
Tactic
Notation
"iInv"
constr
(
N
)
"as"
"("
simple_intropattern
(
x1
)
simple_intropattern
(
x2
)
simple_intropattern
(
x3
)
")"
constr
(
pat
)
constr
(
Hclose
)
:
=
iInvCore
N
as
(
fun
H
=>
iDestruct
H
as
(
x1
x2
x3
)
pat
)
Hclose
.
Tactic
Notation
"iInv"
constr
(
N
)
"as"
"("
simple_intropattern
(
x1
)
simple_intropattern
(
x2
)
simple_intropattern
(
x3
)
simple_intropattern
(
x4
)
")"
constr
(
pat
)
constr
(
Hclose
)
:
=
iInvCore
N
as
(
fun
H
=>
iDestruct
H
as
(
x1
x2
x3
x4
)
pat
)
Hclose
.
program_logic/lifting.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
weakestpre
.
From
iris
.
program_logic
Require
Import
ownership
.
From
iris
.
algebra
Require
Export
upred_big_op
.
From
iris
.
proofmode
Require
Import
pviewshift
s
.
From
iris
.
proofmode
Require
Import
tactic
s
.
Section
lifting
.
Context
`
{
irisG
Λ
Σ
}.
...
...
program_logic/ownership.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
iris
.
From
iris
.
algebra
Require
Import
gmap
auth
agree
gset
coPset
upred_big_op
.
From
iris
.
proofmode
Require
Import
ghost_ownership
tactics
.
From
iris
.
proofmode
Require
Import
tactics
.
Definition
invariant_unfold
{
Σ
}
(
P
:
iProp
Σ
)
:
agree
(
later
(
iPreProp
Σ
))
:
=
to_agree
(
Next
(
iProp_unfold
P
)).
...
...
program_logic/pviewshifts.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
iris
.
From
iris
.
program_logic
Require
Import
ownership
.
From
iris
.
algebra
Require
Import
upred_big_op
gmap
.
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
proofmode
Require
Import
tactics
classes
.
Import
uPred
.
Program
Definition
pvs_def
`
{
irisG
Λ
Σ
}
...
...
@@ -136,3 +136,54 @@ Proof.
intros
P1
P2
HP
Q1
Q2
HQ
.
by
rewrite
HP
HQ
-
pvs_sep
.
Qed
.
End
pvs
.
(** Proofmode class instances *)
Section
proofmode_classes
.
Context
`
{
irisG
Λ
Σ
}.
Implicit
Types
P
Q
:
iProp
Σ
.
Global
Instance
from_pure_pvs
E
P
φ
:
FromPure
P
φ
→
FromPure
(|={
E
}=>
P
)
φ
.
Proof
.
rewrite
/
FromPure
.
intros
<-.
apply
pvs_intro
.
Qed
.
Global
Instance
from_assumption_pvs
E
p
P
Q
:
FromAssumption
p
P
(|=
r
=>
Q
)
→
FromAssumption
p
P
(|={
E
}=>
Q
)%
I
.
Proof
.
rewrite
/
FromAssumption
=>->.
apply
rvs_pvs
.
Qed
.
Global
Instance
into_wand_pvs
E1
E2
R
P
Q
:
IntoWand
R
P
Q
→
IntoWand
R
(|={
E1
,
E2
}=>
P
)
(|={
E1
,
E2
}=>
Q
)
|
100
.
Proof
.
rewrite
/
IntoWand
=>->.
apply
wand_intro_l
.
by
rewrite
pvs_wand_r
.
Qed
.
Global
Instance
from_sep_pvs
E
P
Q1
Q2
:
FromSep
P
Q1
Q2
→
FromSep
(|={
E
}=>
P
)
(|={
E
}=>
Q1
)
(|={
E
}=>
Q2
).
Proof
.
rewrite
/
FromSep
=><-.
apply
pvs_sep
.
Qed
.
Global
Instance
or_split_pvs
E1
E2
P
Q1
Q2
:
FromOr
P
Q1
Q2
→
FromOr
(|={
E1
,
E2
}=>
P
)
(|={
E1
,
E2
}=>
Q1
)
(|={
E1
,
E2
}=>
Q2
).
Proof
.
rewrite
/
FromOr
=><-.
apply
or_elim
;
apply
pvs_mono
;
auto
with
I
.
Qed
.
Global
Instance
exists_split_pvs
{
A
}
E1
E2
P
(
Φ
:
A
→
iProp
Σ
)
:
FromExist
P
Φ
→
FromExist
(|={
E1
,
E2
}=>
P
)
(
λ
a
,
|={
E1
,
E2
}=>
Φ
a
)%
I
.
Proof
.
rewrite
/
FromExist
=><-.
apply
exist_elim
=>
a
.
by
rewrite
-(
exist_intro
a
).
Qed
.
Global
Instance
frame_pvs
E1
E2
R
P
Q
:
Frame
R
P
Q
→
Frame
R
(|={
E1
,
E2
}=>
P
)
(|={
E1
,
E2
}=>
Q
).
Proof
.
rewrite
/
Frame
=><-.
by
rewrite
pvs_frame_l
.
Qed
.
Global
Instance
is_except_last_pvs
E1
E2
P
:
IsExceptLast
(|={
E1
,
E2
}=>
P
).
Proof
.
by
rewrite
/
IsExceptLast
except_last_pvs
.
Qed
.
Global
Instance
from_vs_pvs
E
P
:
FromVs
(|={
E
}=>
P
)
P
.
Proof
.
by
rewrite
/
FromVs
-
rvs_pvs
.
Qed
.
Global
Instance
elim_vs_rvs_pvs
E1
E2
P
Q
:
ElimVs
(|=
r
=>
P
)
P
(|={
E1
,
E2
}=>
Q
)
(|={
E1
,
E2
}=>
Q
).
Proof
.
by
rewrite
/
ElimVs
(
rvs_pvs
E1
)
pvs_frame_r
wand_elim_r
pvs_trans
.
Qed
.
Global
Instance
elim_vs_pvs_pvs
E1
E2
E3
P
Q
:
ElimVs
(|={
E1
,
E2
}=>
P
)
P
(|={
E1
,
E3
}=>
Q
)
(|={
E2
,
E3
}=>
Q
).
Proof
.
by
rewrite
/
ElimVs
pvs_frame_r
wand_elim_r
pvs_trans
.
Qed
.
End
proofmode_classes
.
Hint
Extern
2
(
coq_tactics
.
of_envs
_
⊢
_
)
=>
match
goal
with
|-
_
⊢
|={
_
}=>
_
=>
iVsIntro
end
.
program_logic/sts.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
pviewshif
ts
.
From
iris
.
program_logic
Require
Export
invarian
ts
.
From
iris
.
algebra
Require
Export
sts
.
From
iris
.
proofmode
Require
Import
invariant
s
.
From
iris
.
proofmode
Require
Import
tactic
s
.
Import
uPred
.
(** The CMRA we need. *)
...
...
program_logic/thread_local.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
invariants
.
From
iris
.
algebra
Require
Export
gmap
gset
coPset
.
From
iris
.
proofmode
Require
Import
invariants
tactics
.
From
iris
.
proofmode
Require
Import
tactics
.
Import
uPred
.
Definition
tlN
:
namespace
:
=
nroot
.@
"tl"
.
...
...
program_logic/viewshifts.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
pviewshif
ts
.
From
iris
.
proofmode
Require
Import
pviewshifts
invariant
s
.
From
iris
.
program_logic
Require
Export
invarian
ts
.
From
iris
.
proofmode
Require
Import
tactic
s
.
Definition
vs
`
{
irisG
Λ
Σ
}
(
E1
E2
:
coPset
)
(
P
Q
:
iProp
Σ
)
:
iProp
Σ
:
=
(
□
(
P
→
|={
E1
,
E2
}=>
Q
))%
I
.
...
...
program_logic/weakestpre.v
View file @
afae72fd
...
...
@@ -2,7 +2,7 @@ From iris.program_logic Require Export pviewshifts.
From
iris
.
program_logic
Require
Import
ownership
.
From
iris
.
algebra
Require
Import
upred_big_op
.
From
iris
.
prelude
Require
Export
coPset
.
From
iris
.
proofmode
Require
Import
tactics
pviewshift
s
.
From
iris
.
proofmode
Require
Import
tactics
classe
s
.
Import
uPred
.
Definition
wp_pre
`
{
irisG
Λ
Σ
}
...
...
@@ -211,3 +211,32 @@ Lemma wp_wand_r E e Φ Ψ :
WP
e
@
E
{{
Φ
}}
★
(
∀
v
,
Φ
v
-
★
Ψ
v
)
⊢
WP
e
@
E
{{
Ψ
}}.
Proof
.
by
rewrite
comm
wp_wand_l
.
Qed
.
End
wp
.
(** Proofmode class instances *)
Section
proofmode_classes
.
Context
`
{
irisG
Λ
Σ
}.
Implicit
Types
P
Q
:
iProp
Σ
.
Implicit
Types
Φ
:
val
Λ
→
iProp
Σ
.
Global
Instance
frame_wp
E
e
R
Φ
Ψ
:
(
∀
v
,
Frame
R
(
Φ
v
)
(
Ψ
v
))
→
Frame
R
(
WP
e
@
E
{{
Φ
}})
(
WP
e
@
E
{{
Ψ
}}).
Proof
.
rewrite
/
Frame
=>
HR
.
rewrite
wp_frame_l
.
apply
wp_mono
,
HR
.
Qed
.
Global
Instance
is_except_last_wp
E
e
Φ
:
IsExceptLast
(
WP
e
@
E
{{
Φ
}}).
Proof
.
by
rewrite
/
IsExceptLast
-{
2
}
pvs_wp
-
except_last_pvs
-
pvs_intro
.
Qed
.
Global
Instance
elim_vs_rvs_wp
E
e
P
Φ
:
ElimVs
(|=
r
=>
P
)
P
(
WP
e
@
E
{{
Φ
}})
(
WP
e
@
E
{{
Φ
}}).
Proof
.
by
rewrite
/
ElimVs
(
rvs_pvs
E
)
pvs_frame_r
wand_elim_r
pvs_wp
.
Qed
.
Global
Instance
elim_vs_pvs_wp
E
e
P
Φ
:
ElimVs
(|={
E
}=>
P
)
P
(
WP
e
@
E
{{
Φ
}})
(
WP
e
@
E
{{
Φ
}}).
Proof
.
by
rewrite
/
ElimVs
pvs_frame_r
wand_elim_r
pvs_wp
.
Qed
.
(* lower precedence, if possible, it should always pick elim_vs_pvs_wp *)
Global
Instance
elim_vs_pvs_wp_atomic
E1
E2
e
P
Φ
:
atomic
e
→
ElimVs
(|={
E1
,
E2
}=>
P
)
P
(
WP
e
@
E1
{{
Φ
}})
(
WP
e
@
E2
{{
v
,
|={
E2
,
E1
}=>
Φ
v
}})%
I
|
100
.
Proof
.
intros
.
by
rewrite
/
ElimVs
pvs_frame_r
wand_elim_r
wp_atomic
.
Qed
.
End
proofmode_classes
.
proofmode/ghost_ownership.v
deleted
100644 → 0
View file @
5f519f56
From
iris
.
proofmode
Require
Import
coq_tactics
.
From
iris
.
proofmode
Require
Export
tactics
.
From
iris
.
program_logic
Require
Export
ghost_ownership
.
Section
ghost
.
Context
`
{
inG
Σ
A
}.
Implicit
Types
a
b
:
A
.
Global
Instance
into_and_own
p
γ
a
b1
b2
:
IntoOp
a
b1
b2
→
IntoAnd
p
(
own
γ
a
)
(
own
γ
b1
)
(
own
γ
b2
).
Proof
.
intros
.
apply
mk_into_and_sep
.
by
rewrite
(
into_op
a
)
own_op
.
Qed
.
Global
Instance
from_sep_own
γ
a
b1
b2
:
FromOp
a
b1
b2
→
FromSep
(
own
γ
a
)
(
own
γ
b1
)
(
own
γ
b2
).
Proof
.
intros
.
by
rewrite
/
FromSep
-
own_op
from_op
.
Qed
.
End
ghost
.
proofmode/invariants.v
deleted
100644 → 0
View file @
5f519f56
From
iris
.
proofmode
Require
Export
tactics
pviewshifts
.
From
iris
.
program_logic
Require
Export
invariants
.
From
iris
.
proofmode
Require
Import
coq_tactics
intro_patterns
.
Tactic
Notation
"iInvCore"
constr
(
N
)
"as"
tactic
(
tac
)
constr
(
Hclose
)
:
=
let
Htmp
:
=
iFresh
in
let
patback
:
=
intro_pat
.
parse_one
Hclose
in
let
pat
:
=
constr
:
(
IList
[[
IName
Htmp
;
patback
]])
in
iVs
(
inv_open
_
N
with
"[#]"
)
as
pat
;
[
idtac
|
iAssumption
||
fail
"iInv: invariant"
N
"not found"
|
idtac
]
;
[
solve_ndisj
||
match
goal
with
|-
?P
=>
fail
"iInv: cannot solve"
P
end
|
tac
Htmp
].
Tactic
Notation
"iInv"
constr
(
N
)
"as"
constr
(
pat
)
constr
(
Hclose
)
:
=
iInvCore
N
as
(
fun
H
=>
iDestruct
H
as
pat
)
Hclose
.
Tactic
Notation
"iInv"
constr
(
N
)
"as"
"("
simple_intropattern
(
x1
)
")"
constr
(
pat
)
constr
(
Hclose
)
:
=
iInvCore
N
as
(
fun
H
=>
iDestruct
H
as
(
x1
)
pat
)
Hclose
.
Tactic
Notation
"iInv"
constr
(
N
)
"as"
"("
simple_intropattern
(
x1
)
simple_intropattern
(
x2
)
")"
constr
(
pat
)
constr
(
Hclose
)
:
=
iInvCore
N
as
(
fun
H
=>
iDestruct
H
as
(
x1
x2
)
pat
)
Hclose
.
Tactic
Notation
"iInv"
constr
(
N
)
"as"
"("
simple_intropattern
(
x1
)
simple_intropattern
(
x2
)
simple_intropattern
(
x3
)
")"
constr
(
pat
)
constr
(
Hclose
)
:
=
iInvCore
N
as
(
fun
H
=>
iDestruct
H
as
(
x1
x2
x3
)
pat
)
Hclose
.
Tactic
Notation
"iInv"
constr
(
N
)
"as"
"("
simple_intropattern
(
x1
)
simple_intropattern
(
x2
)
simple_intropattern
(
x3
)
simple_intropattern
(
x4
)
")"
constr
(
pat
)
constr
(
Hclose
)
:
=
iInvCore
N
as
(
fun
H
=>
iDestruct
H
as
(
x1
x2
x3
x4
)
pat
)
Hclose
.
proofmode/pviewshifts.v
deleted
100644 → 0
View file @
5f519f56
From
iris
.
proofmode
Require
Import
coq_tactics
.
From
iris
.
proofmode
Require
Export
tactics
ghost_ownership
.
From
iris
.
program_logic
Require
Export
pviewshifts
.
Import
uPred
.
Section
pvs
.
Context
`
{
irisG
Λ
Σ
}.
Implicit
Types
P
Q
:
iProp
Σ
.
Global
Instance
from_pure_pvs
E
P
φ
:
FromPure
P
φ
→
FromPure
(|={
E
}=>
P
)
φ
.
Proof
.
rewrite
/
FromPure
.
intros
<-.
apply
pvs_intro
.
Qed
.
Global
Instance
from_assumption_pvs
E
p
P
Q
:
FromAssumption
p
P
(|=
r
=>
Q
)
→
FromAssumption
p
P
(|={
E
}=>
Q
)%
I
.
Proof
.
rewrite
/
FromAssumption
=>->.
apply
rvs_pvs
.
Qed
.
Global
Instance
into_wand_pvs
E1
E2
R
P
Q
:
IntoWand
R
P
Q
→
IntoWand
R
(|={
E1
,
E2
}=>
P
)
(|={
E1
,
E2
}=>
Q
)
|
100
.
Proof
.
rewrite
/
IntoWand
=>->.
apply
wand_intro_l
.
by
rewrite
pvs_wand_r
.
Qed
.
Global
Instance
from_sep_pvs
E
P
Q1
Q2
:
FromSep
P
Q1
Q2
→
FromSep
(|={
E
}=>
P
)
(|={
E
}=>
Q1
)
(|={
E
}=>
Q2
).
Proof
.
rewrite
/
FromSep
=><-.
apply
pvs_sep
.
Qed
.
Global
Instance
or_split_pvs
E1
E2
P
Q1
Q2
:
FromOr
P
Q1
Q2
→
FromOr
(|={
E1
,
E2
}=>
P
)
(|={
E1
,
E2
}=>
Q1
)
(|={
E1
,
E2
}=>
Q2
).
Proof
.
rewrite
/
FromOr
=><-.
apply
or_elim
;
apply
pvs_mono
;
auto
with
I
.
Qed
.
Global
Instance
exists_split_pvs
{
A
}
E1
E2
P
(
Φ
:
A
→
iProp
Σ
)
:
FromExist
P
Φ
→
FromExist
(|={
E1
,
E2
}=>
P
)
(
λ
a
,
|={
E1
,
E2
}=>
Φ
a
)%
I
.
Proof
.
rewrite
/
FromExist
=><-.
apply
exist_elim
=>
a
.
by
rewrite
-(
exist_intro
a
).
Qed
.
Global
Instance
frame_pvs
E1
E2
R
P
Q
:
Frame
R
P
Q
→
Frame
R
(|={
E1
,
E2
}=>
P
)
(|={
E1
,
E2
}=>
Q
).
Proof
.
rewrite
/
Frame
=><-.
by
rewrite
pvs_frame_l
.
Qed
.
Global
Instance
is_except_last_pvs
E1
E2
P
:
IsExceptLast
(|={
E1
,
E2
}=>
P
).
Proof
.
by
rewrite
/
IsExceptLast
except_last_pvs
.
Qed
.
Global
Instance
from_vs_pvs
E
P
:
FromVs
(|={
E
}=>
P
)
P
.
Proof
.
by
rewrite
/
FromVs
-
rvs_pvs
.
Qed
.
Global
Instance
elim_vs_rvs_pvs
E1
E2
P
Q
:
ElimVs
(|=
r
=>
P
)
P
(|={
E1
,
E2
}=>
Q
)
(|={
E1
,
E2
}=>
Q
)
|
2
.
Proof
.
by
rewrite
/
ElimVs
(
rvs_pvs
E1
)
pvs_frame_r
wand_elim_r
pvs_trans
.
Qed
.
Global
Instance
elim_vs_pvs_pvs
E1
E2
E3
P
Q
:
ElimVs
(|={
E1
,
E2
}=>
P
)
P
(|={
E1
,
E3
}=>
Q
)
(|={
E2
,
E3
}=>
Q
)
|
1
.
Proof
.
by
rewrite
/
ElimVs
pvs_frame_r
wand_elim_r
pvs_trans
.
Qed
.
End
pvs
.
Hint
Extern
2
(
of_envs
_
⊢
_
)
=>
match
goal
with
|-
_
⊢
|={
_
}=>
_
=>
iVsIntro
end
.
proofmode/weakestpre.v
deleted
100644 → 0
View file @
5f519f56
From
iris
.
proofmode
Require
Export
classes
pviewshifts
.
From
iris
.
proofmode
Require
Import
coq_tactics
.
From
iris
.
program_logic
Require
Export
weakestpre
.
Import
uPred
.
Section
weakestpre
.
Context
`
{
irisG
Λ
Σ
}.
Implicit
Types
P
Q
:
iProp
Σ
.
Implicit
Types
Φ
:
val
Λ
→
iProp
Σ
.
Global
Instance
frame_wp
E
e
R
Φ
Ψ
:
(
∀
v
,
Frame
R
(
Φ
v
)
(
Ψ
v
))
→
Frame
R
(
WP
e
@
E
{{
Φ
}})
(
WP
e
@
E
{{
Ψ
}}).
Proof
.
rewrite
/
Frame
=>
HR
.
rewrite
wp_frame_l
.
apply
wp_mono
,
HR
.
Qed
.
Global
Instance
is_except_last_wp
E
e
Φ
:
IsExceptLast
(
WP
e
@
E
{{
Φ
}}).
Proof
.
by
rewrite
/
IsExceptLast
-{
2
}
pvs_wp
-
except_last_pvs
-
pvs_intro
.
Qed
.
Global
Instance
elim_vs_rvs_wp
E
e
P
Φ
:
ElimVs
(|=
r
=>
P
)
P
(
WP
e
@
E
{{
Φ
}})
(
WP
e
@
E
{{
Φ
}})
|
2
.
Proof
.
by
rewrite
/
ElimVs
(
rvs_pvs
E
)
pvs_frame_r
wand_elim_r
pvs_wp
.
Qed
.
Global
Instance
elim_vs_pvs_wp
E
e
P
Φ
:
ElimVs
(|={
E
}=>
P
)
P
(
WP
e
@
E
{{
Φ
}})
(
WP
e
@
E
{{
Φ
}})
|
1
.
Proof
.
by
rewrite
/
ElimVs
pvs_frame_r
wand_elim_r
pvs_wp
.
Qed
.
(* lower precedence, if possible, it should always pick elim_vs_pvs_wp *)
Global
Instance
elim_vs_pvs_wp_atomic
E1
E2
e
P
Φ
:
atomic
e
→
ElimVs
(|={
E1
,
E2
}=>
P
)
P
(
WP
e
@
E1
{{
Φ
}})
(
WP
e
@
E2
{{
v
,
|={
E2
,
E1
}=>
Φ
v
}})%
I
|
100
.
Proof
.
intros
.
by
rewrite
/
ElimVs
pvs_frame_r
wand_elim_r
wp_atomic
.
Qed
.
End
weakestpre
.
tests/atomic.v
View file @
afae72fd
From
iris
.
program_logic
Require
Export
hoare
weakestpre
pviewshifts
ownership
.
From
iris
.
algebra
Require
Import
upred_big_op
.
From
iris
.
prelude
Require
Export
coPset
.
From
iris
.
proofmode
Require
Import
tactics
pviewshifts
weakestpre
.
From
iris
.
proofmode
Require
Import
tactics
.
Import
uPred
.
Section
atomic
.
...
...
@@ -42,7 +42,6 @@ Section atomic.
End
atomic
.
From
iris
.
heap_lang
Require
Export
lang
proofmode
notation
.
From
iris
.
proofmode
Require
Import
invariants
.
Section
incr
.
Context
`
{!
heapG
Σ
}
(
N
:
namespace
).
...
...
tests/counter.v
View file @
afae72fd
...
...
@@ -5,7 +5,7 @@ under max can be found in `heap_lang/lib/counter.v`. *)
From
iris
.
program_logic
Require
Export
weakestpre
.
From
iris
.
heap_lang
Require
Export
lang
.
From
iris
.
program_logic
Require
Export
hoare
.
From
iris
.
proofmode
Require
Import
invariants
tactics
.
From
iris
.
proofmode
Require
Import
tactics
.
From
iris
.
heap_lang
Require
Import
proofmode
notation
.
Import
uPred
.
...
...
tests/joining_existentials.v
View file @
afae72fd
...
...
@@ -3,7 +3,7 @@ From iris.heap_lang Require Export lang.
From
iris
.
algebra
Require
Import
excl
agree
csum
.
From
iris
.
heap_lang
.
lib
.
barrier
Require
Import
proof
specification
.
From
iris
.
heap_lang
Require
Import
notation
par
proofmode
.
From
iris
.
proofmode
Require
Import
invariant
s
.
From
iris
.
proofmode
Require
Import
tactic
s
.
Definition
one_shotR
(
Σ
:
gFunctors
)
(
F
:
cFunctor
)
:
=
csumR
(
exclR
unitC
)
(
agreeR
$
laterC
$
F
(
iPreProp
Σ
)).
...
...
tests/one_shot.v
View file @
afae72fd
...
...
@@ -2,7 +2,7 @@ From iris.program_logic Require Export weakestpre hoare.
From
iris
.
heap_lang
Require
Export
lang
.
From
iris
.
algebra
Require
Import
excl
dec_agree
csum
.
From
iris
.
heap_lang
Require
Import
assert
proofmode
notation
.
From
iris
.
proofmode
Require
Import
invariant
s
.