Lemmas about sets - many of these came from Bruno Dutertre in the more_set_lemmas theory of the finite_sets library
sets_lemmas
[T:TYPE]
:
THEORY
BEGIN
x:
VAR
T
y:
VAR
T
extensionality:
LEMMA
(FORALL
x
:
member(x,
a)
IFF
member(x,
b))
IMPLIES
(a
=
b)
emptyset
is
empty?:
LEMMA
empty?(a)
IFF
(a
=
emptyset)
empty
no
members:
LEMMA
NOT
member(x,
emptyset)
emptyset
min:
LEMMA
subset?(a,
emptyset)
IMPLIES
(a
=
emptyset)
nonempty
member:
LEMMA
nonempty?(a)
IFF
(EXISTS
x
:
member(x,
a))
fullset
member:
LEMMA
member(x,
fullset)
fullset
max:
LEMMA
subset?(fullset,
a)
IMPLIES
(a
=
fullset)
nonempty
exists:
LEMMA
nonempty?(a)
IFF
(EXISTS
(x:(a)
)
:
TRUE)
subset
reflexive:
LEMMA
subset?(a,
a)
subset
antisymmetric:
LEMMA
(subset?(a,
b)
AND
subset?(b,
a))
IMPLIES
(a
=
b)
subset
transitive:
LEMMA
(subset?(a,
b)
AND
subset?(b,
c))
IMPLIES
subset?(a,
c)
subset
partial
order:
LEMMA
partial
order?(subset?[T])
subset
emptyset:
LEMMA
subset?(emptyset,
a)
subset
fullset:
LEMMA
subset?(a,
fullset)
union
idempotent:
LEMMA
union(a,
a)
=
a
union
commutative:
LEMMA
union(a,
b)
=
union(b,
a)
union
associative:
LEMMA
union(union(a,
b),
c)
=
union(a,
union(b,
c))
union
empty:
LEMMA
union(a,
emptyset)
=
a
union
full:
LEMMA
union(a,
fullset)
=
fullset
union
subset1:
LEMMA
subset?(a,
union(a,
b))
union
subset2:
LEMMA
subset?(a,
b)
IMPLIES
(union(a,
b)
=
b)
union
upper
bound:
LEMMA
(subset?(a,
c)
AND
subset?(b,
c))
IMPLIES
subset?(union(a,
b),
c)
union
difference:
LEMMA
union(a,
b)
=
union(a,
difference(b,
a))
union
diff
subset:
LEMMA
subset?(a,
b)
IMPLIES
(union(a,
difference(b,
a))
=
b)
intersection
idempotent:
LEMMA
intersection(a,
a)
=
a
intersection
commutative:
LEMMA
intersection(a,
b)
=
intersection(b,
a)
intersection
associative:
LEMMA
intersection(intersection(a,
b),
c)
=
intersection(a,
intersection(b,
c))
intersection
empty:
LEMMA
intersection(a,
emptyset)
=
emptyset
intersection
full:
LEMMA
intersection(a,
fullset)
=
a
intersection
subset1:
LEMMA
subset?(intersection(a,
b),
a)
intersection
subset2:
LEMMA
subset?(a,
b)
IMPLIES
(intersection(a,
b)
=
a)
intersection
lower
bound:
LEMMA
(subset?(c,
a)
AND
subset?(c,
b))
IMPLIES
subset?(c,
intersection(a,
b))
distribute
intersection
union:
LEMMA
intersection(a,
union(b,
c))
=
union(intersection(a,
b),
intersection(a,
c))
distribute
union
intersection:
LEMMA
union(a,
intersection(b,
c))
=
intersection(union(a,
b),
union(a,
c))
complement
emptyset:
LEMMA
complement(emptyset[T])
=
fullset
complement
fullset:
LEMMA
complement(fullset[T])
=
emptyset
complement
complement:
LEMMA
complement(complement(a))
=
a
subset
complement:
LEMMA
subset?(complement(a),
complement(b))
IFF
subset?(b,
a)
demorgan1:
LEMMA
complement(union(a,
b))
=
intersection(complement(a),
complement(b))
demorgan2:
LEMMA
complement(intersection(a,
b))
=
union(complement(a),
complement(b))
difference
emptyset1:
LEMMA
difference(a,
emptyset)
=
a
difference
emptyset2:
LEMMA
difference(emptyset,
a)
=
emptyset
difference
fullset1:
LEMMA
difference(a,
fullset)
=
emptyset
difference
fullset2:
LEMMA
difference(fullset,
a)
=
complement(a)
difference
intersection:
LEMMA
difference(a,
b)
=
intersection(a,
complement(b))
difference
difference1:
LEMMA
difference(difference(a,
b),
c)
=
difference(a,
union(b,
c))
difference
difference2:
LEMMA
difference(a,
difference(b,
c))
=
union(difference(a,
b),
intersection(a,
c))
difference
subset:
LEMMA
subset?(difference(a,
b),
a)
difference
disjoint:
LEMMA
disjoint?(a,
difference(b,
a))
diff
union
inter:
LEMMA
difference(union(a,
b),
a)
=
difference(b,
intersection(a,
b))
nonempty
add:
LEMMA
NOT
empty?(add(x,
a))
member
add:
LEMMA
member(x,
a)
IMPLIES
(add(x,
a)
=
a)
member
remove:
LEMMA
(NOT
member(x,
a))
IMPLIES
(remove(x,
a)
=
a)
add
remove
member:
LEMMA
member(x,
a)
IMPLIES
(add(x,
remove(x,
a))
=
a)
remove
add
member:
LEMMA
(NOT
member(x,
a))
IMPLIES
(remove(x,
add(x,
a))
=
a)
subset
add:
LEMMA
subset?(a,
add(x,
a))
add
as
union:
LEMMA
add(x,
a)
=
union(a,
singleton(x))
singleton
as
add:
LEMMA
singleton(x)
=
add(x,
emptyset)
subset
remove:
LEMMA
subset?(remove(x,
a),
a)
remove
as
difference:
LEMMA
remove(x,
a)
=
difference(a,
singleton(x))
remove
member
singleton:
LEMMA
remove(x,
singleton(x))
=
emptyset
%%(TCC)
choose_rest_TCC1:
OBLIGATION
choose
rest:
LEMMA
(NOT
empty?(a))
IMPLIES
(add(choose(a),
rest(a))
=
a)
choose
member:
LEMMA
(NOT
empty?(a))
IMPLIES
member(choose(a),
a)
choose
not
member:
LEMMA
(NOT
empty?(a))
IMPLIES
(NOT
member(choose(a),
rest(a)))
rest
not
equal:
LEMMA
(NOT
empty?(a))
IMPLIES
(rest(a)
/=
a)
rest
member:
LEMMA
member(x,
rest(a))
IMPLIES
member(x,
a)
rest
subset:
LEMMA
subset?(rest(a),
a)
choose
add:
LEMMA
(choose(add(x,
a))
=
x)
OR
member(choose(add(x,
a)),
a)
%%(TCC)
choose_rest_or_TCC1:
OBLIGATION
choose
rest
or:
LEMMA
member(x,
a)
IMPLIES
(member(x,
rest(a))
OR
(x
=
choose(a)))
%%(TCC)
choose_singleton_TCC1:
OBLIGATION
choose
singleton:
LEMMA
choose(singleton(x))
=
x
rest
singleton:
LEMMA
rest(singleton(x))
=
emptyset[T]
singleton
subset:
LEMMA
member(x,
a)
IFF
subset?(singleton(x),
a)
rest
empty
lem:
LEMMA
((NOT
empty?(a))
AND
empty?(rest(a)))
IMPLIES
(a
=
singleton(choose(a)))
singleton
disjoint:
LEMMA
(NOT
member(x,
a))
IMPLIES
disjoint?(singleton(x),
a)
disjoint
remove
left:
LEMMA
disjoint?(a,
b)
IMPLIES
disjoint?(remove(x,
a),
b)
disjoint
remove
right:
LEMMA
disjoint?(a,
b)
IMPLIES
disjoint?(a,
remove(x,
b))
union
disj
remove
left:
LEMMA
(disjoint?(a,
b)
AND
a(x))
IMPLIES
(union(remove(x,
a),
b)
=
remove(x,
union(a,
b)))
union
disj
remove
right:
LEMMA
(disjoint?(a,
b)
AND
b(x))
IMPLIES
(union(a,
remove(x,
b))
=
remove(x,
union(a,
b)))
END
sets_lemmas