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
Janno
iris-coq
Commits
83c9c1c1
Commit
83c9c1c1
authored
Oct 25, 2017
by
Robbert Krebbers
Browse files
Merge branch 'big_rename' into 'master'
Fix some longstanding renaming issues See merge request FP/iris-coq!63
parents
d9417f9a
2a92f265
Changes
53
Expand all
Hide whitespace changes
Inline
Side-by-side
theories/algebra/agree.v
View file @
83c9c1c1
...
...
@@ -131,7 +131,7 @@ Proof.
-
destruct
(
elem_of_agree
x1
)
;
naive_solver
.
Qed
.
Definition
agree_cmra_mixin
:
C
MRA
Mixin
(
agree
A
).
Definition
agree_cmra_mixin
:
C
mra
Mixin
(
agree
A
).
Proof
.
apply
cmra_total_mixin
;
try
apply
_
||
by
eauto
.
-
intros
n
x
;
rewrite
!
agree_validN_def
;
eauto
using
dist_S
.
...
...
@@ -142,19 +142,19 @@ Proof.
+
by
rewrite
agree_idemp
.
+
by
move
:
Hval
;
rewrite
Hx
;
move
=>
/
agree_op_invN
->
;
rewrite
agree_idemp
.
Qed
.
Canonical
Structure
agreeR
:
cmraT
:
=
C
MRA
T
(
agree
A
)
agree_cmra_mixin
.
Canonical
Structure
agreeR
:
cmraT
:
=
C
mra
T
(
agree
A
)
agree_cmra_mixin
.
Global
Instance
agree_total
:
C
MRA
Total
agreeR
.
Proof
.
rewrite
/
C
MRA
Total
;
eauto
.
Qed
.
Global
Instance
agree_
persistent
(
x
:
agree
A
)
:
Persistent
x
.
Global
Instance
agree_
cmra_
total
:
C
mra
Total
agreeR
.
Proof
.
rewrite
/
C
mra
Total
;
eauto
.
Qed
.
Global
Instance
agree_
core_id
(
x
:
agree
A
)
:
CoreId
x
.
Proof
.
by
constructor
.
Qed
.
Global
Instance
agree_discrete
:
Discrete
A
→
C
MRA
Discrete
agreeR
.
Global
Instance
agree_
cmra_
discrete
:
Ofe
Discrete
A
→
C
mra
Discrete
agreeR
.
Proof
.
intros
HD
.
split
.
-
intros
x
y
[
H
H'
]
n
;
split
=>
a
;
setoid_rewrite
<-(
timeless
_iff_0
_
_
)
;
auto
.
-
intros
x
y
[
H
H'
]
n
;
split
=>
a
;
setoid_rewrite
<-(
discrete
_iff_0
_
_
)
;
auto
.
-
intros
x
;
rewrite
agree_validN_def
=>
Hv
n
.
apply
agree_validN_def
=>
a
b
??.
apply
timeless
_iff_0
;
auto
.
apply
discrete
_iff_0
;
auto
.
Qed
.
Program
Definition
to_agree
(
a
:
A
)
:
agree
A
:
=
...
...
@@ -267,7 +267,7 @@ Section agree_map.
-
intros
(
a
&->&?).
exists
(
f
a
).
rewrite
-
Hfg
;
eauto
.
Qed
.
Global
Instance
agree_map_morphism
:
C
MRA
Morphism
(
agree_map
f
).
Global
Instance
agree_map_morphism
:
C
mra
Morphism
(
agree_map
f
).
Proof
using
Hf
.
split
;
first
apply
_
.
-
intros
n
x
.
rewrite
!
agree_validN_def
=>
Hv
b
b'
/=.
...
...
theories/algebra/auth.v
View file @
83c9c1c1
...
...
@@ -49,10 +49,10 @@ Proof.
(
λ
x
,
(
authoritative
x
,
auth_own
x
)))
;
by
repeat
intro
.
Qed
.
Global
Instance
Auth_
timeless
a
b
:
Timeless
a
→
Timeless
b
→
Timeless
(
Auth
a
b
).
Proof
.
by
intros
??
[??]
[??]
;
split
;
apply
:
timeless
.
Qed
.
Global
Instance
auth_discrete
:
Discrete
A
→
Discrete
authC
.
Global
Instance
Auth_
discrete
a
b
:
Discrete
a
→
Discrete
b
→
Discrete
(
Auth
a
b
).
Proof
.
by
intros
??
[??]
[??]
;
split
;
apply
:
discrete
.
Qed
.
Global
Instance
auth_
ofe_
discrete
:
Ofe
Discrete
A
→
Ofe
Discrete
authC
.
Proof
.
intros
?
[??]
;
apply
_
.
Qed
.
Global
Instance
auth_leibniz
:
LeibnizEquiv
A
→
LeibnizEquiv
(
auth
A
).
Proof
.
by
intros
?
[??]
[??]
[??]
;
f_equal
/=
;
apply
leibniz_equiv
.
Qed
.
...
...
@@ -113,7 +113,7 @@ Proof.
destruct
x
as
[[[]|]]
;
naive_solver
eauto
using
cmra_validN_includedN
.
Qed
.
Lemma
auth_valid_discrete
`
{
C
MRA
Discrete
A
}
x
:
Lemma
auth_valid_discrete
`
{
C
mra
Discrete
A
}
x
:
✓
x
↔
match
authoritative
x
with
|
Excl'
a
=>
auth_own
x
≼
a
∧
✓
a
|
None
=>
✓
auth_own
x
...
...
@@ -125,18 +125,18 @@ Proof.
Qed
.
Lemma
auth_validN_2
n
a
b
:
✓
{
n
}
(
●
a
⋅
◯
b
)
↔
b
≼
{
n
}
a
∧
✓
{
n
}
a
.
Proof
.
by
rewrite
auth_validN_eq
/=
left_id
.
Qed
.
Lemma
auth_valid_discrete_2
`
{
C
MRA
Discrete
A
}
a
b
:
✓
(
●
a
⋅
◯
b
)
↔
b
≼
a
∧
✓
a
.
Lemma
auth_valid_discrete_2
`
{
C
mra
Discrete
A
}
a
b
:
✓
(
●
a
⋅
◯
b
)
↔
b
≼
a
∧
✓
a
.
Proof
.
by
rewrite
auth_valid_discrete
/=
left_id
.
Qed
.
Lemma
authoritative_valid
x
:
✓
x
→
✓
authoritative
x
.
Proof
.
by
destruct
x
as
[[[]|]].
Qed
.
Lemma
auth_own_valid
`
{
C
MRA
Discrete
A
}
x
:
✓
x
→
✓
auth_own
x
.
Lemma
auth_own_valid
`
{
C
mra
Discrete
A
}
x
:
✓
x
→
✓
auth_own
x
.
Proof
.
rewrite
auth_valid_discrete
.
destruct
x
as
[[[]|]]
;
naive_solver
eauto
using
cmra_valid_included
.
Qed
.
Lemma
auth_cmra_mixin
:
C
MRA
Mixin
(
auth
A
).
Lemma
auth_cmra_mixin
:
C
mra
Mixin
(
auth
A
).
Proof
.
apply
cmra_total_mixin
.
-
eauto
.
...
...
@@ -166,9 +166,9 @@ Proof.
as
(
b1
&
b2
&?&?&?)
;
auto
using
auth_own_validN
.
by
exists
(
Auth
ea1
b1
),
(
Auth
ea2
b2
).
Qed
.
Canonical
Structure
authR
:
=
C
MRA
T
(
auth
A
)
auth_cmra_mixin
.
Canonical
Structure
authR
:
=
C
mra
T
(
auth
A
)
auth_cmra_mixin
.
Global
Instance
auth_cmra_discrete
:
C
MRA
Discrete
A
→
C
MRA
Discrete
authR
.
Global
Instance
auth_cmra_discrete
:
C
mra
Discrete
A
→
C
mra
Discrete
authR
.
Proof
.
split
;
first
apply
_
.
intros
[[[?|]|]
?]
;
rewrite
auth_valid_eq
auth_validN_eq
/=
;
auto
.
...
...
@@ -178,17 +178,17 @@ Proof.
Qed
.
Instance
auth_empty
:
Unit
(
auth
A
)
:
=
Auth
ε
ε
.
Lemma
auth_ucmra_mixin
:
U
CMRA
Mixin
(
auth
A
).
Lemma
auth_ucmra_mixin
:
U
cmra
Mixin
(
auth
A
).
Proof
.
split
;
simpl
.
-
rewrite
auth_valid_eq
/=.
apply
ucmra_unit_valid
.
-
by
intros
x
;
constructor
;
rewrite
/=
left_id
.
-
do
2
constructor
;
simpl
;
apply
(
persistent
_core
_
).
-
do
2
constructor
;
simpl
;
apply
(
core_id
_core
_
).
Qed
.
Canonical
Structure
authUR
:
=
U
CMRA
T
(
auth
A
)
auth_ucmra_mixin
.
Canonical
Structure
authUR
:
=
U
cmra
T
(
auth
A
)
auth_ucmra_mixin
.
Global
Instance
auth_frag_
persistent
a
:
Persistent
a
→
Persistent
(
◯
a
).
Proof
.
do
2
constructor
;
simpl
;
auto
.
by
apply
persistent
_core
.
Qed
.
Global
Instance
auth_frag_
core_id
a
:
CoreId
a
→
CoreId
(
◯
a
).
Proof
.
do
2
constructor
;
simpl
;
auto
.
by
apply
core_id
_core
.
Qed
.
(** Internalized properties *)
Lemma
auth_equivI
{
M
}
(
x
y
:
auth
A
)
:
...
...
@@ -274,7 +274,7 @@ Proof.
apply
option_fmap_ne
;
[|
done
]=>
x
y
?
;
by
apply
excl_map_ne
.
Qed
.
Instance
auth_map_cmra_morphism
{
A
B
:
ucmraT
}
(
f
:
A
→
B
)
:
C
MRA
Morphism
f
→
C
MRA
Morphism
(
auth_map
f
).
C
mra
Morphism
f
→
C
mra
Morphism
(
auth_map
f
).
Proof
.
split
;
try
apply
_
.
-
intros
n
[[[
a
|]|]
b
]
;
rewrite
!
auth_validN_eq
;
try
...
...
theories/algebra/cmra.v
View file @
83c9c1c1
This diff is collapsed.
Click to expand it.
theories/algebra/coPset.v
View file @
83c9c1c1
...
...
@@ -39,12 +39,12 @@ Section coPset.
Qed
.
Canonical
Structure
coPsetR
:
=
discreteR
coPset
coPset_ra_mixin
.
Global
Instance
coPset_cmra_discrete
:
C
MRA
Discrete
coPsetR
.
Global
Instance
coPset_cmra_discrete
:
C
mra
Discrete
coPsetR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Lemma
coPset_ucmra_mixin
:
U
CMRA
Mixin
coPset
.
Lemma
coPset_ucmra_mixin
:
U
cmra
Mixin
coPset
.
Proof
.
split
.
done
.
intros
X
.
by
rewrite
coPset_op_union
left_id_L
.
done
.
Qed
.
Canonical
Structure
coPsetUR
:
=
U
CMRA
T
coPset
coPset_ucmra_mixin
.
Canonical
Structure
coPsetUR
:
=
U
cmra
T
coPset
coPset_ucmra_mixin
.
Lemma
coPset_opM
X
mY
:
X
⋅
?
mY
=
X
∪
from_option
id
∅
mY
.
Proof
.
destruct
mY
;
by
rewrite
/=
?right_id_L
.
Qed
.
...
...
@@ -112,10 +112,10 @@ Section coPset_disj.
Qed
.
Canonical
Structure
coPset_disjR
:
=
discreteR
coPset_disj
coPset_disj_ra_mixin
.
Global
Instance
coPset_disj_cmra_discrete
:
C
MRA
Discrete
coPset_disjR
.
Global
Instance
coPset_disj_cmra_discrete
:
C
mra
Discrete
coPset_disjR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Lemma
coPset_disj_ucmra_mixin
:
U
CMRA
Mixin
coPset_disj
.
Lemma
coPset_disj_ucmra_mixin
:
U
cmra
Mixin
coPset_disj
.
Proof
.
split
;
try
apply
_
||
done
.
intros
[
X
|]
;
coPset_disj_solve
.
Qed
.
Canonical
Structure
coPset_disjUR
:
=
U
CMRA
T
coPset_disj
coPset_disj_ucmra_mixin
.
Canonical
Structure
coPset_disjUR
:
=
U
cmra
T
coPset_disj
coPset_disj_ucmra_mixin
.
End
coPset_disj
.
theories/algebra/csum.v
View file @
83c9c1c1
...
...
@@ -96,16 +96,17 @@ Next Obligation.
+
rewrite
(
conv_compl
n
(
csum_chain_r
c
b'
))
/=.
destruct
(
c
n
)
;
naive_solver
.
Qed
.
Global
Instance
csum_discrete
:
Discrete
A
→
Discrete
B
→
Discrete
csumC
.
Proof
.
by
inversion_clear
3
;
constructor
;
apply
(
timeless
_
).
Qed
.
Global
Instance
csum_ofe_discrete
:
OfeDiscrete
A
→
OfeDiscrete
B
→
OfeDiscrete
csumC
.
Proof
.
by
inversion_clear
3
;
constructor
;
apply
(
discrete
_
).
Qed
.
Global
Instance
csum_leibniz
:
LeibnizEquiv
A
→
LeibnizEquiv
B
→
LeibnizEquiv
(
csumC
A
B
).
Proof
.
by
destruct
3
;
f_equal
;
apply
leibniz_equiv
.
Qed
.
Global
Instance
Cinl_
timeless
a
:
Timeless
a
→
Timeless
(
Cinl
a
).
Proof
.
by
inversion_clear
2
;
constructor
;
apply
(
timeless
_
).
Qed
.
Global
Instance
Cinr_
timeless
b
:
Timeless
b
→
Timeless
(
Cinr
b
).
Proof
.
by
inversion_clear
2
;
constructor
;
apply
(
timeless
_
).
Qed
.
Global
Instance
Cinl_
discrete
a
:
Discrete
a
→
Discrete
(
Cinl
a
).
Proof
.
by
inversion_clear
2
;
constructor
;
apply
(
discrete
_
).
Qed
.
Global
Instance
Cinr_
discrete
b
:
Discrete
b
→
Discrete
(
Cinr
b
).
Proof
.
by
inversion_clear
2
;
constructor
;
apply
(
discrete
_
).
Qed
.
End
cofe
.
Arguments
csumC
:
clear
implicits
.
...
...
@@ -202,7 +203,7 @@ Proof.
+
exists
(
Cinr
c
)
;
by
constructor
.
Qed
.
Lemma
csum_cmra_mixin
:
C
MRA
Mixin
(
csum
A
B
).
Lemma
csum_cmra_mixin
:
C
mra
Mixin
(
csum
A
B
).
Proof
.
split
.
-
intros
[]
n
;
destruct
1
;
constructor
;
by
ofe_subst
.
...
...
@@ -246,19 +247,19 @@ Proof.
exists
(
Cinr
z1
),
(
Cinr
z2
).
by
repeat
constructor
.
+
by
exists
CsumBot
,
CsumBot
;
destruct
y1
,
y2
;
inversion_clear
Hx'
.
Qed
.
Canonical
Structure
csumR
:
=
C
MRA
T
(
csum
A
B
)
csum_cmra_mixin
.
Canonical
Structure
csumR
:
=
C
mra
T
(
csum
A
B
)
csum_cmra_mixin
.
Global
Instance
csum_cmra_discrete
:
C
MRA
Discrete
A
→
C
MRA
Discrete
B
→
C
MRA
Discrete
csumR
.
C
mra
Discrete
A
→
C
mra
Discrete
B
→
C
mra
Discrete
csumR
.
Proof
.
split
;
first
apply
_
.
by
move
=>[
a
|
b
|]
HH
/=
;
try
apply
cmra_discrete_valid
.
Qed
.
Global
Instance
Cinl_
persistent
a
:
Persistent
a
→
Persistent
(
Cinl
a
).
Proof
.
rewrite
/
Persistent
/=.
inversion_clear
1
;
by
repeat
constructor
.
Qed
.
Global
Instance
Cinr_
persistent
b
:
Persistent
b
→
Persistent
(
Cinr
b
).
Proof
.
rewrite
/
Persistent
/=.
inversion_clear
1
;
by
repeat
constructor
.
Qed
.
Global
Instance
Cinl_
core_id
a
:
CoreId
a
→
CoreId
(
Cinl
a
).
Proof
.
rewrite
/
CoreId
/=.
inversion_clear
1
;
by
repeat
constructor
.
Qed
.
Global
Instance
Cinr_
core_id
b
:
CoreId
b
→
CoreId
(
Cinr
b
).
Proof
.
rewrite
/
CoreId
/=.
inversion_clear
1
;
by
repeat
constructor
.
Qed
.
Global
Instance
Cinl_exclusive
a
:
Exclusive
a
→
Exclusive
(
Cinl
a
).
Proof
.
by
move
=>
H
[]?
=>[/
H
||].
Qed
.
...
...
@@ -357,7 +358,7 @@ Arguments csumR : clear implicits.
(* Functor *)
Instance
csum_map_cmra_morphism
{
A
A'
B
B'
:
cmraT
}
(
f
:
A
→
A'
)
(
g
:
B
→
B'
)
:
C
MRA
Morphism
f
→
C
MRA
Morphism
g
→
C
MRA
Morphism
(
csum_map
f
g
).
C
mra
Morphism
f
→
C
mra
Morphism
g
→
C
mra
Morphism
(
csum_map
f
g
).
Proof
.
split
;
try
apply
_
.
-
intros
n
[
a
|
b
|]
;
simpl
;
auto
using
cmra_morphism_validN
.
...
...
theories/algebra/deprecated.v
View file @
83c9c1c1
...
...
@@ -50,13 +50,13 @@ Qed.
Canonical
Structure
dec_agreeR
:
cmraT
:
=
discreteR
(
dec_agree
A
)
dec_agree_ra_mixin
.
Global
Instance
dec_agree_cmra_discrete
:
C
MRA
Discrete
dec_agreeR
.
Global
Instance
dec_agree_cmra_discrete
:
C
mra
Discrete
dec_agreeR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Global
Instance
dec_agree_total
:
C
MRA
Total
dec_agreeR
.
Global
Instance
dec_agree_
cmra_
total
:
C
mra
Total
dec_agreeR
.
Proof
.
intros
x
.
by
exists
x
.
Qed
.
(* Some properties of this CMRA *)
Global
Instance
dec_agree_
persistent
(
x
:
dec_agreeR
)
:
Persistent
x
.
Global
Instance
dec_agree_
core_id
(
x
:
dec_agreeR
)
:
CoreId
x
.
Proof
.
by
constructor
.
Qed
.
Lemma
dec_agree_ne
a
b
:
a
≠
b
→
DecAgree
a
⋅
DecAgree
b
=
DecAgreeBot
.
...
...
theories/algebra/dra.v
View file @
83c9c1c1
From
iris
.
algebra
Require
Export
cmra
updates
.
Set
Default
Proof
Using
"Type"
.
Record
D
RA
Mixin
A
`
{
Equiv
A
,
Core
A
,
Disjoint
A
,
Op
A
,
Valid
A
}
:
=
{
Record
D
ra
Mixin
A
`
{
Equiv
A
,
Core
A
,
Disjoint
A
,
Op
A
,
Valid
A
}
:
=
{
(* setoids *)
mixin_dra_equivalence
:
Equivalence
((
≡
)
:
relation
A
)
;
mixin_dra_op_proper
:
Proper
((
≡
)
==>
(
≡
)
==>
(
≡
))
(
⋅
)
;
...
...
@@ -24,16 +24,16 @@ Record DRAMixin A `{Equiv A, Core A, Disjoint A, Op A, Valid A} := {
mixin_dra_core_mono
x
y
:
∃
z
,
✓
x
→
✓
y
→
x
⊥
y
→
core
(
x
⋅
y
)
≡
core
x
⋅
z
∧
✓
z
∧
core
x
⊥
z
}.
Structure
draT
:
=
D
RA
T
{
Structure
draT
:
=
D
ra
T
{
dra_car
:
>
Type
;
dra_equiv
:
Equiv
dra_car
;
dra_core
:
Core
dra_car
;
dra_disjoint
:
Disjoint
dra_car
;
dra_op
:
Op
dra_car
;
dra_valid
:
Valid
dra_car
;
dra_mixin
:
D
RA
Mixin
dra_car
dra_mixin
:
D
ra
Mixin
dra_car
}.
Arguments
D
RA
T
_
{
_
_
_
_
_
}
_
.
Arguments
D
ra
T
_
{
_
_
_
_
_
}
_
.
Arguments
dra_car
:
simpl
never
.
Arguments
dra_equiv
:
simpl
never
.
Arguments
dra_core
:
simpl
never
.
...
...
@@ -177,10 +177,10 @@ Qed.
Canonical
Structure
validityR
:
cmraT
:
=
discreteR
(
validity
A
)
validity_ra_mixin
.
Global
Instance
validity_
cmra_
disrete
:
C
MRA
Discrete
validityR
.
Global
Instance
validity_disrete
_cmra
:
C
mra
Discrete
validityR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Global
Instance
validity_cmra_total
:
C
MRA
Total
validityR
.
Proof
.
rewrite
/
C
MRA
Total
;
eauto
.
Qed
.
Global
Instance
validity_cmra_total
:
C
mra
Total
validityR
.
Proof
.
rewrite
/
C
mra
Total
;
eauto
.
Qed
.
Lemma
validity_update
x
y
:
(
∀
c
,
✓
x
→
✓
c
→
validity_car
x
⊥
c
→
✓
y
∧
validity_car
y
⊥
c
)
→
x
~~>
y
.
...
...
theories/algebra/excl.v
View file @
83c9c1c1
...
...
@@ -59,14 +59,14 @@ Proof.
-
by
intros
[]
;
constructor
.
Qed
.
Global
Instance
excl_discrete
:
Discrete
A
→
Discrete
exclC
.
Proof
.
by
inversion_clear
2
;
constructor
;
apply
(
timeless
_
).
Qed
.
Global
Instance
excl_
ofe_
discrete
:
Ofe
Discrete
A
→
Ofe
Discrete
exclC
.
Proof
.
by
inversion_clear
2
;
constructor
;
apply
(
discrete
_
).
Qed
.
Global
Instance
excl_leibniz
:
LeibnizEquiv
A
→
LeibnizEquiv
(
excl
A
).
Proof
.
by
destruct
2
;
f_equal
;
apply
leibniz_equiv
.
Qed
.
Global
Instance
Excl_
timeless
a
:
Timeless
a
→
Timeless
(
Excl
a
).
Proof
.
by
inversion_clear
2
;
constructor
;
apply
(
timeless
_
).
Qed
.
Global
Instance
ExclBot_
timeless
:
Timeless
(@
ExclBot
A
).
Global
Instance
Excl_
discrete
a
:
Discrete
a
→
Discrete
(
Excl
a
).
Proof
.
by
inversion_clear
2
;
constructor
;
apply
(
discrete
_
).
Qed
.
Global
Instance
ExclBot_
discrete
:
Discrete
(@
ExclBot
A
).
Proof
.
by
inversion_clear
1
;
constructor
.
Qed
.
(* CMRA *)
...
...
@@ -77,7 +77,7 @@ Instance excl_validN : ValidN (excl A) := λ n x,
Instance
excl_pcore
:
PCore
(
excl
A
)
:
=
λ
_
,
None
.
Instance
excl_op
:
Op
(
excl
A
)
:
=
λ
x
y
,
ExclBot
.
Lemma
excl_cmra_mixin
:
C
MRA
Mixin
(
excl
A
).
Lemma
excl_cmra_mixin
:
C
mra
Mixin
(
excl
A
).
Proof
.
split
;
try
discriminate
.
-
by
intros
n
[]
;
destruct
1
;
constructor
.
...
...
@@ -89,9 +89,9 @@ Proof.
-
by
intros
n
[?|]
[?|].
-
intros
n
x
[?|]
[?|]
?
;
inversion_clear
1
;
eauto
.
Qed
.
Canonical
Structure
exclR
:
=
C
MRA
T
(
excl
A
)
excl_cmra_mixin
.
Canonical
Structure
exclR
:
=
C
mra
T
(
excl
A
)
excl_cmra_mixin
.
Global
Instance
excl_cmra_discrete
:
Discrete
A
→
C
MRA
Discrete
exclR
.
Global
Instance
excl_cmra_discrete
:
Ofe
Discrete
A
→
C
mra
Discrete
exclR
.
Proof
.
split
.
apply
_
.
by
intros
[].
Qed
.
(** Internalized properties *)
...
...
@@ -142,7 +142,7 @@ Instance excl_map_ne {A B : ofeT} n :
Proper
((
dist
n
==>
dist
n
)
==>
dist
n
==>
dist
n
)
(@
excl_map
A
B
).
Proof
.
by
intros
f
f'
Hf
;
destruct
1
;
constructor
;
apply
Hf
.
Qed
.
Instance
excl_map_cmra_morphism
{
A
B
:
ofeT
}
(
f
:
A
→
B
)
:
NonExpansive
f
→
C
MRA
Morphism
(
excl_map
f
).
NonExpansive
f
→
C
mra
Morphism
(
excl_map
f
).
Proof
.
split
;
try
done
;
try
apply
_
.
by
intros
n
[
a
|].
Qed
.
Definition
exclC_map
{
A
B
}
(
f
:
A
-
n
>
B
)
:
exclC
A
-
n
>
exclC
B
:
=
CofeMor
(
excl_map
f
).
...
...
theories/algebra/frac.v
View file @
83c9c1c1
...
...
@@ -26,7 +26,7 @@ Proof.
Qed
.
Canonical
Structure
fracR
:
=
discreteR
frac
frac_ra_mixin
.
Global
Instance
frac_cmra_discrete
:
C
MRA
Discrete
fracR
.
Global
Instance
frac_cmra_discrete
:
C
mra
Discrete
fracR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
End
frac
.
...
...
theories/algebra/frac_auth.v
View file @
83c9c1c1
...
...
@@ -34,10 +34,10 @@ Section frac_auth.
Global
Instance
frac_auth_frag_proper
q
:
Proper
((
≡
)
==>
(
≡
))
(@
frac_auth_frag
A
q
).
Proof
.
solve_proper
.
Qed
.
Global
Instance
frac_auth_auth_
timeless
a
:
Timeless
a
→
Timeless
(
●
!
a
).
Proof
.
intros
;
apply
Auth_
timeless
;
apply
_
.
Qed
.
Global
Instance
frac_auth_frag_
timeless
a
:
Timeless
a
→
Timeless
(
◯
!
a
).
Proof
.
intros
;
apply
Auth_
timeless
,
Some_timeless
;
apply
_
.
Qed
.
Global
Instance
frac_auth_auth_
discrete
a
:
Discrete
a
→
Discrete
(
●
!
a
).
Proof
.
intros
;
apply
Auth_
discrete
;
apply
_
.
Qed
.
Global
Instance
frac_auth_frag_
discrete
a
:
Discrete
a
→
Discrete
(
◯
!
a
).
Proof
.
intros
;
apply
Auth_
discrete
,
Some_discrete
;
apply
_
.
Qed
.
Lemma
frac_auth_validN
n
a
:
✓
{
n
}
a
→
✓
{
n
}
(
●
!
a
⋅
◯
!
a
).
Proof
.
done
.
Qed
.
...
...
@@ -58,13 +58,13 @@ Section frac_auth.
Lemma
frac_auth_includedN
n
q
a
b
:
✓
{
n
}
(
●
!
a
⋅
◯
!{
q
}
b
)
→
Some
b
≼
{
n
}
Some
a
.
Proof
.
by
rewrite
auth_validN_eq
/=
=>
-[/
Some_pair_includedN
[
_
?]
_
].
Qed
.
Lemma
frac_auth_included
`
{
C
MRA
Discrete
A
}
q
a
b
:
Lemma
frac_auth_included
`
{
C
mra
Discrete
A
}
q
a
b
:
✓
(
●
!
a
⋅
◯
!{
q
}
b
)
→
Some
b
≼
Some
a
.
Proof
.
by
rewrite
auth_valid_discrete
/=
=>
-[/
Some_pair_included
[
_
?]
_
].
Qed
.
Lemma
frac_auth_includedN_total
`
{
C
MRA
Total
A
}
n
q
a
b
:
Lemma
frac_auth_includedN_total
`
{
C
mra
Total
A
}
n
q
a
b
:
✓
{
n
}
(
●
!
a
⋅
◯
!{
q
}
b
)
→
b
≼
{
n
}
a
.
Proof
.
intros
.
by
eapply
Some_includedN_total
,
frac_auth_includedN
.
Qed
.
Lemma
frac_auth_included_total
`
{
C
MRA
Discrete
A
,
C
MRA
Total
A
}
q
a
b
:
Lemma
frac_auth_included_total
`
{
C
mra
Discrete
A
,
C
mra
Total
A
}
q
a
b
:
✓
(
●
!
a
⋅
◯
!{
q
}
b
)
→
b
≼
a
.
Proof
.
intros
.
by
eapply
Some_included_total
,
frac_auth_included
.
Qed
.
...
...
@@ -94,10 +94,10 @@ Section frac_auth.
Proof
.
by
rewrite
/
IsOp'
/
IsOp
=>
/
leibniz_equiv_iff
->
->.
Qed
.
Global
Instance
is_op_frac_auth_persistent
(
q
q1
q2
:
frac
)
(
a
:
A
)
:
Persistent
a
→
IsOp
q
q1
q2
→
IsOp'
(
◯
!{
q
}
a
)
(
◯
!{
q1
}
a
)
(
◯
!{
q2
}
a
).
CoreId
a
→
IsOp
q
q1
q2
→
IsOp'
(
◯
!{
q
}
a
)
(
◯
!{
q1
}
a
)
(
◯
!{
q2
}
a
).
Proof
.
rewrite
/
IsOp'
/
IsOp
=>
?
/
leibniz_equiv_iff
->.
by
rewrite
-
frag_auth_op
-
persistent
_dup
.
by
rewrite
-
frag_auth_op
-
core_id
_dup
.
Qed
.
Lemma
frac_auth_update
q
a
b
a'
b'
:
...
...
theories/algebra/gmap.v
View file @
83c9c1c1
...
...
@@ -37,8 +37,8 @@ Next Obligation.
by
rewrite
conv_compl
/=
;
apply
reflexive_eq
.
Qed
.
Global
Instance
gmap_discrete
:
Discrete
A
→
Discrete
gmapC
.
Proof
.
intros
?
m
m'
?
i
.
by
apply
(
timeless
_
).
Qed
.
Global
Instance
gmap_
ofe_
discrete
:
Ofe
Discrete
A
→
Ofe
Discrete
gmapC
.
Proof
.
intros
?
m
m'
?
i
.
by
apply
(
discrete
_
).
Qed
.
(* why doesn't this go automatic? *)
Global
Instance
gmapC_leibniz
:
LeibnizEquiv
A
→
LeibnizEquiv
gmapC
.
Proof
.
intros
;
change
(
LeibnizEquiv
(
gmap
K
A
))
;
apply
_
.
Qed
.
...
...
@@ -70,27 +70,27 @@ Proof.
[
by
constructor
|
by
apply
lookup_ne
].
Qed
.
Global
Instance
gmap_empty_
timeless
:
Timeless
(
∅
:
gmap
K
A
).
Global
Instance
gmap_empty_
discrete
:
Discrete
(
∅
:
gmap
K
A
).
Proof
.
intros
m
Hm
i
;
specialize
(
Hm
i
)
;
rewrite
lookup_empty
in
Hm
|-
*.
inversion_clear
Hm
;
constructor
.
Qed
.
Global
Instance
gmap_lookup_
timeless
m
i
:
Timeless
m
→
Timeless
(
m
!!
i
).
Global
Instance
gmap_lookup_
discrete
m
i
:
Discrete
m
→
Discrete
(
m
!!
i
).
Proof
.
intros
?
[
x
|]
Hx
;
[|
by
symmetry
;
apply
:
timeless
].
intros
?
[
x
|]
Hx
;
[|
by
symmetry
;
apply
:
discrete
].
assert
(
m
≡
{
0
}
≡
<[
i
:
=
x
]>
m
)
by
(
by
symmetry
in
Hx
;
inversion
Hx
;
ofe_subst
;
rewrite
insert_id
).
by
rewrite
(
timeless
m
(<[
i
:
=
x
]>
m
))
//
lookup_insert
.
by
rewrite
(
discrete
m
(<[
i
:
=
x
]>
m
))
//
lookup_insert
.
Qed
.
Global
Instance
gmap_insert_
timeless
m
i
x
:
Timeless
x
→
Timeless
m
→
Timeless
(<[
i
:
=
x
]>
m
).
Global
Instance
gmap_insert_
discrete
m
i
x
:
Discrete
x
→
Discrete
m
→
Discrete
(<[
i
:
=
x
]>
m
).
Proof
.
intros
??
m'
Hm
j
;
destruct
(
decide
(
i
=
j
))
;
simplify_map_eq
.
{
by
apply
:
timeless
;
rewrite
-
Hm
lookup_insert
.
}
by
apply
:
timeless
;
rewrite
-
Hm
lookup_insert_ne
.
{
by
apply
:
discrete
;
rewrite
-
Hm
lookup_insert
.
}
by
apply
:
discrete
;
rewrite
-
Hm
lookup_insert_ne
.
Qed
.
Global
Instance
gmap_singleton_
timeless
i
x
:
Timeless
x
→
Timeless
({[
i
:
=
x
]}
:
gmap
K
A
)
:
=
_
.
Global
Instance
gmap_singleton_
discrete
i
x
:
Discrete
x
→
Discrete
({[
i
:
=
x
]}
:
gmap
K
A
)
:
=
_
.
End
cofe
.
Arguments
gmapC
_
{
_
_
}
_
.
...
...
@@ -127,7 +127,7 @@ Proof.
lookup_insert_ne
//
lookup_partial_alter_ne
.
Qed
.
Lemma
gmap_cmra_mixin
:
C
MRA
Mixin
(
gmap
K
A
).
Lemma
gmap_cmra_mixin
:
C
mra
Mixin
(
gmap
K
A
).
Proof
.
apply
cmra_total_mixin
.
-
eauto
.
...
...
@@ -171,19 +171,19 @@ Proof.
*
by
rewrite
lookup_partial_alter
.
*
by
rewrite
lookup_partial_alter_ne
//
Hm2'
lookup_delete_ne
.
Qed
.
Canonical
Structure
gmapR
:
=
C
MRA
T
(
gmap
K
A
)
gmap_cmra_mixin
.
Canonical
Structure
gmapR
:
=
C
mra
T
(
gmap
K
A
)
gmap_cmra_mixin
.
Global
Instance
gmap_cmra_discrete
:
C
MRA
Discrete
A
→
C
MRA
Discrete
gmapR
.
Global
Instance
gmap_cmra_discrete
:
C
mra
Discrete
A
→
C
mra
Discrete
gmapR
.
Proof
.
split
;
[
apply
_
|].
intros
m
?
i
.
by
apply
:
cmra_discrete_valid
.
Qed
.
Lemma
gmap_ucmra_mixin
:
U
CMRA
Mixin
(
gmap
K
A
).
Lemma
gmap_ucmra_mixin
:
U
cmra
Mixin
(
gmap
K
A
).
Proof
.
split
.
-
by
intros
i
;
rewrite
lookup_empty
.
-
by
intros
m
i
;
rewrite
/=
lookup_op
lookup_empty
(
left_id_L
None
_
).
-
constructor
=>
i
.
by
rewrite
lookup_omap
lookup_empty
.
Qed
.
Canonical
Structure
gmapUR
:
=
U
CMRA
T
(
gmap
K
A
)
gmap_ucmra_mixin
.
Canonical
Structure
gmapUR
:
=
U
cmra
T
(
gmap
K
A
)
gmap_ucmra_mixin
.
(** Internalized properties *)
Lemma
gmap_equivI
{
M
}
m1
m2
:
m1
≡
m2
⊣
⊢
(
∀
i
,
m1
!!
i
≡
m2
!!
i
:
uPred
M
).
...
...
@@ -250,14 +250,14 @@ Lemma op_singleton (i : K) (x y : A) :
{[
i
:
=
x
]}
⋅
{[
i
:
=
y
]}
=
({[
i
:
=
x
⋅
y
]}
:
gmap
K
A
).
Proof
.
by
apply
(
merge_singleton
_
_
_
x
y
).
Qed
.
Global
Instance
gmap_
persistent
m
:
(
∀
x
:
A
,
Persistent
x
)
→
Persistent
m
.
Global
Instance
gmap_
core_id
m
:
(
∀
x
:
A
,
CoreId
x
)
→
CoreId
m
.
Proof
.
intros
;
apply
persistent
_total
=>
i
.
rewrite
lookup_core
.
apply
(
persistent
_core
_
).
intros
;
apply
core_id
_total
=>
i
.
rewrite
lookup_core
.
apply
(
core_id
_core
_
).
Qed
.
Global
Instance
gmap_singleton_
persistent
i
(
x
:
A
)
:
Persistent
x
→
Persistent
{[
i
:
=
x
]}.
Proof
.
intros
.
by
apply
persistent
_total
,
core_singleton'
.
Qed
.
Global
Instance
gmap_singleton_
core_id
i
(
x
:
A
)
:
CoreId
x
→
CoreId
{[
i
:
=
x
]}.
Proof
.
intros
.
by
apply
core_id
_total
,
core_singleton'
.
Qed
.
Lemma
singleton_includedN
n
m
i
x
:
{[
i
:
=
x
]}
≼
{
n
}
m
↔
∃
y
,
m
!!
i
≡
{
n
}
≡
Some
y
∧
Some
x
≼
{
n
}
Some
y
.
...
...
@@ -477,7 +477,7 @@ Instance gmap_fmap_ne `{Countable K} {A B : ofeT} (f : A → B) n :
Proper
(
dist
n
==>
dist
n
)
f
→
Proper
(
dist
n
==>
dist
n
)
(
fmap
(
M
:
=
gmap
K
)
f
).
Proof
.
by
intros
?
m
m'
Hm
k
;
rewrite
!
lookup_fmap
;
apply
option_fmap_ne
.
Qed
.
Instance
gmap_fmap_cmra_morphism
`
{
Countable
K
}
{
A
B
:
cmraT
}
(
f
:
A
→
B
)
`
{!
C
MRA
Morphism
f
}
:
C
MRA
Morphism
(
fmap
f
:
gmap
K
A
→
gmap
K
B
).
`
{!
C
mra
Morphism
f
}
:
C
mra
Morphism
(
fmap
f
:
gmap
K
A
→
gmap
K
B
).
Proof
.
split
;
try
apply
_
.
-
by
intros
n
m
?
i
;
rewrite
lookup_fmap
;
apply
(
cmra_morphism_validN
_
).
...
...
theories/algebra/gset.v
View file @
83c9c1c1
...
...
@@ -38,12 +38,12 @@ Section gset.
Qed
.
Canonical
Structure
gsetR
:
=
discreteR
(
gset
K
)
gset_ra_mixin
.
Global
Instance
gset_cmra_discrete
:
C
MRA
Discrete
gsetR
.
Global
Instance
gset_cmra_discrete
:
C
mra
Discrete
gsetR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Lemma
gset_ucmra_mixin
:
U
CMRA
Mixin
(
gset
K
).
Lemma
gset_ucmra_mixin
:
U
cmra
Mixin
(
gset
K
).
Proof
.
split
.
done
.
intros
X
.
by
rewrite
gset_op_union
left_id_L
.
done
.
Qed
.
Canonical
Structure
gsetUR
:
=
U
CMRA
T
(
gset
K
)
gset_ucmra_mixin
.
Canonical
Structure
gsetUR
:
=
U
cmra
T
(
gset
K
)
gset_ucmra_mixin
.
Lemma
gset_opM
X
mY
:
X
⋅
?
mY
=
X
∪
from_option
id
∅
mY
.
Proof
.
destruct
mY
;
by
rewrite
/=
?right_id_L
.
Qed
.
...
...
@@ -58,8 +58,8 @@ Section gset.
split
.
done
.
rewrite
gset_op_union
.
set_solver
.
Qed
.
Global
Instance
gset_
persistent
X
:
Persistent
X
.