Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
I
Iris
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
81
Issues
81
List
Boards
Labels
Milestones
Merge Requests
13
Merge Requests
13
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Iris
Iris
Commits
e1ef66ef
Commit
e1ef66ef
authored
Nov 25, 2016
by
Robbert Krebbers
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Some box/slice renaming.
parent
6923de66
Pipeline
#3127
passed with stage
in 10 minutes and 29 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Sidebyside
Showing
1 changed file
with
32 additions
and
32 deletions
+32
32
base_logic/lib/boxes.v
base_logic/lib/boxes.v
+32
32
No files found.
base_logic/lib/boxes.v
View file @
e1ef66ef
...
...
@@ 89,7 +89,7 @@ Proof.

by
rewrite
big_sepM_empty
.
Qed
.
Lemma
box
_insert_empty
Q
E
f
P
:
Lemma
slice
_insert_empty
Q
E
f
P
:
▷
box
N
f
P
={
E
}=
∗
∃
γ
,
⌜
f
!!
γ
=
None
⌝
∗
slice
N
γ
Q
∗
▷
box
N
(<[
γ
:
=
false
]>
f
)
(
Q
∗
P
).
Proof
.
...
...
@@ 108,7 +108,7 @@ Proof.
iFrame
;
eauto
.
Qed
.
Lemma
box
_delete_empty
E
f
P
Q
γ
:
Lemma
slice
_delete_empty
E
f
P
Q
γ
:
↑
N
⊆
E
→
f
!!
γ
=
Some
false
→
slice
N
γ
Q

∗
▷
box
N
f
P
={
E
}=
∗
∃
P'
,
...
...
@@ 128,7 +128,7 @@ Proof.

iExists
Φ
;
eauto
.
Qed
.
Lemma
box
_fill
E
f
γ
P
Q
:
Lemma
slice
_fill
E
f
γ
P
Q
:
↑
N
⊆
E
→
f
!!
γ
=
Some
false
→
slice
N
γ
Q

∗
▷
Q

∗
▷
box
N
f
P
={
E
}=
∗
▷
box
N
(<[
γ
:
=
true
]>
f
)
P
.
...
...
@@ 147,7 +147,7 @@ Proof.
iFrame
;
eauto
.
Qed
.
Lemma
box
_empty
E
f
P
Q
γ
:
Lemma
slice
_empty
E
f
P
Q
γ
:
↑
N
⊆
E
→
f
!!
γ
=
Some
true
→
slice
N
γ
Q

∗
▷
box
N
f
P
={
E
}=
∗
▷
Q
∗
▷
box
N
(<[
γ
:
=
false
]>
f
)
P
.
...
...
@@ 167,31 +167,31 @@ Proof.
iFrame
;
eauto
.
Qed
.
Lemma
box
_insert_full
Q
E
f
P
:
Lemma
slice
_insert_full
Q
E
f
P
:
↑
N
⊆
E
→
▷
Q

∗
▷
box
N
f
P
={
E
}=
∗
∃
γ
,
⌜
f
!!
γ
=
None
⌝
∗
slice
N
γ
Q
∗
▷
box
N
(<[
γ
:
=
true
]>
f
)
(
Q
∗
P
).
Proof
.
iIntros
(?)
"HQ Hbox"
.
iMod
(
box
_insert_empty
with
"Hbox"
)
as
(
γ
)
"(% & #Hslice & Hbox)"
.
iExists
γ
.
iFrame
"%#"
.
iMod
(
box
_fill
with
"Hslice HQ Hbox"
)
;
first
done
.
iMod
(
slice
_insert_empty
with
"Hbox"
)
as
(
γ
)
"(% & #Hslice & Hbox)"
.
iExists
γ
.
iFrame
"%#"
.
iMod
(
slice
_fill
with
"Hslice HQ Hbox"
)
;
first
done
.
by
apply
lookup_insert
.
by
rewrite
insert_insert
.
Qed
.
Lemma
box
_delete_full
E
f
P
Q
γ
:
Lemma
slice
_delete_full
E
f
P
Q
γ
:
↑
N
⊆
E
→
f
!!
γ
=
Some
true
→
slice
N
γ
Q

∗
▷
box
N
f
P
={
E
}=
∗
∃
P'
,
▷
Q
∗
▷
▷
(
P
≡
(
Q
∗
P'
))
∗
▷
box
N
(
delete
γ
f
)
P'
.
Proof
.
iIntros
(??)
"#Hslice Hbox"
.
iMod
(
box
_empty
with
"Hslice Hbox"
)
as
"[$ Hbox]"
;
try
done
.
iMod
(
box_delete_empty
with
"Hslice Hbox"
)
as
(
P'
)
"[Heq Hbox]"
.
done
.
by
apply
lookup_insert
.
iMod
(
slice
_empty
with
"Hslice Hbox"
)
as
"[$ Hbox]"
;
try
done
.
iMod
(
slice_delete_empty
with
"Hslice Hbox"
)
as
(
P'
)
"[Heq Hbox]"
;
first
done
.
{
by
apply
lookup_insert
.
}
iExists
P'
.
iFrame
.
rewrite

insert_delete
delete_insert
?lookup_delete
//.
Qed
.
Lemma
box_fill
_all
E
f
P
:
Lemma
box_fill
E
f
P
:
↑
N
⊆
E
→
box
N
f
P

∗
▷
P
={
E
}=
∗
box
N
(
const
true
<$>
f
)
P
.
Proof
.
...
...
@@ 208,7 +208,7 @@ Proof.
iApply
"Hclose"
.
iNext
;
iExists
true
.
by
iFrame
.
Qed
.
Lemma
box_empty
_all
E
f
P
:
Lemma
box_empty
E
f
P
:
↑
N
⊆
E
→
map_Forall
(
λ
_
,
(
true
=))
f
→
box
N
f
P
={
E
}=
∗
▷
P
∗
box
N
(
const
false
<$>
f
)
P
.
...
...
@@ 230,50 +230,50 @@ Proof.

iExists
Φ
;
iSplit
;
by
rewrite
big_sepM_fmap
.
Qed
.
Lemma
box
_split
E
f
P
Q1
Q2
γ
b
:
Lemma
slice
_split
E
f
P
Q1
Q2
γ
b
:
↑
N
⊆
E
→
f
!!
γ
=
Some
b
→
slice
N
γ
(
Q1
∗
Q2
)

∗
▷
box
N
f
P
={
E
}=
∗
∃
γ
1
γ
2
,
⌜
delete
γ
f
!!
γ
1
=
None
⌝
∗
⌜
delete
γ
f
!!
γ
2
=
None
⌝
∗
⌜γ
1
≠
γ
2
⌝
∗
slice
N
γ
1
Q1
∗
slice
N
γ
2
Q2
∗
▷
box
N
(<[
γ
2
:
=
b
]>(<[
γ
1
:
=
b
]>(
delete
γ
f
)))
P
.
Proof
.
iIntros
(??)
"#Hslice Hbox"
.
destruct
b
.

iMod
(
box
_delete_full
with
"Hslice Hbox"
)
as
(
P'
)
"([HQ1 HQ2] & Heq & Hbox)"
;
try
done
.
iMod
(
box_insert_full
Q1
with
"HQ1 Hbox"
)
as
(
γ
1
)
"(% & #Hslice1 & Hbox)"
.
done
.
iMod
(
box_insert_full
Q2
with
"HQ2 Hbox"
)
as
(
γ
2
)
"(% & #Hslice2 & Hbox)"
.
done
.

iMod
(
slice
_delete_full
with
"Hslice Hbox"
)
as
(
P'
)
"([HQ1 HQ2] & Heq & Hbox)"
;
try
done
.
iMod
(
slice_insert_full
Q1
with
"HQ1 Hbox"
)
as
(
γ
1
)
"(% & #Hslice1 & Hbox)"
;
first
done
.
iMod
(
slice_insert_full
Q2
with
"HQ2 Hbox"
)
as
(
γ
2
)
"(% & #Hslice2 & Hbox)"
;
first
done
.
iExists
γ
1
,
γ
2
.
iFrame
"%#"
.
iModIntro
.
iSplit
;
last
iSplit
;
try
iPureIntro
.
{
by
eapply
lookup_insert_None
.
}
{
by
apply
(
lookup_insert_None
(
delete
γ
f
)
γ
1
γ
2
true
).
}
iNext
.
eapply
internal_eq_rewrite_contractive
;
[
by
apply
_


by
eauto
].
iNext
.
iRewrite
"Heq"
.
iPureIntro
.
rewrite
assoc
.
f_equiv
.
by
rewrite
comm
.
done
.

iMod
(
box
_delete_empty
with
"Hslice Hbox"
)
as
(
P'
)
"[Heq Hbox]"
;
try
done
.
iMod
(
box
_insert_empty
Q1
with
"Hbox"
)
as
(
γ
1
)
"(% & #Hslice1 & Hbox)"
.
iMod
(
box
_insert_empty
Q2
with
"Hbox"
)
as
(
γ
2
)
"(% & #Hslice2 & Hbox)"
.
iNext
.
iRewrite
"Heq"
.
iPureIntro
.
by
rewrite
assoc
(
comm
_
Q2
)
.

iMod
(
slice
_delete_empty
with
"Hslice Hbox"
)
as
(
P'
)
"[Heq Hbox]"
;
try
done
.
iMod
(
slice
_insert_empty
Q1
with
"Hbox"
)
as
(
γ
1
)
"(% & #Hslice1 & Hbox)"
.
iMod
(
slice
_insert_empty
Q2
with
"Hbox"
)
as
(
γ
2
)
"(% & #Hslice2 & Hbox)"
.
iExists
γ
1
,
γ
2
.
iFrame
"%#"
.
iModIntro
.
iSplit
;
last
iSplit
;
try
iPureIntro
.
{
by
eapply
lookup_insert_None
.
}
{
by
apply
(
lookup_insert_None
(
delete
γ
f
)
γ
1
γ
2
false
).
}
iNext
.
eapply
internal_eq_rewrite_contractive
;
[
by
apply
_


by
eauto
].
iNext
.
iRewrite
"Heq"
.
iPureIntro
.
rewrite
assoc
.
f_equiv
.
by
rewrite
comm
.
done
.
iNext
.
iRewrite
"Heq"
.
iPureIntro
.
by
rewrite
assoc
(
comm
_
Q2
)
.
Qed
.
Lemma
box
_combine
E
f
P
Q1
Q2
γ
1
γ
2
b
:
Lemma
slice
_combine
E
f
P
Q1
Q2
γ
1
γ
2
b
:
↑
N
⊆
E
→
γ
1
≠
γ
2
→
f
!!
γ
1
=
Some
b
→
f
!!
γ
2
=
Some
b
→
slice
N
γ
1
Q1

∗
slice
N
γ
2
Q2

∗
▷
box
N
f
P
={
E
}=
∗
∃
γ
,
⌜
delete
γ
2
(
delete
γ
1
f
)
!!
γ
=
None
⌝
∗
slice
N
γ
(
Q1
∗
Q2
)
∗
▷
box
N
(<[
γ
:
=
b
]>(
delete
γ
2
(
delete
γ
1
f
)))
P
.
Proof
.
iIntros
(????)
"#Hslice1 #Hslice2 Hbox"
.
destruct
b
.

iMod
(
box
_delete_full
with
"Hslice1 Hbox"
)
as
(
P1
)
"(HQ1 & Heq1 & Hbox)"
;
try
done
.
iMod
(
box_delete_full
with
"Hslice2 Hbox"
)
as
(
P2
)
"(HQ2 & Heq2 & Hbox)"
.
done
.
by
simplify_map_eq
.
iMod
(
box
_insert_full
(
Q1
∗
Q2
)%
I
with
"[$HQ1 $HQ2] Hbox"
)
as
(
γ
)
"(% & #Hslice & Hbox)"
.
done
.

iMod
(
slice
_delete_full
with
"Hslice1 Hbox"
)
as
(
P1
)
"(HQ1 & Heq1 & Hbox)"
;
try
done
.
iMod
(
slice_delete_full
with
"Hslice2 Hbox"
)
as
(
P2
)
"(HQ2 & Heq2 & Hbox)"
;
first
done
.
{
by
simplify_map_eq
.
}
iMod
(
slice
_insert_full
(
Q1
∗
Q2
)%
I
with
"[$HQ1 $HQ2] Hbox"
)
as
(
γ
)
"(% & #Hslice & Hbox)"
;
first
done
.
iExists
γ
.
iFrame
"%#"
.
iModIntro
.
iNext
.
eapply
internal_eq_rewrite_contractive
;
[
by
apply
_


by
eauto
].
iNext
.
iRewrite
"Heq1"
.
iRewrite
"Heq2"
.
by
rewrite
assoc
.

iMod
(
box
_delete_empty
with
"Hslice1 Hbox"
)
as
(
P1
)
"(Heq1 & Hbox)"
;
try
done
.
iMod
(
box_delete_empty
with
"Hslice2 Hbox"
)
as
(
P2
)
"(Heq2 & Hbox)"
.
done
.
by
simplify_map_eq
.
iMod
(
box
_insert_empty
(
Q1
∗
Q2
)%
I
with
"Hbox"
)
as
(
γ
)
"(% & #Hslice & Hbox)"
.

iMod
(
slice
_delete_empty
with
"Hslice1 Hbox"
)
as
(
P1
)
"(Heq1 & Hbox)"
;
try
done
.
iMod
(
slice_delete_empty
with
"Hslice2 Hbox"
)
as
(
P2
)
"(Heq2 & Hbox)"
;
first
done
.
{
by
simplify_map_eq
.
}
iMod
(
slice
_insert_empty
(
Q1
∗
Q2
)%
I
with
"Hbox"
)
as
(
γ
)
"(% & #Hslice & Hbox)"
.
iExists
γ
.
iFrame
"%#"
.
iModIntro
.
iNext
.
eapply
internal_eq_rewrite_contractive
;
[
by
apply
_


by
eauto
].
iNext
.
iRewrite
"Heq1"
.
iRewrite
"Heq2"
.
by
rewrite
assoc
.
...
...
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