Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
iris-coq
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Joshua Yanovski
iris-coq
Commits
59d1a925
Commit
59d1a925
authored
Feb 08, 2016
by
Ralf Jung
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
prove some properties of the embedding into the global CMRA
parent
f25284be
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
56 additions
and
16 deletions
+56
-16
algebra/fin_maps.v
algebra/fin_maps.v
+12
-0
algebra/iprod.v
algebra/iprod.v
+17
-2
program_logic/global_cmra.v
program_logic/global_cmra.v
+27
-14
No files found.
algebra/fin_maps.v
View file @
59d1a925
...
...
@@ -164,15 +164,27 @@ Lemma map_lookup_validN n m i x : ✓{n} m → m !! i ={n}= Some x → ✓{n} x.
Proof
.
by
move
=>
/
(
_
i
)
Hm
Hi
;
move
:
Hm
;
rewrite
Hi
.
Qed
.
Lemma
map_insert_validN
n
m
i
x
:
✓
{
n
}
x
→
✓
{
n
}
m
→
✓
{
n
}
(
<
[
i
:=
x
]
>
m
).
Proof
.
by
intros
??
j
;
destruct
(
decide
(
i
=
j
));
simplify_map_equality
.
Qed
.
Lemma
map_insert_op
m1
m2
i
x
:
m2
!!
i
=
None
→
<
[
i
:=
x
]
>
(
m1
⋅
m2
)
=
<
[
i
:=
x
]
>
m1
⋅
m2
.
Proof
.
by
intros
Hi
;
apply
(
insert_merge_l
_
m1
m2
);
rewrite
Hi
.
Qed
.
Lemma
map_validN_singleton
n
(
i
:
K
)
(
x
:
A
)
:
✓
{
n
}
x
<->
✓
{
n
}
(
{
[
i
↦
x
]
}
:
gmap
K
A
).
Proof
.
split
.
-
move
=>
Hx
j
.
destruct
(
decide
(
i
=
j
));
simplify_map_equality
;
done
.
-
move
=>
Hm
.
move
:
(
Hm
i
).
by
simplify_map_equality
.
Qed
.
Lemma
map_unit_singleton
(
i
:
K
)
(
x
:
A
)
:
unit
(
{
[
i
↦
x
]
}
:
gmap
K
A
)
=
{
[
i
↦
unit
x
]
}
.
Proof
.
apply
map_fmap_singleton
.
Qed
.
Lemma
map_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
.
Lemma
singleton_includedN
n
m
i
x
:
{
[
i
↦
x
]
}
≼
{
n
}
m
↔
∃
y
,
m
!!
i
={
n
}=
Some
y
∧
x
≼
y
.
(
*
not
m
!!
i
=
Some
y
∧
x
≼
{
n
}
y
to
deal
with
n
=
0
*
)
...
...
algebra/iprod.v
View file @
59d1a925
...
...
@@ -7,9 +7,10 @@ Definition iprod {A} (B : A → cofeT) := ∀ x, B x.
Definition
iprod_insert
`
{
∀
x
x
'
:
A
,
Decision
(
x
=
x
'
)
}
{
B
:
A
→
cofeT
}
(
x
:
A
)
(
y
:
B
x
)
(
f
:
iprod
B
)
:
iprod
B
:=
λ
x
'
,
match
decide
(
x
=
x
'
)
with
left
H
=>
eq_rect
_
B
y
_
H
|
right
_
=>
f
x
'
end
.
Global
Instance
iprod_empty
{
A
}
{
B
:
A
→
cofeT
}
`
{
∀
x
,
Empty
(
B
x
)
}
:
Empty
(
iprod
B
)
:=
λ
x
,
∅
.
Definition
iprod_singleton
`
{
∀
x
x
'
:
A
,
Decision
(
x
=
x
'
)
}
{
B
:
A
→
cofeT
}
`
{
∀
x
:
A
,
Empty
(
B
x
)
}
(
x
:
A
)
(
y
:
B
x
)
:
iprod
B
:=
iprod_insert
x
y
(
λ
_
,
∅
)
.
(
x
:
A
)
(
y
:
B
x
)
:
iprod
B
:=
iprod_insert
x
y
∅
.
Section
iprod_cofe
.
Context
{
A
}
{
B
:
A
→
cofeT
}
.
...
...
@@ -100,7 +101,6 @@ Section iprod_cmra.
Definition
iprod_lookup_op
f
g
x
:
(
f
⋅
g
)
x
=
f
x
⋅
g
x
:=
eq_refl
.
Instance
iprod_unit
:
Unit
(
iprod
B
)
:=
λ
f
x
,
unit
(
f
x
).
Definition
iprod_lookup_unit
f
x
:
(
unit
f
)
x
=
unit
(
f
x
)
:=
eq_refl
.
Global
Instance
iprod_empty
`
{
∀
x
,
Empty
(
B
x
)
}
:
Empty
(
iprod
B
)
:=
λ
x
,
∅
.
Instance
iprod_validN
:
ValidN
(
iprod
B
)
:=
λ
n
f
,
∀
x
,
✓
{
n
}
(
f
x
).
Instance
iprod_minus
:
Minus
(
iprod
B
)
:=
λ
f
g
x
,
f
x
⩪
g
x
.
Definition
iprod_lookup_minus
f
g
x
:
(
f
⩪
g
)
x
=
f
x
⩪
g
x
:=
eq_refl
.
...
...
@@ -148,7 +148,9 @@ Section iprod_cmra.
*
by
intros
f
Hf
x
;
apply
(
timeless
_
).
Qed
.
(
**
Properties
of
iprod_update
.
*
)
Context
`
{
∀
x
x
'
:
A
,
Decision
(
x
=
x
'
)
}
.
Lemma
iprod_insert_updateP
x
(
P
:
B
x
→
Prop
)
(
Q
:
iprod
B
→
Prop
)
g
y1
:
y1
~~>:
P
→
(
∀
y2
,
P
y2
→
Q
(
iprod_insert
x
y2
g
))
→
iprod_insert
x
y1
g
~~>:
Q
.
...
...
@@ -173,7 +175,20 @@ Section iprod_cmra.
eauto
using
iprod_insert_updateP
with
congruence
.
Qed
.
(
**
Properties
of
iprod_singleton
.
*
)
Context
`
{
∀
x
,
Empty
(
B
x
)
}
`
{
∀
x
,
CMRAIdentity
(
B
x
)
}
.
Lemma
iprod_validN_singleton
n
x
(
y
:
B
x
)
:
✓
{
n
}
y
<->
✓
{
n
}
(
iprod_singleton
x
y
).
Proof
.
split
.
-
move
=>
Hx
x
'
.
destruct
(
decide
(
x
=
x
'
)).
+
subst
x
'
.
by
rewrite
iprod_lookup_singleton
.
+
rewrite
iprod_lookup_singleton_ne
//; [].
by
apply
cmra_empty_valid
.
-
move
=>
Hm
.
move
:
(
Hm
x
).
by
rewrite
iprod_lookup_singleton
.
Qed
.
Lemma
iprod_op_singleton
(
x
:
A
)
(
y1
y2
:
B
x
)
:
iprod_singleton
x
y1
⋅
iprod_singleton
x
y2
≡
iprod_singleton
x
(
y1
⋅
y2
).
Proof
.
...
...
program_logic/global_cmra.v
View file @
59d1a925
Require
Export
program_logic
.
ownership
program_logic
.
pviewshifts
.
Require
Export
algebra
.
iprod
program_logic
.
ownership
program_logic
.
pviewshifts
.
Import
uPred
.
Definition
gid
:=
positive
.
...
...
@@ -15,26 +15,41 @@ Definition to_globalC {Λ} {Δ : gid → iFunctor}
iprod_singleton
i
{
[
γ
↦
to_funC
_
a
]
}
.
Definition
own
{
Λ
}
{
Δ
:
gid
→
iFunctor
}
(
i
:
gid
)
`
{!
InG
Λ
Δ
i
A
}
(
γ
:
gid
)
(
a
:
A
)
:
iProp
Λ
(
globalC
Δ
)
:=
ownG
(
Σ
:=
globalC
Δ
)
(
iprod_singleton
i
{
[
γ
↦
to_funC
_
a
]
}
).
ownG
(
Σ
:=
globalC
Δ
)
(
to_globalC
i
γ
a
).
Section
global
.
Context
{
Λ
:
language
}
{
Δ
:
gid
→
iFunctor
}
(
i
:
gid
)
`
{!
InG
Λ
Δ
i
A
}
.
Implicit
Types
a
:
A
.
(
*
Proeprties
of
to_globalC
*
)
Lemma
globalC_op
γ
a1
a2
:
to_globalC
i
γ
(
a1
⋅
a2
)
≡
to_globalC
i
γ
a1
⋅
to_globalC
i
γ
a2
.
Proof
.
rewrite
/
to_globalC
iprod_op_singleton
map_op_singleton
.
apply
iprod_singleton_proper
,
(
fin_maps
.
singleton_proper
(
M
:=
gmap
_
)).
by
rewrite
/
to_funC
;
destruct
inG
.
Qed
.
Lemma
globalC_validN
n
γ
a
:
✓
{
n
}
(
to_globalC
i
γ
a
)
<->
✓
{
n
}
a
.
Proof
.
rewrite
/
to_globalC
.
rewrite
-
iprod_validN_singleton
-
map_validN_singleton
.
by
rewrite
/
to_funC
;
destruct
inG
.
Qed
.
(
*
Properties
of
own
*
)
Global
Instance
own_ne
γ
n
:
Proper
(
dist
n
==>
dist
n
)
(
own
i
γ
).
Proof
.
intros
m
m
'
Hm
;
apply
ownG_ne
,
iprod_singleton_ne
,
singleton_ne
.
by
rewrite
/
to_funC
;
destruct
inG
.
by
rewrite
/
to_
globalC
/
to_
funC
;
destruct
inG
.
Qed
.
Global
Instance
own_proper
γ
:
Proper
((
≡
)
==>
(
≡
))
(
own
i
γ
)
:=
ne_proper
_.
Lemma
own_op
γ
a1
a2
:
own
i
γ
(
a1
⋅
a2
)
≡
(
own
i
γ
a1
★
own
i
γ
a2
)
%
I
.
Proof
.
rewrite
/
own
-
ownG_op
iprod_op_singleton
map_op_singleton
.
apply
ownG_proper
,
iprod_singleton_proper
,
(
fin_maps
.
singleton_proper
(
M
:=
gmap
_
)).
by
rewrite
/
to_funC
;
destruct
inG
.
Qed
.
Proof
.
rewrite
/
own
-
ownG_op
.
apply
ownG_proper
,
globalC_op
.
Qed
.
(
*
TODO
:
This
also
holds
if
we
just
have
✓
a
at
the
current
step
-
idx
,
as
Iris
assertion
.
However
,
the
map_updateP_alloc
does
not
suffice
to
show
this
.
*
)
...
...
@@ -59,10 +74,9 @@ Admitted.
Lemma
own_valid
γ
m
:
(
own
i
γ
m
)
⊑
(
✓
m
).
Proof
.
rewrite
/
own
ownG_valid
;
apply
uPred
.
valid_mono
.
intros
n
?
.
SearchAbout
validN
singletonM
.
Admitted
.
rewrite
/
own
ownG_valid
.
apply
uPred
.
valid_mono
=>
n
.
by
apply
globalC_validN
.
Qed
.
Lemma
own_valid_r
'
γ
m
:
(
own
i
γ
m
)
⊑
(
own
i
γ
m
★
✓
m
).
Proof
.
apply
(
uPred
.
always_entails_r
'
_
_
),
own_valid
.
Qed
.
...
...
@@ -70,7 +84,6 @@ Proof. apply (uPred.always_entails_r' _ _), own_valid. Qed.
Global
Instance
ownG_timeless
γ
m
:
Timeless
m
→
TimelessP
(
own
i
γ
m
).
Proof
.
intros
.
apply
ownG_timeless
.
SearchAbout
singletonM
Timeless
.
Admitted
.
End
global
.
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