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
Ralf Jung
Iris
Commits
0ca74ec7
Commit
0ca74ec7
authored
May 18, 2021
by
Robbert Krebbers
Browse files
Remove useless scopes. Thanks to
!674
.
parent
0ca7041d
Changes
30
Hide whitespace changes
Inline
Side-by-side
iris/base_logic/algebra.v
View file @
0ca74ec7
...
...
@@ -10,7 +10,7 @@ Section upred.
Context
{
M
:
ucmra
}.
(* Force implicit argument M *)
Notation
"P ⊢ Q"
:
=
(
bi_entails
(
PROP
:
=
uPredI
M
)
P
%
I
Q
%
I
).
Notation
"P ⊢ Q"
:
=
(
bi_entails
(
PROP
:
=
uPredI
M
)
P
Q
).
Notation
"P ⊣⊢ Q"
:
=
(
equiv
(
A
:
=
uPredI
M
)
P
%
I
Q
%
I
).
Lemma
prod_validI
{
A
B
:
cmra
}
(
x
:
A
*
B
)
:
✓
x
⊣
⊢
✓
x
.
1
∧
✓
x
.
2
.
...
...
@@ -146,7 +146,7 @@ Section view.
Qed
.
Lemma
view_both_dfrac_validI_2
(
relI
:
uPred
M
)
dq
a
b
:
(
∀
n
(
x
:
M
),
relI
n
x
→
rel
n
a
b
)
→
⌜✓
dq
⌝
%
Qp
∧
relI
⊢
✓
(
●
V
{
dq
}
a
⋅
◯
V
b
:
view
rel
).
⌜✓
dq
⌝
∧
relI
⊢
✓
(
●
V
{
dq
}
a
⋅
◯
V
b
:
view
rel
).
Proof
.
intros
Hrel
.
uPred
.
unseal
.
split
=>
n
x
_
/=.
rewrite
/
uPred_holds
/=
view_both_dfrac_validN
.
by
move
=>
[?
/
Hrel
].
...
...
iris/base_logic/bupd_alt.v
View file @
0ca74ec7
...
...
@@ -8,7 +8,7 @@ Set Default Proof Using "Type*".
(** This file contains an alternative version of basic updates, that is
expression in terms of just the plain modality [■]. *)
Definition
bupd_alt
`
{
BiPlainly
PROP
}
(
P
:
PROP
)
:
PROP
:
=
(
∀
R
,
(
P
-
∗
■
R
)
-
∗
■
R
)%
I
.
∀
R
,
(
P
-
∗
■
R
)
-
∗
■
R
.
(** This definition is stated for any BI with a plain modality. The above
definition is akin to the continuation monad, where one should think of [■ R]
...
...
iris/base_logic/derived.v
View file @
0ca74ec7
...
...
@@ -15,7 +15,7 @@ Implicit Types P Q : uPred M.
Implicit
Types
A
:
Type
.
(* Force implicit argument M *)
Notation
"P ⊢ Q"
:
=
(
bi_entails
(
PROP
:
=
uPredI
M
)
P
%
I
Q
%
I
).
Notation
"P ⊢ Q"
:
=
(
bi_entails
(
PROP
:
=
uPredI
M
)
P
Q
).
Notation
"P ⊣⊢ Q"
:
=
(
equiv
(
A
:
=
uPredI
M
)
P
%
I
Q
%
I
).
(** Propers *)
...
...
@@ -24,7 +24,7 @@ Global Instance cmra_valid_proper {A : cmra} :
Proper
((
≡
)
==>
(
⊣
⊢
))
(@
uPred_cmra_valid
M
A
)
:
=
ne_proper
_
.
(** Own and valid derived *)
Lemma
persistently_cmra_valid_1
{
A
:
cmra
}
(
a
:
A
)
:
✓
a
⊢
<
pers
>
(
✓
a
:
uPred
M
).
Lemma
persistently_cmra_valid_1
{
A
:
cmra
}
(
a
:
A
)
:
✓
a
⊢
@{
uPredI
M
}
<
pers
>
(
✓
a
).
Proof
.
by
rewrite
{
1
}
plainly_cmra_valid_1
plainly_elim_persistently
.
Qed
.
Lemma
intuitionistically_ownM
(
a
:
M
)
:
CoreId
a
→
□
uPred_ownM
a
⊣
⊢
uPred_ownM
a
.
Proof
.
...
...
iris/base_logic/lib/boxes.v
View file @
0ca74ec7
...
...
@@ -292,7 +292,7 @@ Proof.
-
iMod
(
slice_delete_full
with
"Hslice1 Hbox"
)
as
(
P1
)
"(HQ1 & Heq1 & Hbox)"
;
try
done
.
iMod
(
slice_delete_full
with
"Hslice2 Hbox"
)
as
(
P2
)
"(HQ2 & Heq2 & Hbox)"
;
first
done
.
{
by
simplify_map_eq
.
}
iMod
(
slice_insert_full
_
_
_
_
(
Q1
∗
Q2
)
%
I
with
"[$HQ1 $HQ2] Hbox"
)
iMod
(
slice_insert_full
_
_
_
_
(
Q1
∗
Q2
)
with
"[$HQ1 $HQ2] Hbox"
)
as
(
γ
?)
"[#Hslice Hbox]"
;
first
done
.
iExists
γ
.
iIntros
"{$% $#} !>"
.
iNext
.
iApply
(
internal_eq_rewrite_contractive
_
_
(
box
_
_
)
with
"[Heq1 Heq2] Hbox"
).
...
...
iris/base_logic/lib/gen_inv_heap.v
View file @
0ca74ec7
...
...
@@ -53,9 +53,9 @@ Section definitions.
Context
`
{!
invG
Σ
,
!
gen_heapG
L
V
Σ
,
gG
:
!
inv_heapG
L
V
Σ
}.
Definition
inv_heap_inv_P
:
iProp
Σ
:
=
(
∃
h
:
gmap
L
(
V
*
(
V
-
d
>
PropO
)),
own
(
inv_heap_name
gG
)
(
●
to_inv_heap
h
)
∗
[
∗
map
]
l
↦
p
∈
h
,
⌜
p
.
2
p
.
1
⌝
∗
l
↦
p
.
1
)%
I
.
∃
h
:
gmap
L
(
V
*
(
V
-
d
>
PropO
)),
own
(
inv_heap_name
gG
)
(
●
to_inv_heap
h
)
∗
[
∗
map
]
l
↦
p
∈
h
,
⌜
p
.
2
p
.
1
⌝
∗
l
↦
p
.
1
.
Definition
inv_heap_inv
:
iProp
Σ
:
=
inv
inv_heapN
inv_heap_inv_P
.
...
...
iris/base_logic/lib/na_invariants.v
View file @
0ca74ec7
...
...
@@ -22,8 +22,8 @@ Section defs.
own
p
(
CoPset
E
,
GSet
∅
).
Definition
na_inv
(
p
:
na_inv_pool_name
)
(
N
:
namespace
)
(
P
:
iProp
Σ
)
:
iProp
Σ
:
=
(
∃
i
,
⌜
i
∈
(
↑
N
:
coPset
)
⌝
∧
inv
N
(
P
∗
own
p
(
CoPset
∅
,
GSet
{[
i
]})
∨
na_own
p
{[
i
]})
)%
I
.
∃
i
,
⌜
i
∈
(
↑
N
:
coPset
)
⌝
∧
inv
N
(
P
∗
own
p
(
CoPset
∅
,
GSet
{[
i
]})
∨
na_own
p
{[
i
]}).
End
defs
.
Global
Instance
:
Params
(@
na_inv
)
3
:
=
{}.
...
...
iris/base_logic/lib/proph_map.v
View file @
0ca74ec7
...
...
@@ -43,8 +43,8 @@ Section definitions.
map_Forall
(
λ
p
vs
,
vs
=
proph_list_resolves
pvs
p
)
R
.
Definition
proph_map_interp
pvs
(
ps
:
gset
P
)
:
iProp
Σ
:
=
(
∃
R
,
⌜
proph_resolves_in_list
R
pvs
∧
dom
(
gset
_
)
R
⊆
ps
⌝
∗
ghost_map_auth
(
proph_map_name
pG
)
1
R
)%
I
.
∃
R
,
⌜
proph_resolves_in_list
R
pvs
∧
dom
(
gset
_
)
R
⊆
ps
⌝
∗
ghost_map_auth
(
proph_map_name
pG
)
1
R
.
Definition
proph_def
(
p
:
P
)
(
vs
:
list
V
)
:
iProp
Σ
:
=
p
↪
[
proph_map_name
pG
]
vs
.
...
...
iris/base_logic/lib/wsat.v
View file @
0ca74ec7
...
...
@@ -35,7 +35,6 @@ Definition invariant_unfold {Σ} (P : iProp Σ) : later (iProp Σ) :=
Next
P
.
Definition
ownI
`
{!
invG
Σ
}
(
i
:
positive
)
(
P
:
iProp
Σ
)
:
iProp
Σ
:
=
own
invariant_name
(
gmap_view_frag
i
DfracDiscarded
(
invariant_unfold
P
)).
Global
Arguments
ownI
{
_
_
}
_
_
%
I
.
Typeclasses
Opaque
ownI
.
Global
Instance
:
Params
(@
invariant_unfold
)
1
:
=
{}.
Global
Instance
:
Params
(@
ownI
)
3
:
=
{}.
...
...
iris/bi/big_op.v
View file @
0ca74ec7
...
...
@@ -718,7 +718,7 @@ Section sep_list2.
Lemma
big_sepL2_later_1
`
{
BiAffine
PROP
}
Φ
l1
l2
:
(
▷
[
∗
list
]
k
↦
y1
;
y2
∈
l1
;
l2
,
Φ
k
y1
y2
)
⊢
◇
[
∗
list
]
k
↦
y1
;
y2
∈
l1
;
l2
,
▷
Φ
k
y1
y2
.
Proof
.
rewrite
!
big_sepL2_alt
later_and
big_sepL_later
(
timeless
⌜
_
⌝
%
I
).
rewrite
!
big_sepL2_alt
later_and
big_sepL_later
(
timeless
⌜
_
⌝
).
rewrite
except_0_and
.
auto
using
and_mono
,
except_0_intro
.
Qed
.
...
...
@@ -1189,7 +1189,7 @@ Section map.
□
(
∀
k
x
,
⌜
m
!!
k
=
Some
x
⌝
→
Φ
k
x
)
⊢
[
∗
map
]
k
↦
x
∈
m
,
Φ
k
x
.
Proof
.
revert
Φ
.
induction
m
as
[|
i
x
m
?
IH
]
using
map_ind
=>
Φ
.
{
by
rewrite
(
affine
(
□
_
)
%
I
)
big_sepM_empty
.
}
{
by
rewrite
(
affine
(
□
_
))
big_sepM_empty
.
}
rewrite
big_sepM_insert
//
intuitionistically_sep_dup
.
f_equiv
.
-
rewrite
(
forall_elim
i
)
(
forall_elim
x
)
lookup_insert
.
by
rewrite
pure_True
//
True_impl
intuitionistically_elim
.
...
...
@@ -1597,11 +1597,11 @@ Section map2.
⊣
⊢
([
∗
map
]
k
↦
y1
;
y2
∈
m1
;
m2
,
Φ
k
y1
y2
)
∗
([
∗
map
]
k
↦
y1
;
y2
∈
m1
;
m2
,
Ψ
k
y1
y2
).
Proof
.
rewrite
big_sepM2_eq
/
big_sepM2_def
.
rewrite
-{
1
}(
and_
idem
⌜
∀
k
:
K
,
is_Some
(
m1
!!
k
)
↔
is_Some
(
m2
!!
k
)
⌝
%
I
).
rewrite
-
and_
assoc
.
rewrite
-{
1
}(
idem
p
bi_and
⌜
∀
k
:
K
,
is_Some
(
m1
!!
k
)
↔
is_Some
(
m2
!!
k
)
⌝
%
I
).
rewrite
-
assoc
.
rewrite
!
persistent_and_affinely_sep_l
/=.
rewrite
-
sep_
assoc
.
apply
sep_proper
=>//.
rewrite
sep_
assoc
(
sep_
comm
_
(<
affine
>
_
)%
I
)
-
sep_
assoc
.
rewrite
-
assoc
.
apply
sep_proper
=>//.
rewrite
assoc
(
comm
_
_
(<
affine
>
_
)%
I
)
-
assoc
.
apply
sep_proper
=>//.
apply
big_sepM_sep
.
Qed
.
...
...
@@ -1694,7 +1694,7 @@ Section map2.
(
▷
[
∗
map
]
k
↦
x1
;
x2
∈
m1
;
m2
,
Φ
k
x1
x2
)
⊢
◇
([
∗
map
]
k
↦
x1
;
x2
∈
m1
;
m2
,
▷
Φ
k
x1
x2
).
Proof
.
rewrite
big_sepM2_eq
/
big_sepM2_def
later_and
(
timeless
⌜
_
⌝
%
I
).
rewrite
big_sepM2_eq
/
big_sepM2_def
later_and
(
timeless
⌜
_
⌝
).
rewrite
big_sepM_later
except_0_and
.
auto
using
and_mono_r
,
except_0_intro
.
Qed
.
...
...
@@ -1702,7 +1702,7 @@ Section map2.
([
∗
map
]
k
↦
x1
;
x2
∈
m1
;
m2
,
▷
Φ
k
x1
x2
)
⊢
▷
[
∗
map
]
k
↦
x1
;
x2
∈
m1
;
m2
,
Φ
k
x1
x2
.
Proof
.
rewrite
big_sepM2_eq
/
big_sepM2_def
later_and
-(
later_intro
⌜
_
⌝
%
I
).
rewrite
big_sepM2_eq
/
big_sepM2_def
later_and
-(
later_intro
⌜
_
⌝
).
apply
and_mono_r
.
by
rewrite
big_opM_commute
.
Qed
.
...
...
@@ -1904,7 +1904,7 @@ Section gset.
□
(
∀
x
,
⌜
x
∈
X
⌝
→
Φ
x
)
⊢
[
∗
set
]
x
∈
X
,
Φ
x
.
Proof
.
revert
Φ
.
induction
X
as
[|
x
X
?
IH
]
using
set_ind_L
=>
Φ
.
{
by
rewrite
(
affine
(
□
_
)
%
I
)
big_sepS_empty
.
}
{
by
rewrite
(
affine
(
□
_
))
big_sepS_empty
.
}
rewrite
intuitionistically_sep_dup
big_sepS_insert
//.
f_equiv
.
-
rewrite
(
forall_elim
x
)
pure_True
?True_impl
;
last
set_solver
.
by
rewrite
intuitionistically_elim
.
...
...
@@ -2100,7 +2100,7 @@ Section gmultiset.
□
(
∀
x
,
⌜
x
∈
X
⌝
→
Φ
x
)
⊢
[
∗
mset
]
x
∈
X
,
Φ
x
.
Proof
.
revert
Φ
.
induction
X
as
[|
x
X
IH
]
using
gmultiset_ind
=>
Φ
.
{
by
rewrite
(
affine
(
□
_
)
%
I
)
big_sepMS_empty
.
}
{
by
rewrite
(
affine
(
□
_
))
big_sepMS_empty
.
}
rewrite
intuitionistically_sep_dup
big_sepMS_disj_union
.
rewrite
big_sepMS_singleton
.
f_equiv
.
-
rewrite
(
forall_elim
x
)
pure_True
?True_impl
;
last
multiset_solver
.
...
...
iris/bi/derived_connectives.v
View file @
0ca74ec7
...
...
@@ -2,13 +2,13 @@ From iris.algebra Require Import monoid.
From
iris
.
bi
Require
Export
interface
.
From
iris
.
prelude
Require
Import
options
.
Definition
bi_iff
{
PROP
:
bi
}
(
P
Q
:
PROP
)
:
PROP
:
=
(
(
P
→
Q
)
∧
(
Q
→
P
)
)%
I
.
Definition
bi_iff
{
PROP
:
bi
}
(
P
Q
:
PROP
)
:
PROP
:
=
(
P
→
Q
)
∧
(
Q
→
P
).
Global
Arguments
bi_iff
{
_
}
_
%
I
_
%
I
:
simpl
never
.
Global
Instance
:
Params
(@
bi_iff
)
1
:
=
{}.
Infix
"↔"
:
=
bi_iff
:
bi_scope
.
Definition
bi_wand_iff
{
PROP
:
bi
}
(
P
Q
:
PROP
)
:
PROP
:
=
(
(
P
-
∗
Q
)
∧
(
Q
-
∗
P
)
)%
I
.
(
P
-
∗
Q
)
∧
(
Q
-
∗
P
).
Global
Arguments
bi_wand_iff
{
_
}
_
%
I
_
%
I
:
simpl
never
.
Global
Instance
:
Params
(@
bi_wand_iff
)
1
:
=
{}.
Infix
"∗-∗"
:
=
bi_wand_iff
:
bi_scope
.
...
...
@@ -19,7 +19,7 @@ Global Arguments persistent {_} _%I {_}.
Global
Hint
Mode
Persistent
+
!
:
typeclass_instances
.
Global
Instance
:
Params
(@
Persistent
)
1
:
=
{}.
Definition
bi_affinely
{
PROP
:
bi
}
(
P
:
PROP
)
:
PROP
:
=
(
emp
∧
P
)%
I
.
Definition
bi_affinely
{
PROP
:
bi
}
(
P
:
PROP
)
:
PROP
:
=
emp
∧
P
.
Global
Arguments
bi_affinely
{
_
}
_
%
I
:
simpl
never
.
Global
Instance
:
Params
(@
bi_affinely
)
1
:
=
{}.
Typeclasses
Opaque
bi_affinely
.
...
...
@@ -38,7 +38,7 @@ Class BiPositive (PROP : bi) :=
bi_positive
(
P
Q
:
PROP
)
:
<
affine
>
(
P
∗
Q
)
⊢
<
affine
>
P
∗
Q
.
Global
Hint
Mode
BiPositive
!
:
typeclass_instances
.
Definition
bi_absorbingly
{
PROP
:
bi
}
(
P
:
PROP
)
:
PROP
:
=
(
True
∗
P
)%
I
.
Definition
bi_absorbingly
{
PROP
:
bi
}
(
P
:
PROP
)
:
PROP
:
=
True
∗
P
.
Global
Arguments
bi_absorbingly
{
_
}
_
%
I
:
simpl
never
.
Global
Instance
:
Params
(@
bi_absorbingly
)
1
:
=
{}.
Typeclasses
Opaque
bi_absorbingly
.
...
...
@@ -88,13 +88,13 @@ Fixpoint bi_laterN {PROP : bi} (n : nat) (P : PROP) : PROP :=
match
n
with
|
O
=>
P
|
S
n'
=>
▷
▷
^
n'
P
end
%
I
end
where
"▷^ n P"
:
=
(
bi_laterN
n
P
)
:
bi_scope
.
Global
Arguments
bi_laterN
{
_
}
!
_
%
nat_scope
_
%
I
.
Global
Instance
:
Params
(@
bi_laterN
)
2
:
=
{}.
Notation
"▷? p P"
:
=
(
bi_laterN
(
Nat
.
b2n
p
)
P
)
:
bi_scope
.
Definition
bi_except_0
{
PROP
:
bi
}
(
P
:
PROP
)
:
PROP
:
=
(
▷
False
∨
P
)%
I
.
Definition
bi_except_0
{
PROP
:
bi
}
(
P
:
PROP
)
:
PROP
:
=
▷
False
∨
P
.
Global
Arguments
bi_except_0
{
_
}
_
%
I
:
simpl
never
.
Notation
"◇ P"
:
=
(
bi_except_0
P
)
:
bi_scope
.
Global
Instance
:
Params
(@
bi_except_0
)
1
:
=
{}.
...
...
@@ -112,7 +112,7 @@ Global Instance: Params (@Timeless) 1 := {}.
Definition
bi_wandM
{
PROP
:
bi
}
(
mP
:
option
PROP
)
(
Q
:
PROP
)
:
PROP
:
=
match
mP
with
|
None
=>
Q
|
Some
P
=>
(
P
-
∗
Q
)%
I
|
Some
P
=>
P
-
∗
Q
end
.
Global
Arguments
bi_wandM
{
_
}
!
_
%
I
_
%
I
/.
Notation
"mP -∗? Q"
:
=
(
bi_wandM
mP
Q
)
...
...
iris/bi/derived_laws.v
View file @
0ca74ec7
...
...
@@ -607,7 +607,7 @@ Lemma pure_wand_forall φ P `{!Absorbing P} : (⌜φ⌝ -∗ P) ⊣⊢ (∀ _ :
Proof
.
apply
(
anti_symm
_
).
-
apply
forall_intro
=>
H
φ
.
rewrite
-(
pure_intro
φ
emp
%
I
)
//
emp_wand
//.
rewrite
-(
pure_intro
φ
emp
)
//
emp_wand
//.
-
apply
wand_intro_l
,
wand_elim_l'
,
pure_elim'
=>
H
φ
.
apply
wand_intro_l
.
rewrite
(
forall_elim
H
φ
)
comm
.
by
apply
absorbing
.
Qed
.
...
...
@@ -794,7 +794,7 @@ Section bi_affine.
Context
`
{
BiAffine
PROP
}.
Global
Instance
bi_affine_absorbing
P
:
Absorbing
P
|
0
.
Proof
.
by
rewrite
/
Absorbing
/
bi_absorbingly
(
affine
True
%
I
)
left_id
.
Qed
.
Proof
.
by
rewrite
/
Absorbing
/
bi_absorbingly
(
affine
True
)
left_id
.
Qed
.
Global
Instance
bi_affine_positive
:
BiPositive
PROP
.
Proof
.
intros
P
Q
.
by
rewrite
!
affine_affinely
.
Qed
.
...
...
@@ -929,7 +929,7 @@ Qed.
Lemma
persistently_and_sep_l_1
P
Q
:
<
pers
>
P
∧
Q
⊢
<
pers
>
P
∗
Q
.
Proof
.
by
rewrite
-{
1
}(
emp_sep
Q
%
I
)
persistently_and_sep_assoc
and_elim_l
.
by
rewrite
-{
1
}(
emp_sep
Q
)
persistently_and_sep_assoc
and_elim_l
.
Qed
.
Lemma
persistently_and_sep_r_1
P
Q
:
P
∧
<
pers
>
Q
⊢
P
∗
<
pers
>
Q
.
Proof
.
by
rewrite
!(
comm
_
P
)
persistently_and_sep_l_1
.
Qed
.
...
...
@@ -937,7 +937,7 @@ Proof. by rewrite !(comm _ P) persistently_and_sep_l_1. Qed.
Lemma
persistently_and_sep
P
Q
:
<
pers
>
(
P
∧
Q
)
⊢
<
pers
>
(
P
∗
Q
).
Proof
.
rewrite
persistently_and
.
rewrite
-{
1
}
persistently_idemp
-
persistently_and
-{
1
}(
emp_sep
Q
%
I
).
rewrite
-{
1
}
persistently_idemp
-
persistently_and
-{
1
}(
emp_sep
Q
).
by
rewrite
persistently_and_sep_assoc
(
comm
bi_and
)
persistently_and_emp_elim
.
Qed
.
...
...
@@ -990,7 +990,7 @@ Proof. intros; rewrite -persistently_and_sep_r_1; auto. Qed.
Lemma
persistently_impl_wand_2
P
Q
:
<
pers
>
(
P
-
∗
Q
)
⊢
<
pers
>
(
P
→
Q
).
Proof
.
apply
persistently_intro'
,
impl_intro_r
.
rewrite
-{
2
}(
emp_sep
P
%
I
)
persistently_and_sep_assoc
.
rewrite
-{
2
}(
emp_sep
P
)
persistently_and_sep_assoc
.
by
rewrite
(
comm
bi_and
)
persistently_and_emp_elim
wand_elim_l
.
Qed
.
...
...
iris/bi/derived_laws_later.v
View file @
0ca74ec7
...
...
@@ -111,7 +111,7 @@ Lemma löb `{!BiLöb PROP} P : (▷ P → P) ⊢ P.
Proof
.
apply
entails_impl_True
,
l
ö
b_weak
.
apply
impl_intro_r
.
rewrite
-{
2
}(
idemp
(
∧
)
(
▷
P
→
P
))%
I
.
rewrite
{
2
}(
later_intro
(
▷
P
→
P
))
%
I
.
rewrite
{
2
}(
later_intro
(
▷
P
→
P
)).
rewrite
later_impl
.
rewrite
assoc
impl_elim_l
.
rewrite
impl_elim_r
.
done
.
...
...
@@ -131,7 +131,7 @@ Proof.
assert
(
Q
⊣
⊢
(
▷
Q
→
P
))
as
HQ
by
(
exact
:
fixpoint_unfold
).
intros
HP
.
rewrite
-
HP
.
assert
(
▷
Q
⊢
P
)
as
HQP
.
{
rewrite
-
HP
.
rewrite
-(
idemp
(
∧
)
(
▷
Q
))%
I
{
2
}(
later_intro
(
▷
Q
))
%
I
.
{
rewrite
-
HP
.
rewrite
-(
idemp
(
∧
)
(
▷
Q
))%
I
{
2
}(
later_intro
(
▷
Q
)).
by
rewrite
{
1
}
HQ
{
1
}
later_impl
impl_elim_l
.
}
rewrite
-
HQP
HQ
-
2
!
later_intro
.
apply
(
entails_impl_True
_
P
).
done
.
...
...
@@ -139,15 +139,15 @@ Qed.
Lemma
l
ö
b_wand_intuitionistically
`
{!
BiL
ö
b
PROP
}
P
:
□
(
□
▷
P
-
∗
P
)
⊢
P
.
Proof
.
rewrite
-{
3
}(
intuitionistically_elim
P
)
-(
l
ö
b
(
□
P
)
%
I
).
apply
impl_intro_l
.
rewrite
-{
3
}(
intuitionistically_elim
P
)
-(
l
ö
b
(
□
P
)).
apply
impl_intro_l
.
rewrite
{
1
}
intuitionistically_into_persistently_1
later_persistently
.
rewrite
persistently_and_intuitionistically_sep_l
.
rewrite
-{
1
}(
intuitionistically_idemp
(
▷
P
)
%
I
)
intuitionistically_sep_2
.
rewrite
-{
1
}(
intuitionistically_idemp
(
▷
P
))
intuitionistically_sep_2
.
by
rewrite
wand_elim_r
.
Qed
.
Lemma
l
ö
b_wand
`
{!
BiL
ö
b
PROP
}
P
:
□
(
▷
P
-
∗
P
)
⊢
P
.
Proof
.
by
rewrite
-(
intuitionistically_elim
(
▷
P
)
%
I
)
l
ö
b_wand_intuitionistically
.
by
rewrite
-(
intuitionistically_elim
(
▷
P
))
l
ö
b_wand_intuitionistically
.
Qed
.
(** The proof of the right-to-left direction relies on the BI being affine. It
...
...
@@ -322,7 +322,7 @@ Proof. by rewrite {1}(except_0_intro Q) except_0_sep. Qed.
Lemma
later_affinely_1
`
{!
Timeless
(
PROP
:
=
PROP
)
emp
}
P
:
▷
<
affine
>
P
⊢
◇
<
affine
>
▷
P
.
Proof
.
rewrite
/
bi_affinely
later_and
(
timeless
emp
%
I
)
except_0_and
.
rewrite
/
bi_affinely
later_and
(
timeless
emp
)
except_0_and
.
by
apply
and_mono
,
except_0_intro
.
Qed
.
...
...
iris/bi/lib/atomic.v
View file @
0ca74ec7
...
...
@@ -21,9 +21,8 @@ Section definition.
(** atomic_acc as the "introduction form" of atomic updates: An accessor
that can be aborted back to [P]. *)
Definition
atomic_acc
Eo
Ei
α
P
β
Φ
:
PROP
:
=
(|={
Eo
,
Ei
}=>
∃
..
x
,
α
x
∗
((
α
x
={
Ei
,
Eo
}=
∗
P
)
∧
(
∀
..
y
,
β
x
y
={
Ei
,
Eo
}=
∗
Φ
x
y
))
)%
I
.
|={
Eo
,
Ei
}=>
∃
..
x
,
α
x
∗
((
α
x
={
Ei
,
Eo
}=
∗
P
)
∧
(
∀
..
y
,
β
x
y
={
Ei
,
Eo
}=
∗
Φ
x
y
)).
Lemma
atomic_acc_wand
Eo
Ei
α
P1
P2
β
Φ
1
Φ
2
:
((
P1
-
∗
P2
)
∧
(
∀
..
x
y
,
Φ
1
x
y
-
∗
Φ
2
x
y
))
-
∗
...
...
iris/bi/lib/core.v
View file @
0ca74ec7
...
...
@@ -9,7 +9,7 @@ Import bi.
Definition
coreP
`
{!
BiPlainly
PROP
}
(
P
:
PROP
)
:
PROP
:
=
(* TODO: Looks like we want notation for affinely-plainly; that lets us avoid
using conjunction/implication here. *)
(
∀
Q
:
PROP
,
<
affine
>
■
(
Q
-
∗
<
pers
>
Q
)
-
∗
<
affine
>
■
(
P
-
∗
Q
)
-
∗
Q
)%
I
.
∀
Q
:
PROP
,
<
affine
>
■
(
Q
-
∗
<
pers
>
Q
)
-
∗
<
affine
>
■
(
P
-
∗
Q
)
-
∗
Q
.
Global
Instance
:
Params
(@
coreP
)
1
:
=
{}.
Typeclasses
Opaque
coreP
.
...
...
iris/bi/lib/counterexamples.v
View file @
0ca74ec7
...
...
@@ -42,7 +42,7 @@ Module löb_em. Section löb_em.
Lemma
later_anything
P
:
⊢
@{
PROP
}
▷
P
.
Proof
.
iDestruct
(
em
(
▷
False
)
%
I
)
as
"#[HP|HnotP]"
.
iDestruct
(
em
(
▷
False
))
as
"#[HP|HnotP]"
.
-
iNext
.
done
.
-
iExFalso
.
iL
ö
b
as
"IH"
.
iSpecialize
(
"HnotP"
with
"IH"
).
done
.
Qed
.
...
...
@@ -81,7 +81,7 @@ Module savedprop. Section savedprop.
Qed
.
(** A bad recursive reference: "Assertion with name [i] does not hold" *)
Definition
A
(
i
:
ident
)
:
PROP
:
=
(
∃
P
,
□
¬
P
∗
saved
i
P
)%
I
.
Definition
A
(
i
:
ident
)
:
PROP
:
=
∃
P
,
□
¬
P
∗
saved
i
P
.
Lemma
A_alloc
:
⊢
|==>
∃
i
,
saved
i
(
A
i
).
Proof
.
by
apply
sprop_alloc_dep
.
Qed
.
...
...
@@ -120,7 +120,6 @@ Module inv. Section inv.
(** We have the update modality (two classes: empty/full mask) *)
Inductive
mask
:
=
M0
|
M1
.
Context
(
fupd
:
mask
→
PROP
→
PROP
).
Global
Arguments
fupd
_
_
%
I
.
Hypothesis
fupd_intro
:
∀
E
P
,
P
⊢
fupd
E
P
.
Hypothesis
fupd_mono
:
∀
E
P
Q
,
(
P
⊢
Q
)
→
fupd
E
P
⊢
fupd
E
Q
.
Hypothesis
fupd_fupd
:
∀
E
P
,
fupd
E
(
fupd
E
P
)
⊢
fupd
E
P
.
...
...
@@ -198,13 +197,13 @@ Module inv. Section inv.
(** Now to the actual counterexample. We start with a weird form of saved propositions. *)
Definition
saved
(
γ
:
gname
)
(
P
:
PROP
)
:
PROP
:
=
(
∃
i
,
inv
i
(
start
γ
∨
(
finished
γ
∗
□
P
))
)%
I
.
∃
i
,
inv
i
(
start
γ
∨
(
finished
γ
∗
□
P
)).
Global
Instance
saved_persistent
γ
P
:
Persistent
(
saved
γ
P
)
:
=
_
.
Lemma
saved_alloc
(
P
:
gname
→
PROP
)
:
⊢
fupd
M1
(
∃
γ
,
saved
γ
(
P
γ
)).
Proof
.
iIntros
""
.
iMod
(
sts_alloc
)
as
(
γ
)
"Hs"
.
iMod
(
inv_alloc
(
start
γ
∨
(
finished
γ
∗
□
(
P
γ
)))
%
I
with
"[Hs]"
)
as
(
i
)
"#Hi"
.
iMod
(
inv_alloc
(
start
γ
∨
(
finished
γ
∗
□
(
P
γ
)))
with
"[Hs]"
)
as
(
i
)
"#Hi"
.
{
auto
.
}
iApply
fupd_intro
.
by
iExists
γ
,
i
.
Qed
.
...
...
@@ -231,7 +230,7 @@ Module inv. Section inv.
(** And now we tie a bad knot. *)
Notation
not_fupd
P
:
=
(
□
(
P
-
∗
fupd
M1
False
))%
I
.
Definition
A
i
:
PROP
:
=
(
∃
P
,
not_fupd
P
∗
saved
i
P
)%
I
.
Definition
A
i
:
PROP
:
=
∃
P
,
not_fupd
P
∗
saved
i
P
.
Global
Instance
A_persistent
i
:
Persistent
(
A
i
)
:
=
_
.
Lemma
A_alloc
:
⊢
fupd
M1
(
∃
i
,
saved
i
(
A
i
)).
...
...
@@ -287,7 +286,6 @@ Module linear. Section linear.
(** We have the mask-changing update modality (two classes: empty/full mask) *)
Inductive
mask
:
=
M0
|
M1
.
Context
(
fupd
:
mask
→
mask
→
PROP
→
PROP
).
Global
Arguments
fupd
_
_
_
%
I
.
Hypothesis
fupd_intro
:
∀
E
P
,
P
⊢
fupd
E
E
P
.
Hypothesis
fupd_mono
:
∀
E1
E2
P
Q
,
(
P
⊢
Q
)
→
fupd
E1
E2
P
⊢
fupd
E1
E2
Q
.
Hypothesis
fupd_fupd
:
∀
E1
E2
E3
P
,
fupd
E1
E2
(
fupd
E2
E3
P
)
⊢
fupd
E1
E3
P
.
...
...
@@ -324,7 +322,7 @@ Module linear. Section linear.
Lemma
leak
P
:
P
-
∗
fupd
M1
M1
emp
.
Proof
.
iIntros
"HP"
.
iMod
(
(
cinv_alloc
_
True
%
I
)
with
"[//]"
)
as
(
γ
)
"[Hinv Htok]"
.
iMod
(
cinv_alloc
_
True
with
"[//]"
)
as
(
γ
)
"[Hinv Htok]"
.
iMod
(
cinv_acc
with
"Hinv Htok"
)
as
"(Htrue & Htok & Hclose)"
.
iApply
"Hclose"
.
done
.
Qed
.
...
...
iris/bi/lib/laterable.v
View file @
0ca74ec7
...
...
@@ -71,7 +71,7 @@ Section instances.
(* A wrapper to obtain a weaker, laterable form of any assertion. *)
Definition
make_laterable
(
Q
:
PROP
)
:
PROP
:
=
(
∃
P
,
▷
P
∗
□
(
▷
P
-
∗
Q
)
)%
I
.
∃
P
,
▷
P
∗
□
(
▷
P
-
∗
Q
).
Global
Instance
make_laterable_ne
:
NonExpansive
make_laterable
.
Proof
.
solve_proper
.
Qed
.
...
...
iris/bi/lib/relations.v
View file @
0ca74ec7
...
...
@@ -10,7 +10,7 @@ Set Default Proof Using "Type*".
Definition
bi_rtc_pre
`
{!
BiInternalEq
PROP
}
{
A
:
ofe
}
(
R
:
A
→
A
→
PROP
)
(
x2
:
A
)
(
rec
:
A
→
PROP
)
(
x1
:
A
)
:
PROP
:
=
(
<
affine
>
(
x1
≡
x2
)
∨
∃
x'
,
R
x1
x'
∗
rec
x'
)%
I
.
<
affine
>
(
x1
≡
x2
)
∨
∃
x'
,
R
x1
x'
∗
rec
x'
.
Global
Instance
bi_rtc_pre_mono
`
{!
BiInternalEq
PROP
}
{
A
:
ofe
}
(
R
:
A
→
A
→
PROP
)
`
{
NonExpansive2
R
}
(
x
:
A
)
:
...
...
iris/bi/monpred.v
View file @
0ca74ec7
...
...
@@ -743,19 +743,19 @@ Lemma monPred_objectively_big_sepMS `{BiIndexBottom bot} `{Countable A}
Proof
.
apply
(
big_opMS_commute
_
).
Qed
.
Global
Instance
big_sepL_objective
{
A
}
(
l
:
list
A
)
Φ
`
{
∀
n
x
,
Objective
(
Φ
n
x
)}
:
@
Objective
I
PROP
([
∗
list
]
n
↦
x
∈
l
,
Φ
n
x
)
%
I
.
@
Objective
I
PROP
([
∗
list
]
n
↦
x
∈
l
,
Φ
n
x
).
Proof
.
generalize
dependent
Φ
.
induction
l
=>/=
;
apply
_
.
Qed
.
Global
Instance
big_sepM_objective
`
{
Countable
K
}
{
A
}
(
Φ
:
K
→
A
→
monPred
)
(
m
:
gmap
K
A
)
`
{
∀
k
x
,
Objective
(
Φ
k
x
)}
:
Objective
([
∗
map
]
k
↦
x
∈
m
,
Φ
k
x
)
%
I
.
Objective
([
∗
map
]
k
↦
x
∈
m
,
Φ
k
x
).
Proof
.
intros
??.
rewrite
!
monPred_at_big_sepM
.
do
3
f_equiv
.
by
apply
objective_at
.
Qed
.
Global
Instance
big_sepS_objective
`
{
Countable
A
}
(
Φ
:
A
→
monPred
)
(
X
:
gset
A
)
`
{
∀
y
,
Objective
(
Φ
y
)}
:
Objective
([
∗
set
]
y
∈
X
,
Φ
y
)
%
I
.
Objective
([
∗
set
]
y
∈
X
,
Φ
y
).
Proof
.
intros
??.
rewrite
!
monPred_at_big_sepS
.
do
2
f_equiv
.
by
apply
objective_at
.
Qed
.
Global
Instance
big_sepMS_objective
`
{
Countable
A
}
(
Φ
:
A
→
monPred
)
(
X
:
gmultiset
A
)
`
{
∀
y
,
Objective
(
Φ
y
)}
:
Objective
([
∗
mset
]
y
∈
X
,
Φ
y
)
%
I
.
Objective
([
∗
mset
]
y
∈
X
,
Φ
y
).
Proof
.
intros
??.
rewrite
!
monPred_at_big_sepMS
.
do
2
f_equiv
.
by
apply
objective_at
.
Qed
.
(** BUpd *)
...
...
@@ -784,7 +784,7 @@ Lemma monPred_at_bupd `{BiBUpd PROP} i P : (|==> P) i ⊣⊢ |==> P i.
Proof
.
by
rewrite
monPred_bupd_eq
.
Qed
.
Global
Instance
bupd_objective
`
{
BiBUpd
PROP
}
P
`
{!
Objective
P
}
:
Objective
(|==>
P
)
%
I
.
Objective
(|==>
P
).
Proof
.
intros
??.
by
rewrite
!
monPred_at_bupd
objective_at
.
Qed
.
Global
Instance
monPred_bi_embed_bupd
`
{
BiBUpd
PROP
}
:
...
...
@@ -915,7 +915,7 @@ Lemma monPred_at_fupd `{BiFUpd PROP} i E1 E2 P :
Proof
.
by
rewrite
monPred_fupd_eq
.
Qed
.
Global
Instance
fupd_objective
E1
E2
P
`
{!
Objective
P
}
`
{
BiFUpd
PROP
}
:
Objective
(|={
E1
,
E2
}=>
P
)
%
I
.
Objective
(|={
E1
,
E2
}=>
P
).
Proof
.
intros
??.
by
rewrite
!
monPred_at_fupd
objective_at
.
Qed
.
(** Plainly *)
...
...
iris/bi/plainly.v
View file @
0ca74ec7
...
...
@@ -138,7 +138,7 @@ Proof. destruct p; last done. exact: persistently_elim_plainly. Qed.
Lemma
plainly_persistently_elim
P
:
■
<
pers
>
P
⊣
⊢
■
P
.
Proof
.
apply
(
anti_symm
_
).
-
rewrite
-{
1
}(
left_id
True
%
I
bi_and
(
■
_
)%
I
)
(
plainly_emp_intro
True
%
I
).
-
rewrite
-{
1
}(
left_id
True
%
I
bi_and
(
■
_
)%
I
)
(
plainly_emp_intro
True
).
rewrite
-{
2
}(
persistently_and_emp_elim
P
).
rewrite
!
and_alt
-
plainly_forall_2
.
by
apply
forall_mono
=>
-[].
-
by
rewrite
{
1
}
plainly_idemp_2
(
plainly_elim_persistently
P
).
...
...
@@ -208,7 +208,7 @@ Proof.
Qed
.
Lemma
plainly_and_sep_l_1
P
Q
:
■
P
∧
Q
⊢
■
P
∗
Q
.
Proof
.
by
rewrite
-{
1
}(
emp_sep
Q
%
I
)
plainly_and_sep_assoc
and_elim_l
.
Qed
.
Proof
.
by
rewrite
-{
1
}(
emp_sep
Q
)
plainly_and_sep_assoc
and_elim_l
.
Qed
.
Lemma
plainly_and_sep_r_1
P
Q
:
P
∧
■
Q
⊢
P
∗
■
Q
.
Proof
.
by
rewrite
!(
comm
_
P
)
plainly_and_sep_l_1
.
Qed
.
...
...
@@ -217,7 +217,7 @@ Proof. apply (anti_symm _); eauto using plainly_mono, plainly_emp_intro. Qed.
Lemma
plainly_and_sep
P
Q
:
■
(
P
∧
Q
)
⊢
■
(
P
∗
Q
).
Proof
.
rewrite
plainly_and
.
rewrite
-{
1
}
plainly_idemp
-
plainly_and
-{
1
}(
emp_sep
Q
%
I
).
rewrite
-{
1
}
plainly_idemp
-
plainly_and
-{
1
}(
emp_sep
Q
).
by
rewrite
plainly_and_sep_assoc
(
comm
bi_and
)
plainly_and_emp_elim
.
Qed
.
...
...
@@ -244,7 +244,7 @@ Proof. by rewrite -plainly_and_sep plainly_and -and_sep_plainly. Qed.
Lemma
plainly_sep
`
{
BiPositive
PROP
}
P
Q
:
■
(
P
∗
Q
)
⊣
⊢
■
P
∗
■
Q
.
Proof
.
apply
(
anti_symm
_
)
;
auto
using
plainly_sep_2
.
rewrite
-(
plainly_affinely_elim
(
_
∗
_
)
%
I
)
affinely_sep
-
and_sep_plainly
.
apply
and_intro
.
rewrite
-(
plainly_affinely_elim
(
_
∗
_
))
affinely_sep
-
and_sep_plainly
.
apply
and_intro
.
-
by
rewrite
(
affinely_elim_emp
Q
)
right_id
affinely_elim
.
-
by
rewrite
(
affinely_elim_emp
P
)
left_id
affinely_elim
.
Qed
.
...
...
@@ -260,7 +260,7 @@ Proof. intros; rewrite -plainly_and_sep_r_1; auto. Qed.
Lemma
plainly_impl_wand_2
P
Q
:
■
(
P
-
∗
Q
)
⊢
■
(
P
→
Q
).
Proof
.
apply
plainly_intro'
,
impl_intro_r
.
rewrite
-{
2
}(
emp_sep
P
%
I
)
plainly_and_sep_assoc
.
rewrite
-{
2
}(
emp_sep
P
)
plainly_and_sep_assoc
.
by
rewrite
(
comm
bi_and
)
plainly_and_emp_elim
wand_elim_l
.
Qed
.
...
...
@@ -579,7 +579,7 @@ Section prop_ext.
apply
(
anti_symm
(
⊢
))
;
last
exact
:
prop_ext_2
.
apply
(
internal_eq_rewrite'
P
Q
(
λ
Q
,
■
(
P
∗
-
∗
Q
))%
I
)
;
[
solve_proper
|
done
|
].
rewrite
(
plainly_emp_intro
(
P
≡
Q
)
%
I
).
rewrite
(
plainly_emp_intro
(
P
≡
Q
)).
apply
plainly_mono
,
wand_iff_refl
.
Qed
.
...
...
@@ -608,7 +608,7 @@ Section prop_ext.
by
rewrite
wand_elim_r
.
-
rewrite
internal_eq_sym
(
internal_eq_rewrite
_
_
(
λ
Q
,
■
(
True
-
∗
Q
))%
I
ltac
:
(
shelve
))
;
last
solve_proper
.
by
rewrite
-
entails_wand
//
-(
plainly_emp_intro
True
%
I
)
True_impl
.
by
rewrite
-
entails_wand
//
-(
plainly_emp_intro
True
)
True_impl
.
Qed
.