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
Joshua Yanovski
iris-coq
Commits
d7037802
Commit
d7037802
authored
Apr 07, 2017
by
Jacques-Henri Jourdan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
A notion of CMRA morphims based on the compatibility with validity, core and composition.
parent
e5bb24e7
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
94 additions
and
90 deletions
+94
-90
theories/algebra/agree.v
theories/algebra/agree.v
+4
-4
theories/algebra/auth.v
theories/algebra/auth.v
+5
-5
theories/algebra/cmra.v
theories/algebra/cmra.v
+50
-43
theories/algebra/csum.v
theories/algebra/csum.v
+5
-6
theories/algebra/excl.v
theories/algebra/excl.v
+3
-8
theories/algebra/gmap.v
theories/algebra/gmap.v
+6
-5
theories/algebra/iprod.v
theories/algebra/iprod.v
+5
-5
theories/algebra/list.v
theories/algebra/list.v
+7
-5
theories/base_logic/upred.v
theories/base_logic/upred.v
+9
-9
No files found.
theories/algebra/agree.v
View file @
d7037802
...
...
@@ -443,15 +443,15 @@ Section agree_map.
apply
list_fmap_ext_ne
=>
y
.
by
apply
equiv_dist
.
Qed
.
Global
Instance
agree_map_mo
notone
:
CMRAMo
notone
(
agree_map
f
).
Global
Instance
agree_map_mo
rphism
:
CMRAMo
rphism
(
agree_map
f
).
Proof
using
Hyps
.
split
;
first
apply
_.
-
intros
n
x
.
rewrite
/
cmra_validN
/
validN
/=
/
agree_validN
/=
=>
?
.
change
(
list_agrees
(
dist
n
)
(
f
<
$
>
agree_list
x
)).
eapply
(
list_agrees_fmap
_
_
_
);
done
.
-
intros
x
y
;
rewrite
!
agree_included
=>
->
.
rewrite
/
equiv
/
agree_equiv
/
agree_map
/
agree_op
/
agree_list
/=
.
rewrite
!
fmap_app
=>
n
.
apply
:
list_setequiv_equiv
.
set_solver
+
.
-
done
.
-
intros
x
y
n
.
apply
:
list_setequiv_equiv
=>
b
.
rewrite
/
agree_list
/=
!
fmap_app
.
set_solver
+
.
Qed
.
End
agree_map
.
...
...
theories/algebra/auth.v
View file @
d7037802
...
...
@@ -272,14 +272,14 @@ Proof.
intros
f
g
Hf
[
??
]
[
??
]
[
??
];
split
;
simpl
in
*
;
[
|
by
apply
Hf
].
apply
option_fmap_ne
;
[
|
done
]
=>
x
y
?
;
by
apply
excl_map_ne
.
Qed
.
Instance
auth_map_cmra_mo
notone
{
A
B
:
ucmraT
}
(
f
:
A
→
B
)
:
CMRAMo
notone
f
→
CMRAMo
notone
(
auth_map
f
).
Instance
auth_map_cmra_mo
rphism
{
A
B
:
ucmraT
}
(
f
:
A
→
B
)
:
CMRAMo
rphism
f
→
CMRAMo
rphism
(
auth_map
f
).
Proof
.
split
;
try
apply
_.
-
intros
n
[[[
a
|
]
|
]
b
];
rewrite
!
auth_validN_eq
;
try
naive_solver
eauto
using
cmra_monotoneN
,
cmra_mo
notone
_validN
.
-
by
intros
[
x
a
]
[
y
b
];
rewrite
!
auth_included
/=
;
intros
[
??
];
split
;
simpl
;
apply
:
cmra_monotone
.
naive_solver
eauto
using
cmra_
morphism_
monotoneN
,
cmra_mo
rphism
_validN
.
-
intros
[
??
].
apply
Some_proper
.
by
f_equiv
;
rewrite
/=
cmra_morphism_core
.
-
intros
[
[
?|
]
?
]
[[
?|
]
?
];
try
apply
Auth_proper
=>
//=; by rewrite cmra_morphism_op
.
Qed
.
Definition
authC_map
{
A
B
}
(
f
:
A
-
n
>
B
)
:
authC
A
-
n
>
authC
B
:=
CofeMor
(
auth_map
f
).
...
...
theories/algebra/cmra.v
View file @
d7037802
...
...
@@ -235,13 +235,15 @@ Class CMRADiscrete (A : cmraT) := {
}
.
(
**
*
Morphisms
*
)
Class
CMRAMonotone
{
A
B
:
cmraT
}
(
f
:
A
→
B
)
:=
{
cmra_monotone_ne
:>
NonExpansive
f
;
cmra_monotone_validN
n
x
:
✓
{
n
}
x
→
✓
{
n
}
f
x
;
cmra_monotone
x
y
:
x
≼
y
→
f
x
≼
f
y
Class
CMRAMorphism
{
A
B
:
cmraT
}
(
f
:
A
→
B
)
:=
{
cmra_morphism_ne
:>
NonExpansive
f
;
cmra_morphism_validN
n
x
:
✓
{
n
}
x
→
✓
{
n
}
f
x
;
cmra_morphism_pcore
x
:
pcore
(
f
x
)
≡
f
<
$
>
pcore
x
;
cmra_morphism_op
x
y
:
f
x
⋅
f
y
≡
f
(
x
⋅
y
)
}
.
Arguments
cmra_monotone_validN
{
_
_
}
_
{
_
}
_
_
_.
Arguments
cmra_monotone
{
_
_
}
_
{
_
}
_
_
_.
Arguments
cmra_morphism_validN
{
_
_
}
_
{
_
}
_
_
_.
Arguments
cmra_morphism_pcore
{
_
_
}
_
{
_
}
_.
Arguments
cmra_morphism_op
{
_
_
}
_
{
_
}
_
_.
(
**
*
Properties
**
)
Section
cmra
.
...
...
@@ -716,30 +718,33 @@ Section cmra_total.
Qed
.
End
cmra_total
.
(
**
*
Properties
about
monotone
functions
*
)
Instance
cmra_monotone_id
{
A
:
cmraT
}
:
CMRAMonotone
(
@
id
A
).
Proof
.
repeat
split
;
by
try
apply
_.
Qed
.
Instance
cmra_monotone_compose
{
A
B
C
:
cmraT
}
(
f
:
A
→
B
)
(
g
:
B
→
C
)
:
CMRAMonotone
f
→
CMRAMonotone
g
→
CMRAMonotone
(
g
∘
f
).
(
**
*
Properties
about
morphisms
*
)
Instance
cmra_morphism_id
{
A
:
cmraT
}
:
CMRAMorphism
(
@
id
A
).
Proof
.
split
=>
//=. apply _. intros. by rewrite option_fmap_id. Qed.
Instance
cmra_morphism_proper
{
A
B
:
cmraT
}
(
f
:
A
→
B
)
`
{!
CMRAMorphism
f
}
:
Proper
((
≡
)
==>
(
≡
))
f
:=
ne_proper
_.
Instance
cmra_morphism_compose
{
A
B
C
:
cmraT
}
(
f
:
A
→
B
)
(
g
:
B
→
C
)
:
CMRAMorphism
f
→
CMRAMorphism
g
→
CMRAMorphism
(
g
∘
f
).
Proof
.
split
.
-
apply
_.
-
move
=>
n
x
Hx
/=
.
by
apply
cmra_monotone_validN
,
cmra_monotone_validN
.
-
move
=>
x
y
Hxy
/=
.
by
apply
cmra_monotone
,
cmra_monotone
.
-
move
=>
n
x
Hx
/=
.
by
apply
cmra_morphism_validN
,
cmra_morphism_validN
.
-
move
=>
x
/=
.
by
rewrite
2
!
cmra_morphism_pcore
option_fmap_compose
.
-
move
=>
x
y
/=
.
by
rewrite
!
cmra_morphism_op
.
Qed
.
Section
cmra_mo
notone
.
Section
cmra_mo
rphism
.
Local
Set
Default
Proof
Using
"Type*"
.
Context
{
A
B
:
cmraT
}
(
f
:
A
→
B
)
`
{!
CMRAMo
notone
f
}
.
Global
Instance
cmra_monotone_proper
:
Proper
((
≡
)
==>
(
≡
))
f
:=
ne_proper
_
.
Lemma
cmra_monotoneN
n
x
y
:
x
≼
{
n
}
y
→
f
x
≼
{
n
}
f
y
.
Proof
.
intros
[
z
->
].
apply
cmra_included_includedN
,
(
cmra_monotone
f
),
cmra_included_l
.
Qed
.
Context
{
A
B
:
cmraT
}
(
f
:
A
→
B
)
`
{!
CMRAMo
rphism
f
}
.
Lemma
cmra_morphism_core
x
:
core
(
f
x
)
≡
f
(
core
x
)
.
Proof
.
unfold
core
,
core
'
.
rewrite
cmra_morphism_pcore
.
by
destruct
(
pcore
x
).
Qed
.
Lemma
cmra_morphism_monotone
x
y
:
x
≼
y
→
f
x
≼
f
y
.
Proof
.
intros
[
z
->
].
exists
(
f
z
).
by
rewrite
cmra_morphism_op
.
Qed
.
Lemma
cmra_morphism_monotoneN
n
x
y
:
x
≼
{
n
}
y
→
f
x
≼
{
n
}
f
y
.
Proof
.
intros
[
z
->
].
exists
(
f
z
).
by
rewrite
cmra_morphism_op
.
Qed
.
Lemma
cmra_monotone_valid
x
:
✓
x
→
✓
f
x
.
Proof
.
rewrite
!
cmra_valid_validN
;
eauto
using
cmra_mo
notone
_validN
.
Qed
.
End
cmra_mo
notone
.
Proof
.
rewrite
!
cmra_valid_validN
;
eauto
using
cmra_mo
rphism
_validN
.
Qed
.
End
cmra_mo
rphism
.
(
**
Functors
*
)
Structure
rFunctor
:=
RFunctor
{
...
...
@@ -752,10 +757,10 @@ Structure rFunctor := RFunctor {
rFunctor_compose
{
A1
A2
A3
B1
B2
B3
}
(
f
:
A2
-
n
>
A1
)
(
g
:
A3
-
n
>
A2
)
(
f
'
:
B1
-
n
>
B2
)
(
g
'
:
B2
-
n
>
B3
)
x
:
rFunctor_map
(
f
◎
g
,
g
'◎
f
'
)
x
≡
rFunctor_map
(
g
,
g
'
)
(
rFunctor_map
(
f
,
f
'
)
x
);
rFunctor_mo
no
{
A1
A2
B1
B2
}
(
fg
:
(
A2
-
n
>
A1
)
*
(
B1
-
n
>
B2
))
:
CMRAMo
notone
(
rFunctor_map
fg
)
rFunctor_mo
r
{
A1
A2
B1
B2
}
(
fg
:
(
A2
-
n
>
A1
)
*
(
B1
-
n
>
B2
))
:
CMRAMo
rphism
(
rFunctor_map
fg
)
}
.
Existing
Instances
rFunctor_ne
rFunctor_mo
no
.
Existing
Instances
rFunctor_ne
rFunctor_mo
r
.
Instance:
Params
(
@
rFunctor_map
)
5.
Delimit
Scope
rFunctor_scope
with
RF
.
...
...
@@ -785,10 +790,10 @@ Structure urFunctor := URFunctor {
urFunctor_compose
{
A1
A2
A3
B1
B2
B3
}
(
f
:
A2
-
n
>
A1
)
(
g
:
A3
-
n
>
A2
)
(
f
'
:
B1
-
n
>
B2
)
(
g
'
:
B2
-
n
>
B3
)
x
:
urFunctor_map
(
f
◎
g
,
g
'◎
f
'
)
x
≡
urFunctor_map
(
g
,
g
'
)
(
urFunctor_map
(
f
,
f
'
)
x
);
urFunctor_mo
no
{
A1
A2
B1
B2
}
(
fg
:
(
A2
-
n
>
A1
)
*
(
B1
-
n
>
B2
))
:
CMRAMo
notone
(
urFunctor_map
fg
)
urFunctor_mo
r
{
A1
A2
B1
B2
}
(
fg
:
(
A2
-
n
>
A1
)
*
(
B1
-
n
>
B2
))
:
CMRAMo
rphism
(
urFunctor_map
fg
)
}
.
Existing
Instances
urFunctor_ne
urFunctor_mo
no
.
Existing
Instances
urFunctor_ne
urFunctor_mo
r
.
Instance:
Params
(
@
urFunctor_map
)
5.
Delimit
Scope
urFunctor_scope
with
URF
.
...
...
@@ -1148,13 +1153,19 @@ End prod_unit.
Arguments
prodUR
:
clear
implicits
.
Instance
prod_map_cmra_mo
notone
{
A
A
'
B
B
'
:
cmraT
}
(
f
:
A
→
A
'
)
(
g
:
B
→
B
'
)
:
CMRAMo
notone
f
→
CMRAMo
notone
g
→
CMRAMo
notone
(
prod_map
f
g
).
Instance
prod_map_cmra_mo
rphism
{
A
A
'
B
B
'
:
cmraT
}
(
f
:
A
→
A
'
)
(
g
:
B
→
B
'
)
:
CMRAMo
rphism
f
→
CMRAMo
rphism
g
→
CMRAMo
rphism
(
prod_map
f
g
).
Proof
.
split
;
first
apply
_.
-
by
intros
n
x
[
??
];
split
;
simpl
;
apply
cmra_monotone_validN
.
-
intros
x
y
;
rewrite
!
prod_included
=>
-
[
??
]
/=
.
by
split
;
apply
cmra_monotone
.
-
by
intros
n
x
[
??
];
split
;
simpl
;
apply
cmra_morphism_validN
.
-
intros
x
.
etrans
.
apply
(
reflexivity
(
mbind
_
_
)).
etrans
;
last
apply
(
reflexivity
(
_
<
$
>
mbind
_
_
)).
simpl
.
assert
(
Hf
:=
cmra_morphism_pcore
f
(
x
.1
)).
destruct
(
pcore
(
f
(
x
.1
))),
(
pcore
(
x
.1
));
inversion_clear
Hf
=>
//=.
assert
(
Hg
:=
cmra_morphism_pcore
g
(
x
.2
)).
destruct
(
pcore
(
g
(
x
.2
))),
(
pcore
(
x
.2
));
inversion_clear
Hg
=>
//=.
by
setoid_subst
.
-
intros
.
by
rewrite
/
prod_map
/=
-!
cmra_morphism_op
.
Qed
.
Program
Definition
prodRF
(
F1
F2
:
rFunctor
)
:
rFunctor
:=
{|
...
...
@@ -1283,9 +1294,6 @@ Section option.
Canonical
Structure
optionUR
:=
UCMRAT
(
option
A
)
option_ucmra_mixin
.
(
**
Misc
*
)
Global
Instance
Some_cmra_monotone
:
CMRAMonotone
Some
.
Proof
.
split
;
[
apply
_
|
done
|
intros
x
y
[
z
->
];
by
exists
(
Some
z
)].
Qed
.
Lemma
op_None
mx
my
:
mx
⋅
my
=
None
↔
mx
=
None
∧
my
=
None
.
Proof
.
destruct
mx
,
my
;
naive_solver
.
Qed
.
Lemma
op_is_Some
mx
my
:
is_Some
(
mx
⋅
my
)
↔
is_Some
mx
∨
is_Some
my
.
...
...
@@ -1351,14 +1359,13 @@ Section option_prod.
Proof
.
intros
?%
Some_pair_included
.
by
rewrite
-
(
Some_included_total
y1
).
Qed
.
End
option_prod
.
Instance
option_fmap_cmra_mo
notone
{
A
B
:
cmraT
}
(
f
:
A
→
B
)
`
{!
CMRAMo
notone
f
}
:
CMRAMo
notone
(
fmap
f
:
option
A
→
option
B
).
Instance
option_fmap_cmra_mo
rphism
{
A
B
:
cmraT
}
(
f
:
A
→
B
)
`
{!
CMRAMo
rphism
f
}
:
CMRAMo
rphism
(
fmap
f
:
option
A
→
option
B
).
Proof
.
split
;
first
apply
_.
-
intros
n
[
x
|
]
?
;
rewrite
/
cmra_validN
//=. by apply (cmra_monotone_validN f).
-
intros
mx
my
;
rewrite
!
option_included
.
intros
[
->|
(
x
&
y
&->&->&
[
Hxy
|?
])];
simpl
;
eauto
10
using
@
cmra_monotone
.
right
;
exists
(
f
x
),
(
f
y
).
by
rewrite
{
3
}
Hxy
;
eauto
.
-
intros
n
[
x
|
]
?
;
rewrite
/
cmra_validN
//=. by apply (cmra_morphism_validN f).
-
move
=>
[
x
|
]
//. by apply Some_proper, cmra_morphism_pcore.
-
move
=>
[
x
|
]
[
y
|
]
//=. by rewrite -(cmra_morphism_op f).
Qed
.
Program
Definition
optionRF
(
F
:
rFunctor
)
:
rFunctor
:=
{|
...
...
theories/algebra/csum.v
View file @
d7037802
...
...
@@ -356,14 +356,13 @@ End cmra.
Arguments
csumR
:
clear
implicits
.
(
*
Functor
*
)
Instance
csum_map_cmra_mo
notone
{
A
A
'
B
B
'
:
cmraT
}
(
f
:
A
→
A
'
)
(
g
:
B
→
B
'
)
:
CMRAMo
notone
f
→
CMRAMo
notone
g
→
CMRAMo
notone
(
csum_map
f
g
).
Instance
csum_map_cmra_mo
rphism
{
A
A
'
B
B
'
:
cmraT
}
(
f
:
A
→
A
'
)
(
g
:
B
→
B
'
)
:
CMRAMo
rphism
f
→
CMRAMo
rphism
g
→
CMRAMo
rphism
(
csum_map
f
g
).
Proof
.
split
;
try
apply
_.
-
intros
n
[
a
|
b
|
];
simpl
;
auto
using
cmra_monotone_validN
.
-
intros
x
y
;
rewrite
!
csum_included
.
intros
[
->|
[(
a
&
a
'
&->&->&?
)
|
(
b
&
b
'
&->&->&?
)]];
simpl
;
eauto
10
using
cmra_monotone
.
-
intros
n
[
a
|
b
|
];
simpl
;
auto
using
cmra_morphism_validN
.
-
move
=>
[
a
|
b
|
]
=>
//=; rewrite cmra_morphism_pcore; by destruct pcore.
-
intros
[
xa
|
ya
|
]
[
xb
|
yb
|
]
=>
//=; by rewrite -cmra_morphism_op.
Qed
.
Program
Definition
csumRF
(
Fa
Fb
:
rFunctor
)
:
rFunctor
:=
{|
...
...
theories/algebra/excl.v
View file @
d7037802
...
...
@@ -141,14 +141,9 @@ Proof. by destruct x; constructor. Qed.
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_monotone
{
A
B
:
ofeT
}
(
f
:
A
→
B
)
:
NonExpansive
f
→
CMRAMonotone
(
excl_map
f
).
Proof
.
split
;
try
apply
_.
-
by
intros
n
[
a
|
].
-
intros
x
y
[
z
Hy
];
exists
(
excl_map
f
z
);
apply
equiv_dist
=>
n
.
move:
Hy
=>
/
equiv_dist
/
(
_
n
)
->
;
by
destruct
x
,
z
.
Qed
.
Instance
excl_map_cmra_morphism
{
A
B
:
ofeT
}
(
f
:
A
→
B
)
:
NonExpansive
f
→
CMRAMorphism
(
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
).
Instance
exclC_map_ne
A
B
:
NonExpansive
(
@
exclC_map
A
B
).
...
...
theories/algebra/gmap.v
View file @
d7037802
...
...
@@ -474,13 +474,14 @@ End properties.
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_mo
notone
`
{
Countable
K
}
{
A
B
:
cmraT
}
(
f
:
A
→
B
)
`
{!
CMRAMo
notone
f
}
:
CMRAMo
notone
(
fmap
f
:
gmap
K
A
→
gmap
K
B
).
Instance
gmap_fmap_cmra_mo
rphism
`
{
Countable
K
}
{
A
B
:
cmraT
}
(
f
:
A
→
B
)
`
{!
CMRAMo
rphism
f
}
:
CMRAMo
rphism
(
fmap
f
:
gmap
K
A
→
gmap
K
B
).
Proof
.
split
;
try
apply
_.
-
by
intros
n
m
?
i
;
rewrite
lookup_fmap
;
apply
(
cmra_monotone_validN
_
).
-
intros
m1
m2
;
rewrite
!
lookup_included
=>
Hm
i
.
by
rewrite
!
lookup_fmap
;
apply
:
cmra_monotone
.
-
by
intros
n
m
?
i
;
rewrite
lookup_fmap
;
apply
(
cmra_morphism_validN
_
).
-
intros
m
.
apply
Some_proper
=>
i
.
rewrite
lookup_fmap
!
lookup_omap
lookup_fmap
.
case:
(
m
!!
i
)
=>
//= ?. apply cmra_morphism_pcore, _.
-
intros
m1
m2
i
.
by
rewrite
lookup_op
!
lookup_fmap
lookup_op
cmra_morphism_op
.
Qed
.
Definition
gmapC_map
`
{
Countable
K
}
{
A
B
}
(
f
:
A
-
n
>
B
)
:
gmapC
K
A
-
n
>
gmapC
K
B
:=
CofeMor
(
fmap
f
:
gmapC
K
A
→
gmapC
K
B
).
...
...
theories/algebra/iprod.v
View file @
d7037802
...
...
@@ -282,14 +282,14 @@ Instance iprod_map_ne `{Finite A} {B1 B2 : A → ofeT} (f : ∀ x, B1 x → B2 x
(
∀
x
,
Proper
(
dist
n
==>
dist
n
)
(
f
x
))
→
Proper
(
dist
n
==>
dist
n
)
(
iprod_map
f
).
Proof
.
by
intros
?
y1
y2
Hy
x
;
rewrite
/
iprod_map
(
Hy
x
).
Qed
.
Instance
iprod_map_cmra_mo
notone
Instance
iprod_map_cmra_mo
rphism
`
{
Finite
A
}
{
B1
B2
:
A
→
ucmraT
}
(
f
:
∀
x
,
B1
x
→
B2
x
)
:
(
∀
x
,
CMRAMo
notone
(
f
x
))
→
CMRAMo
notone
(
iprod_map
f
).
(
∀
x
,
CMRAMo
rphism
(
f
x
))
→
CMRAMo
rphism
(
iprod_map
f
).
Proof
.
split
;
first
apply
_.
-
intros
n
g
Hg
x
;
rewrite
/
iprod_map
;
apply
(
cmra_mo
notone
_validN
(
f
_
)),
Hg
.
-
intros
g1
g2
;
rewrite
!
iprod_included_spec
=>
Hf
x
.
rewrite
/
iprod_map
;
apply
(
cmra_monotone
_
),
Hf
.
-
intros
n
g
Hg
x
;
rewrite
/
iprod_map
;
apply
(
cmra_mo
rphism
_validN
(
f
_
)),
Hg
.
-
intros
.
apply
Some_proper
=>
i
.
apply
(
cmra_morphism_core
(
f
i
))
.
-
intros
g1
g2
i
.
by
rewrite
/
iprod_map
iprod_lookup_op
cmra_morphism_op
.
Qed
.
Definition
iprodC_map
`
{
Finite
A
}
{
B1
B2
:
A
→
ofeT
}
...
...
theories/algebra/list.v
View file @
d7037802
...
...
@@ -433,14 +433,16 @@ Section properties.
End
properties
.
(
**
Functor
*
)
Instance
list_fmap_cmra_mo
notone
{
A
B
:
ucmraT
}
(
f
:
A
→
B
)
`
{!
CMRAMo
notone
f
}
:
CMRAMo
notone
(
fmap
f
:
list
A
→
list
B
).
Instance
list_fmap_cmra_mo
rphism
{
A
B
:
ucmraT
}
(
f
:
A
→
B
)
`
{!
CMRAMo
rphism
f
}
:
CMRAMo
rphism
(
fmap
f
:
list
A
→
list
B
).
Proof
.
split
;
try
apply
_.
-
intros
n
l
.
rewrite
!
list_lookup_validN
=>
Hl
i
.
rewrite
list_lookup_fmap
.
by
apply
(
cmra_monotone_validN
(
fmap
f
:
option
A
→
option
B
)).
-
intros
l1
l2
.
rewrite
!
list_lookup_included
=>
Hl
i
.
rewrite
!
list_lookup_fmap
.
by
apply
(
cmra_monotone
(
fmap
f
:
option
A
→
option
B
)).
by
apply
(
cmra_morphism_validN
(
fmap
f
:
option
A
→
option
B
)).
-
intros
l
.
apply
Some_proper
.
rewrite
-!
list_fmap_compose
.
apply
list_fmap_equiv_ext
,
cmra_morphism_core
,
_.
-
intros
l1
l2
.
apply
list_equiv_lookup
=>
i
.
by
rewrite
list_lookup_op
!
list_lookup_fmap
list_lookup_op
cmra_morphism_op
.
Qed
.
Program
Definition
listURF
(
F
:
urFunctor
)
:
urFunctor
:=
{|
...
...
theories/base_logic/upred.v
View file @
d7037802
...
...
@@ -93,31 +93,31 @@ Qed.
(
**
functor
*
)
Program
Definition
uPred_map
{
M1
M2
:
ucmraT
}
(
f
:
M2
-
n
>
M1
)
`
{!
CMRAMo
notone
f
}
(
P
:
uPred
M1
)
:
`
{!
CMRAMo
rphism
f
}
(
P
:
uPred
M1
)
:
uPred
M2
:=
{|
uPred_holds
n
x
:=
P
n
(
f
x
)
|}
.
Next
Obligation
.
naive_solver
eauto
using
uPred_mono
,
cmra_monotoneN
.
Qed
.
Next
Obligation
.
naive_solver
eauto
using
uPred_closed
,
cmra_mo
notone
_validN
.
Qed
.
Next
Obligation
.
naive_solver
eauto
using
uPred_mono
,
cmra_
morphism_
monotoneN
.
Qed
.
Next
Obligation
.
naive_solver
eauto
using
uPred_closed
,
cmra_mo
rphism
_validN
.
Qed
.
Instance
uPred_map_ne
{
M1
M2
:
ucmraT
}
(
f
:
M2
-
n
>
M1
)
`
{!
CMRAMo
notone
f
}
n
:
Proper
(
dist
n
==>
dist
n
)
(
uPred_map
f
).
`
{!
CMRAMo
rphism
f
}
n
:
Proper
(
dist
n
==>
dist
n
)
(
uPred_map
f
).
Proof
.
intros
x1
x2
Hx
;
split
=>
n
'
y
??
.
split
;
apply
Hx
;
auto
using
cmra_mo
notone
_validN
.
split
;
apply
Hx
;
auto
using
cmra_mo
rphism
_validN
.
Qed
.
Lemma
uPred_map_id
{
M
:
ucmraT
}
(
P
:
uPred
M
)
:
uPred_map
cid
P
≡
P
.
Proof
.
by
split
=>
n
x
?
.
Qed
.
Lemma
uPred_map_compose
{
M1
M2
M3
:
ucmraT
}
(
f
:
M1
-
n
>
M2
)
(
g
:
M2
-
n
>
M3
)
`
{!
CMRAMo
notone
f
,
!
CMRAMo
notone
g
}
(
P
:
uPred
M3
)
:
`
{!
CMRAMo
rphism
f
,
!
CMRAMo
rphism
g
}
(
P
:
uPred
M3
)
:
uPred_map
(
g
◎
f
)
P
≡
uPred_map
f
(
uPred_map
g
P
).
Proof
.
by
split
=>
n
x
Hx
.
Qed
.
Lemma
uPred_map_ext
{
M1
M2
:
ucmraT
}
(
f
g
:
M1
-
n
>
M2
)
`
{!
CMRAMo
notone
f
}
`
{!
CMRAMo
notone
g
}:
`
{!
CMRAMo
rphism
f
}
`
{!
CMRAMo
rphism
g
}:
(
∀
x
,
f
x
≡
g
x
)
→
∀
x
,
uPred_map
f
x
≡
uPred_map
g
x
.
Proof
.
intros
Hf
P
;
split
=>
n
x
Hx
/=
;
by
rewrite
/
uPred_holds
/=
Hf
.
Qed
.
Definition
uPredC_map
{
M1
M2
:
ucmraT
}
(
f
:
M2
-
n
>
M1
)
`
{!
CMRAMo
notone
f
}
:
Definition
uPredC_map
{
M1
M2
:
ucmraT
}
(
f
:
M2
-
n
>
M1
)
`
{!
CMRAMo
rphism
f
}
:
uPredC
M1
-
n
>
uPredC
M2
:=
CofeMor
(
uPred_map
f
:
uPredC
M1
→
uPredC
M2
).
Lemma
uPredC_map_ne
{
M1
M2
:
ucmraT
}
(
f
g
:
M2
-
n
>
M1
)
`
{!
CMRAMo
notone
f
,
!
CMRAMo
notone
g
}
n
:
`
{!
CMRAMo
rphism
f
,
!
CMRAMo
rphism
g
}
n
:
f
≡
{
n
}
≡
g
→
uPredC_map
f
≡
{
n
}
≡
uPredC_map
g
.
Proof
.
by
intros
Hfg
P
;
split
=>
n
'
y
??
;
...
...
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