Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Jonas Kastberg
iris
Commits
d1ec2aec
Commit
d1ec2aec
authored
Feb 01, 2017
by
Robbert Krebbers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Smarter constructors for ofeT, cmraT and ucmraT.
parent
9c0c4620
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
122 additions
and
73 deletions
+122
-73
theories/algebra/agree.v
theories/algebra/agree.v
+1
-2
theories/algebra/auth.v
theories/algebra/auth.v
+2
-3
theories/algebra/cmra.v
theories/algebra/cmra.v
+38
-32
theories/algebra/coPset.v
theories/algebra/coPset.v
+8
-4
theories/algebra/csum.v
theories/algebra/csum.v
+1
-2
theories/algebra/dra.v
theories/algebra/dra.v
+2
-0
theories/algebra/excl.v
theories/algebra/excl.v
+1
-2
theories/algebra/frac.v
theories/algebra/frac.v
+3
-0
theories/algebra/gmap.v
theories/algebra/gmap.v
+2
-4
theories/algebra/gset.v
theories/algebra/gset.v
+8
-4
theories/algebra/iprod.v
theories/algebra/iprod.v
+2
-4
theories/algebra/list.v
theories/algebra/list.v
+2
-3
theories/algebra/ofe.v
theories/algebra/ofe.v
+45
-8
theories/base_logic/big_op.v
theories/base_logic/big_op.v
+2
-4
theories/tests/ipm_paper.v
theories/tests/ipm_paper.v
+5
-1
No files found.
theories/algebra/agree.v
View file @
d1ec2aec
...
...
@@ -318,8 +318,7 @@ Proof.
+
by
rewrite
agree_idemp
.
+
by
move
:
Hval
;
rewrite
Hx
;
move
=>
/
agree_op_invN
->
;
rewrite
agree_idemp
.
Qed
.
Canonical
Structure
agreeR
:
cmraT
:
=
CMRAT
(
agree
A
)
agree_ofe_mixin
agree_cmra_mixin
.
Canonical
Structure
agreeR
:
cmraT
:
=
CMRAT
(
agree
A
)
agree_cmra_mixin
.
Global
Instance
agree_total
:
CMRATotal
agreeR
.
Proof
.
rewrite
/
CMRATotal
;
eauto
.
Qed
.
...
...
theories/algebra/auth.v
View file @
d1ec2aec
...
...
@@ -175,7 +175,7 @@ Proof.
as
(
b1
&
b2
&?&?&?)
;
auto
using
auth_own_validN
.
by
exists
(
Auth
ea1
b1
),
(
Auth
ea2
b2
).
Qed
.
Canonical
Structure
authR
:
=
CMRAT
(
auth
A
)
auth_ofe_mixin
auth_cmra_mixin
.
Canonical
Structure
authR
:
=
CMRAT
(
auth
A
)
auth_cmra_mixin
.
Global
Instance
auth_cmra_discrete
:
CMRADiscrete
A
→
CMRADiscrete
authR
.
Proof
.
...
...
@@ -194,8 +194,7 @@ Proof.
-
by
intros
x
;
constructor
;
rewrite
/=
left_id
.
-
do
2
constructor
;
simpl
;
apply
(
persistent_core
_
).
Qed
.
Canonical
Structure
authUR
:
=
UCMRAT
(
auth
A
)
auth_ofe_mixin
auth_cmra_mixin
auth_ucmra_mixin
.
Canonical
Structure
authUR
:
=
UCMRAT
(
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
.
...
...
theories/algebra/cmra.v
View file @
d1ec2aec
...
...
@@ -71,7 +71,11 @@ Structure cmraT := CMRAT' {
_
:
Type
}.
Arguments
CMRAT'
_
{
_
_
_
_
_
_
}
_
_
_
.
Notation
CMRAT
A
m
m'
:
=
(
CMRAT'
A
m
m'
A
).
(* Given [m : CMRAMixin A], the notation [CMRAT A m] provides a smart
constructor, which uses [ofe_mixin_of A] to infer the canonical OFE mixin of
the type [A], so that it does not have to be given manually. *)
Notation
CMRAT
A
m
:
=
(
CMRAT'
A
(
ofe_mixin_of
A
%
type
)
m
A
)
(
only
parsing
).
Arguments
cmra_car
:
simpl
never
.
Arguments
cmra_equiv
:
simpl
never
.
Arguments
cmra_dist
:
simpl
never
.
...
...
@@ -89,6 +93,10 @@ Hint Extern 0 (ValidN _) => eapply (@cmra_validN _) : typeclass_instances.
Coercion
cmra_ofeC
(
A
:
cmraT
)
:
ofeT
:
=
OfeT
A
(
cmra_ofe_mixin
A
).
Canonical
Structure
cmra_ofeC
.
Definition
cmra_mixin_of'
A
{
Ac
:
cmraT
}
(
f
:
Ac
→
A
)
:
CMRAMixin
Ac
:
=
cmra_mixin
Ac
.
Notation
cmra_mixin_of
A
:
=
ltac
:
(
let
H
:
=
eval
hnf
in
(
cmra_mixin_of'
A
id
)
in
exact
H
)
(
only
parsing
).
(** Lifting properties from the mixin *)
Section
cmra_mixin
.
Context
{
A
:
cmraT
}.
...
...
@@ -184,7 +192,8 @@ Structure ucmraT := UCMRAT' {
_
:
Type
;
}.
Arguments
UCMRAT'
_
{
_
_
_
_
_
_
_
}
_
_
_
_
.
Notation
UCMRAT
A
m
m'
m''
:
=
(
UCMRAT'
A
m
m'
m''
A
).
Notation
UCMRAT
A
m
:
=
(
UCMRAT'
A
(
ofe_mixin_of
A
%
type
)
(
cmra_mixin_of
A
%
type
)
m
A
)
(
only
parsing
).
Arguments
ucmra_car
:
simpl
never
.
Arguments
ucmra_equiv
:
simpl
never
.
Arguments
ucmra_dist
:
simpl
never
.
...
...
@@ -200,7 +209,7 @@ Hint Extern 0 (Empty _) => eapply (@ucmra_empty _) : typeclass_instances.
Coercion
ucmra_ofeC
(
A
:
ucmraT
)
:
ofeT
:
=
OfeT
A
(
ucmra_ofe_mixin
A
).
Canonical
Structure
ucmra_ofeC
.
Coercion
ucmra_cmraR
(
A
:
ucmraT
)
:
cmraT
:
=
CMRAT
A
(
ucmra_ofe_mixin
A
)
(
ucmra_cmra_mixin
A
).
CMRAT
'
A
(
ucmra_ofe_mixin
A
)
(
ucmra_cmra_mixin
A
)
A
.
Canonical
Structure
ucmra_cmraR
.
(** Lifting properties from the mixin *)
...
...
@@ -862,7 +871,7 @@ Record RAMixin A `{Equiv A, PCore A, Op A, Valid A} := {
Section
discrete
.
Local
Set
Default
Proof
Using
"Type*"
.
Context
`
{
Equiv
A
,
PCore
A
,
Op
A
,
Valid
A
,
@
Equivalence
A
(
≡
)
}
.
Context
`
{
Equiv
A
,
PCore
A
,
Op
A
,
Valid
A
}
(
Heq
:
@
Equivalence
A
(
≡
)
)
.
Context
(
ra_mix
:
RAMixin
A
).
Existing
Instances
discrete_dist
.
...
...
@@ -873,16 +882,18 @@ Section discrete.
-
intros
x
;
split
;
first
done
.
by
move
=>
/(
_
0
).
-
intros
n
x
y1
y2
??
;
by
exists
y1
,
y2
.
Qed
.
Instance
discrete_cmra_discrete
:
CMRADiscrete
(
CMRAT'
A
(
discrete_ofe_mixin
Heq
)
discrete_cmra_mixin
A
).
Proof
.
split
.
apply
_
.
done
.
Qed
.
End
discrete
.
(** A smart constructor for the discrete RA over a carrier [A]. It uses
[discrete_ofe_equivalence_of A] to make sure the same [Equivalence] proof is
used as when constructing the OFE. *)
Notation
discreteR
A
ra_mix
:
=
(
CMRAT
A
discrete_ofe_mixin
(
discrete_cmra_mixin
ra_mix
)).
Notation
discreteUR
A
ra_mix
ucmra_mix
:
=
(
UCMRAT
A
discrete_ofe_mixin
(
discrete_cmra_mixin
ra_mix
)
ucmra_mix
).
Global
Instance
discrete_cmra_discrete
`
{
Equiv
A
,
PCore
A
,
Op
A
,
Valid
A
,
@
Equivalence
A
(
≡
)}
(
ra_mix
:
RAMixin
A
)
:
CMRADiscrete
(
discreteR
A
ra_mix
).
Proof
.
split
.
apply
_
.
done
.
Qed
.
(
CMRAT
A
(
discrete_cmra_mixin
(
discrete_ofe_equivalence_of
A
%
type
)
ra_mix
))
(
only
parsing
).
Section
ra_total
.
Local
Set
Default
Proof
Using
"Type*"
.
...
...
@@ -918,13 +929,12 @@ Section unit.
Instance
unit_op
:
Op
()
:
=
λ
x
y
,
().
Lemma
unit_cmra_mixin
:
CMRAMixin
().
Proof
.
apply
discrete_cmra_mixin
,
ra_total_mixin
;
by
eauto
.
Qed
.
Canonical
Structure
unitR
:
cmraT
:
=
CMRAT
()
unit
_ofe_mixin
unit_cmra_mixin
.
Canonical
Structure
unitR
:
cmraT
:
=
CMRAT
unit
unit_cmra_mixin
.
Instance
unit_empty
:
Empty
()
:
=
().
Lemma
unit_ucmra_mixin
:
UCMRAMixin
().
Proof
.
done
.
Qed
.
Canonical
Structure
unitUR
:
ucmraT
:
=
UCMRAT
()
unit_ofe_mixin
unit_cmra_mixin
unit_ucmra_mixin
.
Canonical
Structure
unitUR
:
ucmraT
:
=
UCMRAT
unit
unit_ucmra_mixin
.
Global
Instance
unit_cmra_discrete
:
CMRADiscrete
unitR
.
Proof
.
done
.
Qed
.
...
...
@@ -957,14 +967,13 @@ Section nat.
Qed
.
Canonical
Structure
natR
:
cmraT
:
=
discreteR
nat
nat_ra_mixin
.
Global
Instance
nat_cmra_discrete
:
CMRADiscrete
natR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Instance
nat_empty
:
Empty
nat
:
=
0
.
Lemma
nat_ucmra_mixin
:
UCMRAMixin
nat
.
Proof
.
split
;
apply
_
||
done
.
Qed
.
Canonical
Structure
natUR
:
ucmraT
:
=
discreteUR
nat
nat_ra_mixin
nat_ucmra_mixin
.
Global
Instance
nat_cmra_discrete
:
CMRADiscrete
natR
.
Proof
.
constructor
;
apply
_
||
done
.
Qed
.
Canonical
Structure
natUR
:
ucmraT
:
=
UCMRAT
nat
nat_ucmra_mixin
.
Global
Instance
nat_cancelable
(
x
:
nat
)
:
Cancelable
x
.
Proof
.
by
intros
????
?%
Nat
.
add_cancel_l
.
Qed
.
...
...
@@ -995,14 +1004,14 @@ Section mnat.
Qed
.
Canonical
Structure
mnatR
:
cmraT
:
=
discreteR
mnat
mnat_ra_mixin
.
Global
Instance
mnat_cmra_discrete
:
CMRADiscrete
mnatR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Instance
mnat_empty
:
Empty
mnat
:
=
0
.
Lemma
mnat_ucmra_mixin
:
UCMRAMixin
mnat
.
Proof
.
split
;
apply
_
||
done
.
Qed
.
Canonical
Structure
mnatUR
:
ucmraT
:
=
discreteUR
mnat
mnat_ra_mixin
mnat_ucmra_mixin
.
Canonical
Structure
mnatUR
:
ucmraT
:
=
UCMRAT
mnat
mnat_ucmra_mixin
.
Global
Instance
mnat_cmra_discrete
:
CMRADiscrete
mnatR
.
Proof
.
constructor
;
apply
_
||
done
.
Qed
.
Global
Instance
mnat_persistent
(
x
:
mnat
)
:
Persistent
x
.
Proof
.
by
constructor
.
Qed
.
End
mnat
.
...
...
@@ -1030,7 +1039,8 @@ Section positive.
Canonical
Structure
positiveR
:
cmraT
:
=
discreteR
positive
pos_ra_mixin
.
Global
Instance
pos_cmra_discrete
:
CMRADiscrete
positiveR
.
Proof
.
constructor
;
apply
_
||
done
.
Qed
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Global
Instance
pos_cancelable
(
x
:
positive
)
:
Cancelable
x
.
Proof
.
intros
n
y
z
??.
by
eapply
Pos
.
add_reg_l
,
leibniz_equiv
.
Qed
.
Global
Instance
pos_id_free
(
x
:
positive
)
:
IdFree
x
.
...
...
@@ -1105,8 +1115,7 @@ Section prod.
destruct
(
cmra_extend
n
(
x
.
2
)
(
y1
.
2
)
(
y2
.
2
))
as
(
z21
&
z22
&?&?&?)
;
auto
.
by
exists
(
z11
,
z21
),
(
z12
,
z22
).
Qed
.
Canonical
Structure
prodR
:
=
CMRAT
(
A
*
B
)
prod_ofe_mixin
prod_cmra_mixin
.
Canonical
Structure
prodR
:
=
CMRAT
(
prod
A
B
)
prod_cmra_mixin
.
Lemma
pair_op
(
a
a'
:
A
)
(
b
b'
:
B
)
:
(
a
,
b
)
⋅
(
a'
,
b'
)
=
(
a
⋅
a'
,
b
⋅
b'
).
Proof
.
done
.
Qed
.
...
...
@@ -1153,8 +1162,7 @@ Section prod_unit.
-
by
split
;
rewrite
/=
left_id
.
-
rewrite
prod_pcore_Some'
;
split
;
apply
(
persistent
_
).
Qed
.
Canonical
Structure
prodUR
:
=
UCMRAT
(
A
*
B
)
prod_ofe_mixin
prod_cmra_mixin
prod_ucmra_mixin
.
Canonical
Structure
prodUR
:
=
UCMRAT
(
prod
A
B
)
prod_ucmra_mixin
.
Lemma
pair_split
(
x
:
A
)
(
y
:
B
)
:
(
x
,
y
)
≡
(
x
,
∅
)
⋅
(
∅
,
y
).
Proof
.
by
rewrite
pair_op
left_id
right_id
.
Qed
.
...
...
@@ -1289,8 +1297,7 @@ Section option.
+
by
exists
None
,
(
Some
x
)
;
repeat
constructor
.
+
exists
None
,
None
;
repeat
constructor
.
Qed
.
Canonical
Structure
optionR
:
=
CMRAT
(
option
A
)
option_ofe_mixin
option_cmra_mixin
.
Canonical
Structure
optionR
:
=
CMRAT
(
option
A
)
option_cmra_mixin
.
Global
Instance
option_cmra_discrete
:
CMRADiscrete
A
→
CMRADiscrete
optionR
.
Proof
.
split
;
[
apply
_
|].
by
intros
[
x
|]
;
[
apply
(
cmra_discrete_valid
x
)|].
Qed
.
...
...
@@ -1298,8 +1305,7 @@ Section option.
Instance
option_empty
:
Empty
(
option
A
)
:
=
None
.
Lemma
option_ucmra_mixin
:
UCMRAMixin
optionR
.
Proof
.
split
.
done
.
by
intros
[].
done
.
Qed
.
Canonical
Structure
optionUR
:
=
UCMRAT
(
option
A
)
option_ofe_mixin
option_cmra_mixin
option_ucmra_mixin
.
Canonical
Structure
optionUR
:
=
UCMRAT
(
option
A
)
option_ucmra_mixin
.
(** Misc *)
Global
Instance
Some_cmra_monotone
:
CMRAMonotone
Some
.
...
...
theories/algebra/coPset.v
View file @
d1ec2aec
...
...
@@ -38,10 +38,12 @@ Section coPset.
Qed
.
Canonical
Structure
coPsetR
:
=
discreteR
coPset
coPset_ra_mixin
.
Global
Instance
coPset_cmra_discrete
:
CMRADiscrete
coPsetR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Lemma
coPset_ucmra_mixin
:
UCMRAMixin
coPset
.
Proof
.
split
.
done
.
intros
X
.
by
rewrite
coPset_op_union
left_id_L
.
done
.
Qed
.
Canonical
Structure
coPsetUR
:
=
discreteUR
coPset
coPset_ra_mixin
coPset_ucmra_mixin
.
Canonical
Structure
coPsetUR
:
=
UCMRAT
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
.
...
...
@@ -109,8 +111,10 @@ Section coPset_disj.
Qed
.
Canonical
Structure
coPset_disjR
:
=
discreteR
coPset_disj
coPset_disj_ra_mixin
.
Global
Instance
coPset_disj_cmra_discrete
:
CMRADiscrete
coPset_disjR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Lemma
coPset_disj_ucmra_mixin
:
UCMRAMixin
coPset_disj
.
Proof
.
split
;
try
apply
_
||
done
.
intros
[
X
|]
;
coPset_disj_solve
.
Qed
.
Canonical
Structure
coPset_disjUR
:
=
discreteUR
coPset_disj
coPset_disj_ra_mixin
coPset_disj_ucmra_mixin
.
Canonical
Structure
coPset_disjUR
:
=
UCMRAT
coPset_disj
coPset_disj_ucmra_mixin
.
End
coPset_disj
.
theories/algebra/csum.v
View file @
d1ec2aec
...
...
@@ -246,8 +246,7 @@ Proof.
exists
(
Cinr
z1
),
(
Cinr
z2
).
by
repeat
constructor
.
+
by
exists
CsumBot
,
CsumBot
;
destruct
y1
,
y2
;
inversion_clear
Hx'
.
Qed
.
Canonical
Structure
csumR
:
=
CMRAT
(
csum
A
B
)
csum_ofe_mixin
csum_cmra_mixin
.
Canonical
Structure
csumR
:
=
CMRAT
(
csum
A
B
)
csum_cmra_mixin
.
Global
Instance
csum_cmra_discrete
:
CMRADiscrete
A
→
CMRADiscrete
B
→
CMRADiscrete
csumR
.
...
...
theories/algebra/dra.v
View file @
d1ec2aec
...
...
@@ -177,6 +177,8 @@ Qed.
Canonical
Structure
validityR
:
cmraT
:
=
discreteR
(
validity
A
)
validity_ra_mixin
.
Global
Instance
validity_cmra_disrete
:
CMRADiscrete
validityR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Global
Instance
validity_cmra_total
:
CMRATotal
validityR
.
Proof
.
rewrite
/
CMRATotal
;
eauto
.
Qed
.
...
...
theories/algebra/excl.v
View file @
d1ec2aec
...
...
@@ -101,8 +101,7 @@ Proof.
-
by
intros
n
[?|]
[?|].
-
intros
n
x
[?|]
[?|]
?
;
inversion_clear
1
;
eauto
.
Qed
.
Canonical
Structure
exclR
:
=
CMRAT
(
excl
A
)
excl_ofe_mixin
excl_cmra_mixin
.
Canonical
Structure
exclR
:
=
CMRAT
(
excl
A
)
excl_cmra_mixin
.
Global
Instance
excl_cmra_discrete
:
Discrete
A
→
CMRADiscrete
exclR
.
Proof
.
split
.
apply
_
.
by
intros
[].
Qed
.
...
...
theories/algebra/frac.v
View file @
d1ec2aec
...
...
@@ -29,6 +29,9 @@ Proof.
rewrite
-{
1
}(
Qcplus_0_r
x
)
-
Qcplus_le_mono_l
;
auto
using
Qclt_le_weak
.
Qed
.
Canonical
Structure
fracR
:
=
discreteR
frac
frac_ra_mixin
.
Global
Instance
frac_cmra_discrete
:
CMRADiscrete
fracR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
End
frac
.
Global
Instance
frac_full_exclusive
:
Exclusive
1
%
Qp
.
...
...
theories/algebra/gmap.v
View file @
d1ec2aec
...
...
@@ -170,8 +170,7 @@ Proof.
*
by
rewrite
lookup_partial_alter
.
*
by
rewrite
lookup_partial_alter_ne
//
Hm2'
lookup_delete_ne
.
Qed
.
Canonical
Structure
gmapR
:
=
CMRAT
(
gmap
K
A
)
gmap_ofe_mixin
gmap_cmra_mixin
.
Canonical
Structure
gmapR
:
=
CMRAT
(
gmap
K
A
)
gmap_cmra_mixin
.
Global
Instance
gmap_cmra_discrete
:
CMRADiscrete
A
→
CMRADiscrete
gmapR
.
Proof
.
split
;
[
apply
_
|].
intros
m
?
i
.
by
apply
:
cmra_discrete_valid
.
Qed
.
...
...
@@ -183,8 +182,7 @@ Proof.
-
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
:
=
UCMRAT
(
gmap
K
A
)
gmap_ofe_mixin
gmap_cmra_mixin
gmap_ucmra_mixin
.
Canonical
Structure
gmapUR
:
=
UCMRAT
(
gmap
K
A
)
gmap_ucmra_mixin
.
(** Internalized properties *)
Lemma
gmap_equivI
{
M
}
m1
m2
:
m1
≡
m2
⊣
⊢
(
∀
i
,
m1
!!
i
≡
m2
!!
i
:
uPred
M
).
...
...
theories/algebra/gset.v
View file @
d1ec2aec
...
...
@@ -37,10 +37,12 @@ Section gset.
Qed
.
Canonical
Structure
gsetR
:
=
discreteR
(
gset
K
)
gset_ra_mixin
.
Global
Instance
gset_cmra_discrete
:
CMRADiscrete
gsetR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Lemma
gset_ucmra_mixin
:
UCMRAMixin
(
gset
K
).
Proof
.
split
.
done
.
intros
X
.
by
rewrite
gset_op_union
left_id_L
.
done
.
Qed
.
Canonical
Structure
gsetUR
:
=
discreteUR
(
gset
K
)
gset_ra_mixin
gset_ucmra_mixin
.
Canonical
Structure
gsetUR
:
=
UCMRAT
(
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
.
...
...
@@ -120,10 +122,12 @@ Section gset_disj.
Qed
.
Canonical
Structure
gset_disjR
:
=
discreteR
(
gset_disj
K
)
gset_disj_ra_mixin
.
Global
Instance
gset_disj_cmra_discrete
:
CMRADiscrete
gset_disjR
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Lemma
gset_disj_ucmra_mixin
:
UCMRAMixin
(
gset_disj
K
).
Proof
.
split
;
try
apply
_
||
done
.
intros
[
X
|]
;
gset_disj_solve
.
Qed
.
Canonical
Structure
gset_disjUR
:
=
discreteUR
(
gset_disj
K
)
gset_disj_ra_mixin
gset_disj_ucmra_mixin
.
Canonical
Structure
gset_disjUR
:
=
UCMRAT
(
gset_disj
K
)
gset_disj_ucmra_mixin
.
Arguments
op
_
_
_
_
:
simpl
never
.
...
...
theories/algebra/iprod.v
View file @
d1ec2aec
...
...
@@ -126,8 +126,7 @@ Section iprod_cmra.
exists
(
y1
,
y2
)
;
eauto
.
}
exists
(
λ
x
,
gg
x
.
1
),
(
λ
x
,
gg
x
.
2
).
split_and
!=>
-?
;
naive_solver
.
Qed
.
Canonical
Structure
iprodR
:
=
CMRAT
(
iprod
B
)
iprod_ofe_mixin
iprod_cmra_mixin
.
Canonical
Structure
iprodR
:
=
CMRAT
(
iprod
B
)
iprod_cmra_mixin
.
Instance
iprod_empty
:
Empty
(
iprod
B
)
:
=
λ
x
,
∅
.
Definition
iprod_lookup_empty
x
:
∅
x
=
∅
:
=
eq_refl
.
...
...
@@ -139,8 +138,7 @@ Section iprod_cmra.
-
by
intros
f
x
;
rewrite
iprod_lookup_op
left_id
.
-
constructor
=>
x
.
apply
persistent_core
,
_
.
Qed
.
Canonical
Structure
iprodUR
:
=
UCMRAT
(
iprod
B
)
iprod_ofe_mixin
iprod_cmra_mixin
iprod_ucmra_mixin
.
Canonical
Structure
iprodUR
:
=
UCMRAT
(
iprod
B
)
iprod_ucmra_mixin
.
Global
Instance
iprod_empty_timeless
:
(
∀
i
,
Timeless
(
∅
:
B
i
))
→
Timeless
(
∅
:
iprod
B
).
...
...
theories/algebra/list.v
View file @
d1ec2aec
...
...
@@ -219,7 +219,7 @@ Section cmra.
(
cmra_extend
n
x
y1
y2
)
as
(
y1'
&
y2'
&?&?&?)
;
simplify_eq
/=
;
auto
.
exists
(
y1'
::
l1'
),
(
y2'
::
l2'
)
;
repeat
constructor
;
auto
.
Qed
.
Canonical
Structure
listR
:
=
CMRAT
(
list
A
)
list_ofe_mixin
list_cmra_mixin
.
Canonical
Structure
listR
:
=
CMRAT
(
list
A
)
list_cmra_mixin
.
Global
Instance
empty_list
:
Empty
(
list
A
)
:
=
[].
Definition
list_ucmra_mixin
:
UCMRAMixin
(
list
A
).
...
...
@@ -229,8 +229,7 @@ Section cmra.
-
by
intros
l
.
-
by
constructor
.
Qed
.
Canonical
Structure
listUR
:
=
UCMRAT
(
list
A
)
list_ofe_mixin
list_cmra_mixin
list_ucmra_mixin
.
Canonical
Structure
listUR
:
=
UCMRAT
(
list
A
)
list_ucmra_mixin
.
Global
Instance
list_cmra_discrete
:
CMRADiscrete
A
→
CMRADiscrete
listR
.
Proof
.
...
...
theories/algebra/ofe.v
View file @
d1ec2aec
...
...
@@ -57,6 +57,31 @@ Arguments ofe_equiv : simpl never.
Arguments
ofe_dist
:
simpl
never
.
Arguments
ofe_mixin
:
simpl
never
.
(** When declaring instances of subclasses of OFE (like CMRAs and unital CMRAs)
we need Coq to *infer* the canonical OFE instance of a given type and take the
mixin out of it. This makes sure we do not use two different OFE instances in
different places (see for example the constructors [CMRAT] and [UCMRAT] in the
file [cmra.v].)
In order to infer the OFE instance, we use the definition [ofe_mixin_of'] which
is inspired by the [clone] trick in ssreflect. It works as follows, when type
checking [@ofe_mixin_of' A ?Ac id] Coq faces a unification problem:
ofe_car ?Ac ~ A
which will resolve [?Ac] to the canonical OFE instance corresponding to [A]. The
definition [@ofe_mixin_of' A ?Ac id] will then provide the corresponding mixin.
Note that type checking of [ofe_mixin_of' A id] will fail when [A] does not have
a canonical OFE instance.
The notation [ofe_mixin_of A] that we define on top of [ofe_mixin_of' A id]
hides the [id] and normalizes the mixin to head normal form. The latter is to
ensure that we do not end up with redundant canonical projections to the mixin,
i.e. them all being of the shape [ofe_mixin_of' A id]. *)
Definition
ofe_mixin_of'
A
{
Ac
:
ofeT
}
(
f
:
Ac
→
A
)
:
OfeMixin
Ac
:
=
ofe_mixin
Ac
.
Notation
ofe_mixin_of
A
:
=
ltac
:
(
let
H
:
=
eval
hnf
in
(
ofe_mixin_of'
A
id
)
in
exact
H
)
(
only
parsing
).
(** Lifting properties from the mixin *)
Section
ofe_mixin
.
Context
{
A
:
ofeT
}.
...
...
@@ -100,8 +125,7 @@ Class Cofe (A : ofeT) := {
}.
Arguments
compl
:
simpl
never
.
Lemma
compl_chain_map
`
{
Cofe
A
,
Cofe
B
}
(
f
:
A
→
B
)
c
`
(
NonExpansive
f
)
:
Lemma
compl_chain_map
`
{
Cofe
A
,
Cofe
B
}
(
f
:
A
→
B
)
c
`
(
NonExpansive
f
)
:
compl
(
chain_map
f
c
)
≡
f
(
compl
c
).
Proof
.
apply
equiv_dist
=>
n
.
by
rewrite
!
conv_compl
.
Qed
.
...
...
@@ -109,7 +133,7 @@ Proof. apply equiv_dist=>n. by rewrite !conv_compl. Qed.
Section
cofe
.
Context
{
A
:
ofeT
}.
Implicit
Types
x
y
:
A
.
Global
Instance
c
ofe_equivalence
:
Equivalence
((
≡
)
:
relation
A
).
Global
Instance
ofe_equivalence
:
Equivalence
((
≡
)
:
relation
A
).
Proof
.
split
.
-
by
intros
x
;
rewrite
equiv_dist
.
...
...
@@ -784,7 +808,7 @@ Qed.
(** Discrete cofe *)
Section
discrete_cofe
.
Context
`
{
Equiv
A
,
@
Equivalence
A
(
≡
)
}
.
Context
`
{
Equiv
A
}
(
Heq
:
@
Equivalence
A
(
≡
)
)
.
Instance
discrete_dist
:
Dist
A
:
=
λ
n
x
y
,
x
≡
y
.
Definition
discrete_ofe_mixin
:
OfeMixin
A
.
...
...
@@ -795,6 +819,9 @@ Section discrete_cofe.
-
done
.
Qed
.
Global
Instance
discrete_discrete_ofe
:
Discrete
(
OfeT
A
discrete_ofe_mixin
).
Proof
.
by
intros
x
y
.
Qed
.
Global
Program
Instance
discrete_cofe
:
Cofe
(
OfeT
A
discrete_ofe_mixin
)
:
=
{
compl
c
:
=
c
0
}.
Next
Obligation
.
...
...
@@ -803,12 +830,22 @@ Section discrete_cofe.
Qed
.
End
discrete_cofe
.
Notation
discreteC
A
:
=
(
OfeT
A
discrete_ofe_mixin
).
Notation
discreteC
A
:
=
(
OfeT
A
(
discrete_ofe_mixin
_
)
).
Notation
leibnizC
A
:
=
(
OfeT
A
(@
discrete_ofe_mixin
_
equivL
_
)).
Instance
discrete_discrete_cofe
`
{
Equiv
A
,
@
Equivalence
A
(
≡
)}
:
Discrete
(
discreteC
A
).
Proof
.
by
intros
x
y
.
Qed
.
(** In order to define a discrete CMRA with carrier [A] (in the file [cmra.v])
we need to determine the [Equivalence A] proof that was used to construct the
OFE instance of [A] (note that this proof is not the same as the one we obtain
via [ofe_equivalence]).
We obtain the proof of [Equivalence A] by inferring the canonical OFE mixin
using [ofe_mixin_of A], and then check whether it is indeed a discrete OFE. This
will fail if no OFE, or an OFE other than the discrete OFE, was registered. *)
Notation
discrete_ofe_equivalence_of
A
:
=
ltac
:
(
match
constr
:
(
ofe_mixin_of
A
)
with
|
discrete_ofe_mixin
?H
=>
exact
H
end
)
(
only
parsing
).
Instance
leibnizC_leibniz
A
:
LeibnizEquiv
(
leibnizC
A
).
Proof
.
by
intros
x
y
.
Qed
.
...
...
theories/base_logic/big_op.v
View file @
d1ec2aec
...
...
@@ -52,8 +52,7 @@ Section cmra.
by
rewrite
left_id
.
Qed
.
Canonical
Structure
uPredR
:
=
CMRAT
(
uPred
M
)
uPred_ofe_mixin
uPred_cmra_mixin
.
Canonical
Structure
uPredR
:
=
CMRAT
(
uPred
M
)
uPred_cmra_mixin
.
Instance
uPred_empty
:
Empty
(
uPred
M
)
:
=
True
%
I
.
...
...
@@ -64,8 +63,7 @@ Section cmra.
-
intros
P
.
by
rewrite
left_id
.
Qed
.
Canonical
Structure
uPredUR
:
=
UCMRAT
(
uPred
M
)
uPred_ofe_mixin
uPred_cmra_mixin
uPred_ucmra_mixin
.
Canonical
Structure
uPredUR
:
=
UCMRAT
(
uPred
M
)
uPred_ucmra_mixin
.
Global
Instance
uPred_always_homomorphism
:
UCMRAHomomorphism
uPred_always
.
Proof
.
split
;
[
split
|].
apply
_
.
apply
always_sep
.
apply
always_pure
.
Qed
.
...
...
theories/tests/ipm_paper.v
View file @
d1ec2aec
...
...
@@ -151,12 +151,16 @@ Section M.
-
intros
[
n1
|
i1
|]
[
n2
|
i2
|]
;
simpl
;
by
try
case_decide
.
Qed
.
Canonical
Structure
M_R
:
cmraT
:
=
discreteR
M
M_ra_mixin
.
Global
Instance
M_cmra_discrete
:
CMRADiscrete
M_R
.
Proof
.
apply
discrete_cmra_discrete
.
Qed
.
Definition
M_ucmra_mixin
:
UCMRAMixin
M
.
Proof
.
split
;
try
(
done
||
apply
_
).
intros
[?|?|]
;
simpl
;
try
case_decide
;
f_equal
/=
;
lia
.
Qed
.
Canonical
Structure
M_UR
:
ucmraT
:
=
discreteUR
M
M_ra_mixin
M_ucmra_mixin
.
Canonical
Structure
M_UR
:
ucmraT
:
=
UCMRAT
M
M_ucmra_mixin
.
Global
Instance
frag_persistent
n
:
Persistent
(
Frag
n
).
Proof
.
by
constructor
.
Qed
.
...
...
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