Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
stdpp
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Monitor
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Iris
stdpp
Commits
0c2f6db1
Commit
0c2f6db1
authored
7 years ago
by
Dan Frumin
Browse files
Options
Downloads
Patches
Plain Diff
Add some useful lemmas about `difference` and `delete`
parent
2d27f42b
No related branches found
Branches containing commit
No related tags found
Tags containing commit
1 merge request
!5
Some lemmas about `difference` and `delete`
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
theories/collections.v
+21
-0
21 additions, 0 deletions
theories/collections.v
theories/fin_maps.v
+9
-0
9 additions, 0 deletions
theories/fin_maps.v
with
30 additions
and
0 deletions
theories/collections.v
+
21
−
0
View file @
0c2f6db1
...
@@ -609,6 +609,8 @@ Section collection.
...
@@ -609,6 +609,8 @@ Section collection.
Proof
.
set_solver
.
Qed
.
Proof
.
set_solver
.
Qed
.
Lemma
difference_diag
X
:
X
∖
X
≡
∅.
Lemma
difference_diag
X
:
X
∖
X
≡
∅.
Proof
.
set_solver
.
Qed
.
Proof
.
set_solver
.
Qed
.
Lemma
difference_empty
X
:
X
∖
∅
≡
X
.
Proof
.
set_solver
.
Qed
.
Lemma
difference_union_distr_l
X
Y
Z
:
(
X
∪
Y
)
∖
Z
≡
X
∖
Z
∪
Y
∖
Z
.
Lemma
difference_union_distr_l
X
Y
Z
:
(
X
∪
Y
)
∖
Z
≡
X
∖
Z
∪
Y
∖
Z
.
Proof
.
set_solver
.
Qed
.
Proof
.
set_solver
.
Qed
.
Lemma
difference_union_distr_r
X
Y
Z
:
Z
∖
(
X
∪
Y
)
≡
(
Z
∖
X
)
∩
(
Z
∖
Y
)
.
Lemma
difference_union_distr_r
X
Y
Z
:
Z
∖
(
X
∪
Y
)
≡
(
Z
∖
X
)
∩
(
Z
∖
Y
)
.
...
@@ -671,6 +673,8 @@ Section collection.
...
@@ -671,6 +673,8 @@ Section collection.
Proof
.
unfold_leibniz
.
apply
subseteq_empty_difference
.
Qed
.
Proof
.
unfold_leibniz
.
apply
subseteq_empty_difference
.
Qed
.
Lemma
difference_diag_L
X
:
X
∖
X
=
∅.
Lemma
difference_diag_L
X
:
X
∖
X
=
∅.
Proof
.
unfold_leibniz
.
apply
difference_diag
.
Qed
.
Proof
.
unfold_leibniz
.
apply
difference_diag
.
Qed
.
Lemma
difference_empty_L
X
:
X
∖
∅
=
X
.
Proof
.
unfold_leibniz
.
apply
difference_empty
.
Qed
.
Lemma
difference_union_distr_l_L
X
Y
Z
:
(
X
∪
Y
)
∖
Z
=
X
∖
Z
∪
Y
∖
Z
.
Lemma
difference_union_distr_l_L
X
Y
Z
:
(
X
∪
Y
)
∖
Z
=
X
∖
Z
∪
Y
∖
Z
.
Proof
.
unfold_leibniz
.
apply
difference_union_distr_l
.
Qed
.
Proof
.
unfold_leibniz
.
apply
difference_union_distr_l
.
Qed
.
Lemma
difference_union_distr_r_L
X
Y
Z
:
Z
∖
(
X
∪
Y
)
=
(
Z
∖
X
)
∩
(
Z
∖
Y
)
.
Lemma
difference_union_distr_r_L
X
Y
Z
:
Z
∖
(
X
∪
Y
)
=
(
Z
∖
X
)
∩
(
Z
∖
Y
)
.
...
@@ -697,6 +701,11 @@ Section collection.
...
@@ -697,6 +701,11 @@ Section collection.
intros
?
x
;
split
;
rewrite
!
elem_of_union
,
elem_of_difference
;
[|
intuition
]
.
intros
?
x
;
split
;
rewrite
!
elem_of_union
,
elem_of_difference
;
[|
intuition
]
.
destruct
(
decide
(
x
∈
X
));
intuition
.
destruct
(
decide
(
x
∈
X
));
intuition
.
Qed
.
Qed
.
Lemma
difference_union
X
Y
:
X
∖
Y
∪
Y
≡
X
∪
Y
.
Proof
.
intros
x
.
rewrite
!
elem_of_union
;
rewrite
elem_of_difference
.
split
;
[
|
destruct
(
decide
(
x
∈
Y
))
];
intuition
.
Qed
.
Lemma
subseteq_disjoint_union
X
Y
:
X
⊆
Y
↔
∃
Z
,
Y
≡
X
∪
Z
∧
X
⊥
Z
.
Lemma
subseteq_disjoint_union
X
Y
:
X
⊆
Y
↔
∃
Z
,
Y
≡
X
∪
Z
∧
X
⊥
Z
.
Proof
.
Proof
.
split
;
[|
set_solver
]
.
split
;
[|
set_solver
]
.
...
@@ -706,16 +715,28 @@ Section collection.
...
@@ -706,16 +715,28 @@ Section collection.
Proof
.
intros
[
HXY1
HXY2
]
Hdiff
.
destruct
HXY2
.
set_solver
.
Qed
.
Proof
.
intros
[
HXY1
HXY2
]
Hdiff
.
destruct
HXY2
.
set_solver
.
Qed
.
Lemma
empty_difference_subseteq
X
Y
:
X
∖
Y
≡
∅
→
X
⊆
Y
.
Lemma
empty_difference_subseteq
X
Y
:
X
∖
Y
≡
∅
→
X
⊆
Y
.
Proof
.
set_solver
.
Qed
.
Proof
.
set_solver
.
Qed
.
Lemma
singleton_union_difference
X
Y
x
:
{[
x
]}
∪
(
X
∖
Y
)
≡
({[
x
]}
∪
X
)
∖
(
Y
∖
{[
x
]})
.
Proof
.
intro
y
;
split
;
intros
Hy
;
[
set_solver
|
]
.
destruct
(
decide
(
y
∈
{[
x
]}));
set_solver
.
Qed
.
Context
`{
!
LeibnizEquiv
C
}
.
Context
`{
!
LeibnizEquiv
C
}
.
Lemma
union_difference_L
X
Y
:
X
⊆
Y
→
Y
=
X
∪
Y
∖
X
.
Lemma
union_difference_L
X
Y
:
X
⊆
Y
→
Y
=
X
∪
Y
∖
X
.
Proof
.
unfold_leibniz
.
apply
union_difference
.
Qed
.
Proof
.
unfold_leibniz
.
apply
union_difference
.
Qed
.
Lemma
difference_union_L
X
Y
:
X
∖
Y
∪
Y
=
X
∪
Y
.
Proof
.
unfold_leibniz
.
apply
difference_union
.
Qed
.
Lemma
non_empty_difference_L
X
Y
:
X
⊂
Y
→
Y
∖
X
≠
∅.
Lemma
non_empty_difference_L
X
Y
:
X
⊂
Y
→
Y
∖
X
≠
∅.
Proof
.
unfold_leibniz
.
apply
non_empty_difference
.
Qed
.
Proof
.
unfold_leibniz
.
apply
non_empty_difference
.
Qed
.
Lemma
empty_difference_subseteq_L
X
Y
:
X
∖
Y
=
∅
→
X
⊆
Y
.
Lemma
empty_difference_subseteq_L
X
Y
:
X
∖
Y
=
∅
→
X
⊆
Y
.
Proof
.
unfold_leibniz
.
apply
empty_difference_subseteq
.
Qed
.
Proof
.
unfold_leibniz
.
apply
empty_difference_subseteq
.
Qed
.
Lemma
subseteq_disjoint_union_L
X
Y
:
X
⊆
Y
↔
∃
Z
,
Y
=
X
∪
Z
∧
X
⊥
Z
.
Lemma
subseteq_disjoint_union_L
X
Y
:
X
⊆
Y
↔
∃
Z
,
Y
=
X
∪
Z
∧
X
⊥
Z
.
Proof
.
unfold_leibniz
.
apply
subseteq_disjoint_union
.
Qed
.
Proof
.
unfold_leibniz
.
apply
subseteq_disjoint_union
.
Qed
.
Lemma
singleton_union_difference_L
X
Y
x
:
{[
x
]}
∪
(
X
∖
Y
)
=
({[
x
]}
∪
X
)
∖
(
Y
∖
{[
x
]})
.
Proof
.
unfold_leibniz
.
apply
singleton_union_difference
.
Qed
.
End
dec
.
End
dec
.
End
collection
.
End
collection
.
...
...
This diff is collapsed.
Click to expand it.
theories/fin_maps.v
+
9
−
0
View file @
0c2f6db1
...
@@ -409,6 +409,9 @@ Proof.
...
@@ -409,6 +409,9 @@ Proof.
intros
.
apply
map_eq
.
intros
j
.
by
destruct
(
decide
(
i
=
j
))
as
[
->
|?];
intros
.
apply
map_eq
.
intros
j
.
by
destruct
(
decide
(
i
=
j
))
as
[
->
|?];
rewrite
?lookup_delete
,
?lookup_delete_ne
.
rewrite
?lookup_delete
,
?lookup_delete_ne
.
Qed
.
Qed
.
Lemma
delete_idemp
{
A
}
(
m
:
M
A
)
i
:
delete
i
(
delete
i
m
)
=
delete
i
m
.
Proof
.
by
setoid_rewrite
<-
partial_alter_compose
.
Qed
.
Lemma
delete_partial_alter
{
A
}
(
m
:
M
A
)
i
f
:
Lemma
delete_partial_alter
{
A
}
(
m
:
M
A
)
i
f
:
m
!!
i
=
None
→
delete
i
(
partial_alter
f
i
m
)
=
m
.
m
!!
i
=
None
→
delete
i
(
partial_alter
f
i
m
)
=
m
.
Proof
.
Proof
.
...
@@ -418,6 +421,9 @@ Qed.
...
@@ -418,6 +421,9 @@ Qed.
Lemma
delete_insert
{
A
}
(
m
:
M
A
)
i
x
:
Lemma
delete_insert
{
A
}
(
m
:
M
A
)
i
x
:
m
!!
i
=
None
→
delete
i
(
<
[
i
:=
x
]
>
m
)
=
m
.
m
!!
i
=
None
→
delete
i
(
<
[
i
:=
x
]
>
m
)
=
m
.
Proof
.
apply
delete_partial_alter
.
Qed
.
Proof
.
apply
delete_partial_alter
.
Qed
.
Lemma
delete_insert_delete
{
A
}
(
m
:
M
A
)
i
x
:
delete
i
(
<
[
i
:=
x
]
>
m
)
=
delete
i
m
.
Proof
.
by
setoid_rewrite
<-
partial_alter_compose
.
Qed
.
Lemma
insert_delete
{
A
}
(
m
:
M
A
)
i
x
:
<
[
i
:=
x
]
>
(
delete
i
m
)
=
<
[
i
:=
x
]
>
m
.
Lemma
insert_delete
{
A
}
(
m
:
M
A
)
i
x
:
<
[
i
:=
x
]
>
(
delete
i
m
)
=
<
[
i
:=
x
]
>
m
.
Proof
.
symmetry
;
apply
(
partial_alter_compose
(
λ
_,
Some
x
))
.
Qed
.
Proof
.
symmetry
;
apply
(
partial_alter_compose
(
λ
_,
Some
x
))
.
Qed
.
Lemma
delete_subseteq
{
A
}
(
m
:
M
A
)
i
:
delete
i
m
⊆
m
.
Lemma
delete_subseteq
{
A
}
(
m
:
M
A
)
i
:
delete
i
m
⊆
m
.
...
@@ -572,6 +578,9 @@ Proof.
...
@@ -572,6 +578,9 @@ Proof.
Qed
.
Qed
.
Lemma
singleton_non_empty
{
A
}
i
(
x
:
A
)
:
{[
i
:=
x
]}
≠
∅.
Lemma
singleton_non_empty
{
A
}
i
(
x
:
A
)
:
{[
i
:=
x
]}
≠
∅.
Proof
.
apply
insert_non_empty
.
Qed
.
Proof
.
apply
insert_non_empty
.
Qed
.
Lemma
delete_singleton_ne
{
A
}
i
j
(
x
:
A
)
:
j
≠
i
→
delete
i
{[
j
:=
x
]}
=
{[
j
:=
x
]}
.
Proof
.
intro
.
apply
delete_notin
.
by
apply
lookup_singleton_ne
.
Qed
.
(** ** Properties of the map operations *)
(** ** Properties of the map operations *)
Lemma
fmap_empty
{
A
B
}
(
f
:
A
→
B
)
:
f
<$>
∅
=
∅.
Lemma
fmap_empty
{
A
B
}
(
f
:
A
→
B
)
:
f
<$>
∅
=
∅.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment