Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Iris
Actris
Commits
0d55d5de
Commit
0d55d5de
authored
Jul 04, 2019
by
Robbert Krebbers
Browse files
Some mapper clean up.
parent
1fa2c070
Changes
2
Hide whitespace changes
Inline
Side-by-side
_CoqProject
View file @
0d55d5de
...
...
@@ -15,3 +15,4 @@ theories/examples/sort_client.v
theories/examples/sort_elem.v
theories/examples/loop_sort.v
theories/examples/sort_elem_client.v
theories/examples/mapper.v
theories/examples/mapper.v
View file @
0d55d5de
...
...
@@ -26,7 +26,7 @@ Definition start_mappers : val :=
Fork
(
mapper
"f"
"l"
"c"
)
;;
"go"
(
"n"
-
#
1
)
"f"
"l"
"c"
.
Definition
loop_
mapper
s
:
val
:
=
Definition
mapper
_service_loop
:
val
:
=
rec
:
"go"
"n"
"c"
"xs"
"ys"
:
=
if
:
"n"
=
#
0
then
"ys"
else
if
:
recv
"c"
then
...
...
@@ -45,7 +45,7 @@ Definition mapper_service : val := λ: "n" "f" "xs",
let
:
"l"
:
=
new_lock
#()
in
let
:
"c"
:
=
start_chan
(
λ
:
"c"
,
start_mappers
"n"
"f"
"l"
"c"
)
in
loop_
mapper
s
"n"
"c"
"xs"
(
lnil
#()).
mapper
_service_loop
"n"
"c"
"xs"
(
lnil
#()).
Class
map_sortG
Σ
A
`
{
Countable
A
}
:
=
{
map_sort_contributionG
:
>
contributionG
Σ
(
gmultisetUR
A
)
;
...
...
@@ -135,19 +135,19 @@ Section mapper.
wp_apply
(
"IH"
with
"[$] [$] [$]"
).
Qed
.
Lemma
loop_
mapper
s
_spec
(
n
:
nat
)
c
vs
xs
ws
X_send
xs_recv
:
Lemma
mapper
_service_loop
_spec
(
n
:
nat
)
c
vs
xs
ws
X_send
xs_recv
:
(
n
=
0
→
X_send
=
∅
∧
xs
=
[])
→
{{{
c
↣
mapper_protocol
n
(
X_send
:
gmultiset
A
)
@
N
∗
([
∗
list
]
x
;
v
∈
xs
;
vs
,
IA
x
v
)
∗
([
∗
list
]
x
;
w
∈
xs_recv
;
ws
,
IB
(
f
x
)
w
)
}}}
loop_
mapper
s
#
n
c
(
val_encode
vs
)
(
val_encode
ws
)
mapper
_service_loop
#
n
c
(
val_encode
vs
)
(
val_encode
ws
)
{{{
ys
ws
,
RET
(
val_encode
ws
)
;
⌜
ys
++
(
f
<$>
xs_recv
)
≡
ₚ
f
<$>
(
elements
X_send
++
xs
++
xs_recv
)
⌝
∗
⌜
ys
≡
ₚ
f
<$>
elements
X_send
++
xs
⌝
∗
[
∗
list
]
y
;
w
∈
ys
++
(
f
<$>
xs_recv
)
;
ws
,
IB
y
w
}}}.
Proof
.
iIntros
(
Hn
Φ
)
"(Hc & H
xs
& H
xs_recv
) HΦ"
.
iIntros
(
Hn
Φ
)
"(Hc & H
IA
& H
IB
) HΦ"
.
iL
ö
b
as
"IH"
forall
(
n
vs
xs
ws
X_send
xs_recv
Hn
Φ
)
;
wp_rec
;
wp_pures
;
simpl
.
case_bool_decide
;
wp_pures
;
simplify_eq
/=.
{
destruct
Hn
as
[->
->]
;
first
lia
.
...
...
@@ -157,26 +157,25 @@ Section mapper.
destruct
vs
as
[|
v
vs
],
xs
as
[|
x
xs
]
;
csimpl
;
try
done
;
wp_pures
.
+
wp_select
.
wp_pures
.
rewrite
Nat2Z
.
inj_succ
Z
.
sub_1_r
Z
.
pred_succ
.
iApply
(
"IH"
with
"[] Hc [//] [$] HΦ"
).
iPureIntro
;
naive_solver
.
+
iDestruct
"H
xs
"
as
"[Hx H
xs
]"
.
wp_select
.
+
iDestruct
"H
IA
"
as
"[H
IA
x H
IA
]"
.
wp_select
.
wp_apply
(
lhead_spec
(
A
:
=
val
)
with
"[//]"
)
;
iIntros
(
_
).
wp_send
with
"[$Hx]"
.
wp_send
with
"[$H
IA
x]"
.
wp_apply
(
ltail_spec
(
A
:
=
val
)
with
"[//]"
)
;
iIntros
(
_
).
wp_apply
(
"IH"
with
"[] Hc H
xs Hxs_recv
"
)
;
first
done
.
wp_apply
(
"IH"
with
"[] Hc H
IA HIB
"
)
;
first
done
.
iIntros
(
ys
ws'
).
rewrite
gmultiset_elements_disj_union
gmultiset_elements_singleton
-!
assoc_L
.
iApply
"HΦ"
.
-
wp_recv
(
x
w
)
as
(
HH
)
"HIfx"
.
-
wp_recv
(
x
w
)
as
(
HH
)
"HI
B
fx"
.
wp_apply
(
lcons_spec
(
A
:
=
val
)
with
"[//]"
)
;
iIntros
(
_
).
wp_apply
(
"IH"
$!
_
_
_
_
_
(
_
::
_
)
with
"[] Hc H
xs
[HIfx H
xs_recv
]"
)
;
first
done
.
wp_apply
(
"IH"
$!
_
_
_
_
_
(
_
::
_
)
with
"[] Hc H
IA
[HI
B
fx H
IB
]"
)
;
first
done
.
{
simpl
;
iFrame
.
}
iIntros
(
ys
ws'
)
;
iDestruct
1
as
(
Hys
)
"H"
;
simplify_eq
/=.
iIntros
(
ys
ws'
)
;
iDestruct
1
as
(
Hys
)
"H
IB
"
;
simplify_eq
/=.
iApply
(
"HΦ"
$!
(
ys
++
[
f
x
])).
iSplit
.
+
iPureIntro
.
rewrite
-
assoc_L
/=
Hys
.
rewrite
{
2
}(
gmultiset_disj_union_difference
{[
x
]}
X_send
)
+
iPureIntro
.
rewrite
(
gmultiset_disj_union_difference
{[
x
]}
X_send
)
-
?gmultiset_elem_of_singleton_subseteq
//.
rewrite
(
comm
disj_union
)
gmultiset_elements_disj_union
.
rewrite
gmultiset_elements_singleton
.
by
rewrite
-
assoc_L
(
assoc_L
_
[
x
])
(
comm
_
[
x
])
-!
assoc_L
.
rewrite
gmultiset_elements_singleton
-
assoc_L
(
comm
_
[
x
])
assoc_L
.
by
rewrite
fmap_app
-
Hys
.
+
by
rewrite
-
assoc_L
.
Qed
.
...
...
@@ -198,7 +197,7 @@ Section mapper.
{
iExists
n
,
∅
.
iFrame
.
}
wp_apply
(
start_mappers_spec
with
"Hf [$Hlk $Hu $Hγs]"
)
;
auto
.
}
wp_pures
.
wp_apply
(
lnil_spec
with
"[//]"
)
;
iIntros
(
_
).
wp_apply
(
loop_
mapper
s
_spec
_
_
_
_
[]
∅
[]
with
"[$Hc $HI //]"
)
;
first
lia
.
wp_apply
(
mapper
_service_loop
_spec
_
_
_
_
[]
∅
[]
with
"[$Hc $HI //]"
)
;
first
lia
.
iIntros
(
ys
ws
).
rewrite
/=
!
right_id_L
gmultiset_elements_empty
.
iApply
"HΦ"
.
Qed
.
End
mapper
.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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