finite_sets
[T:TYPE]
:
THEORY
BEGIN
A:
VAR
finite
set
B:
VAR
finite
set
S:
VAR
finite
set
x:
VAR
T
card
emptyset:
THEOREM
card(emptyset[T])
=
0
empty
card:
THEOREM
empty?(S)
IFF
(card(S)
=
0)
card
empty?:
THEOREM
card(S)
=
0
=
empty?(S)
card
is
0:
THEOREM
card(S)
=
0
=
(S
=
emptyset)
nonempty
card:
THEOREM
nonempty?(S)
IFF
(card(S)
>
0)
card
singleton:
THEOREM
card(singleton(x))
=
1
card
one:
THEOREM
(card(S)
=
1)
IFF
(EXISTS
x
:
S
=
singleton(x))
card
disj
union:
THEOREM
disjoint?(A,
B)
IMPLIES
(card(union(A,
B))
=
(card(A)
+
card(B)))
card
diff
subset:
THEOREM
subset?(A,
B)
IMPLIES
(card(difference(B,
A))
=
(card(B)
-
card(A)))
card
subset:
THEOREM
subset?(A,
B)
IMPLIES
(card(A)
<
=
card(B))
card
plus:
THEOREM
(card(A)
+
card(B))
=
(card(union(A,
B))
+
card(intersection(A,
B)))
card
union:
THEOREM
card(union(A,
B))
=
((card(A)
+
card(B))
-
card(intersection(A,
B)))
card
add:
THEOREM
card(add(x,
S))
=
(card(S)
+
IF
S(x)
THEN
0
ELSE
1
ENDIF)
card
remove:
THEOREM
card(remove(x,
S))
=
(card(S)
-
IF
S(x)
THEN
1
ELSE
0
ENDIF)
card
rest:
THEOREM
(NOT
empty?(S))
IMPLIES
(card(rest(S))
=
(card(S)
-
1))
same
card
subset:
THEOREM
(subset?(A,
B)
AND
(card(A)
=
card(B)))
IMPLIES
(A
=
B)
smaller
card
subset:
THEOREM
(subset?(A,
B)
AND
(card(A)
<
card(B)))
IMPLIES
(EXISTS
x
:
member(x,
B)
AND
(NOT
member(x,
A)))
card
1
has
1:
THEOREM
(card(S)
>
=
1)
IMPLIES
(EXISTS
(x:T)
:
S(x))
card
2
has
2:
THEOREM
(card(S)
>
=
2)
IMPLIES
(EXISTS
(x:T),
(y:T)
:
(x
/=
y)
AND
S(x)
AND
S(y))
card
intersection
le:
THEOREM
(card(intersection(A,
B))
<
=
card(A))
AND
(card(intersection(A,
B))
<
=
card(B))
card
bij:
THEOREM
(card(S)
=
N)
IFF
(EXISTS
(f:[(S)
-
>
below[N]])
:
bijective?(f))
bij
exists:
COROLLARY
EXISTS
(f:[(S)
-
>
below(card(S))])
:
bijective?(f)
END
finite_sets