doc-src/TutorialI/Sets/sets.tex
author nipkow
Thu, 01 Nov 2007 20:20:19 +0100
changeset 25258 22d16596c306
parent 15115 1c3be9eb4126
child 25261 3dc292be0b54
permissions -rw-r--r--
recdef -> fun
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
     1
% $Id$
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
     2
\chapter{Sets, Functions and Relations}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
     3
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
     4
This chapter describes the formalization of typed set theory, which is
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
     5
the basis of much else in HOL\@.  For example, an
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
     6
inductive definition yields a set, and the abstract theories of relations
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
     7
regard a relation as a set of pairs.  The chapter introduces the well-known
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
     8
constants such as union and intersection, as well as the main operations on relations, such as converse, composition and
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
     9
transitive closure.  Functions are also covered.  They are not sets in
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    10
HOL, but many of their properties concern sets: the range of a
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    11
function is a set, and the inverse image of a function maps sets to sets.
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    12
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    13
This chapter will be useful to anybody who plans to develop a substantial
13439
2f98365f57a8 *** empty log message ***
nipkow
parents: 12815
diff changeset
    14
proof.  Sets are convenient for formalizing  computer science concepts such
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    15
as grammars, logical calculi and state transition systems.  Isabelle can
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    16
prove many statements involving sets automatically.
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    17
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    18
This chapter ends with a case study concerning model checking for the
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    19
temporal logic CTL\@.  Most of the other examples are simple.  The
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    20
chapter presents a small selection of built-in theorems in order to point
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    21
out some key properties of the various constants and to introduce you to
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    22
the notation. 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    23
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    24
Natural deduction rules are provided for the set theory constants, but they
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    25
are seldom used directly, so only a few are presented here.  
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    26
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    27
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    28
\section{Sets}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    29
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    30
\index{sets|(}%
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    31
HOL's set theory should not be confused with traditional,  untyped set
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    32
theory, in which everything is a set.  Our sets are typed. In a given set,
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    33
all elements have the same type, say~$\tau$,  and the set itself has type
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
    34
$\tau$~\tydx{set}. 
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    35
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
    36
We begin with \textbf{intersection}, \textbf{union} and
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
    37
\textbf{complement}. In addition to the
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
    38
\textbf{membership relation}, there  is a symbol for its negation. These
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    39
points can be seen below.  
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    40
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
    41
Here are the natural deduction rules for \rmindex{intersection}.  Note
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
    42
the  resemblance to those for conjunction.  
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    43
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    44
\isasymlbrakk c\ \isasymin\ A;\ c\ \isasymin\ B\isasymrbrakk\ 
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    45
\isasymLongrightarrow\ c\ \isasymin\ A\ \isasyminter\ B%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
    46
\rulenamedx{IntI}\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    47
c\ \isasymin\ A\ \isasyminter\ B\ \isasymLongrightarrow\ c\ \isasymin\ A
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
    48
\rulenamedx{IntD1}\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    49
c\ \isasymin\ A\ \isasyminter\ B\ \isasymLongrightarrow\ c\ \isasymin\ B
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
    50
\rulenamedx{IntD2}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    51
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    52
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
    53
Here are two of the many installed theorems concerning set
12815
wenzelm
parents: 12649
diff changeset
    54
complement.\index{complement!of a set}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    55
Note that it is denoted by a minus sign.
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    56
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    57
(c\ \isasymin\ -\ A)\ =\ (c\ \isasymnotin\ A)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
    58
\rulenamedx{Compl_iff}\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    59
-\ (A\ \isasymunion\ B)\ =\ -\ A\ \isasyminter\ -\ B
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    60
\rulename{Compl_Un}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    61
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    62
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    63
Set \textbf{difference}\indexbold{difference!of sets} is the intersection
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    64
of a set with the  complement of another set. Here we also see the syntax
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    65
for the  empty set and for the universal set. 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    66
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    67
A\ \isasyminter\ (B\ -\ A)\ =\ \isacharbraceleft\isacharbraceright
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    68
\rulename{Diff_disjoint}\isanewline
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    69
A\ \isasymunion\ -\ A\ =\ UNIV%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    70
\rulename{Compl_partition}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    71
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    72
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
    73
The \bfindex{subset relation} holds between two sets just if every element 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    74
of one is also an element of the other. This relation is reflexive.  These
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    75
are its natural deduction rules:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    76
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    77
({\isasymAnd}x.\ x\ \isasymin\ A\ \isasymLongrightarrow\ x\ \isasymin\ B)\ \isasymLongrightarrow\ A\ \isasymsubseteq\ B%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
    78
\rulenamedx{subsetI}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    79
\par\smallskip%          \isanewline didn't leave enough space
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    80
\isasymlbrakk A\ \isasymsubseteq\ B;\ c\ \isasymin\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    81
A\isasymrbrakk\ \isasymLongrightarrow\ c\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    82
\isasymin\ B%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
    83
\rulenamedx{subsetD}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    84
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    85
In harder proofs, you may need to apply \isa{subsetD} giving a specific term
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    86
for~\isa{c}.  However, \isa{blast} can instantly prove facts such as this
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    87
one: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    88
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    89
(A\ \isasymunion\ B\ \isasymsubseteq\ C)\ =\
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    90
(A\ \isasymsubseteq\ C\ \isasymand\ B\ \isasymsubseteq\ C)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
    91
\rulenamedx{Un_subset_iff}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    92
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    93
Here is another example, also proved automatically:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    94
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    95
\isacommand{lemma}\ "(A\
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    96
\isasymsubseteq\ -B)\ =\ (B\ \isasymsubseteq\ -A)"\isanewline
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
    97
\isacommand{by}\ blast
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    98
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
    99
%
10983
59961d32b1ae *** empty log message ***
nipkow
parents: 10978
diff changeset
   100
This is the same example using \textsc{ascii} syntax, illustrating a pitfall: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   101
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   102
\isacommand{lemma}\ "(A\ <=\ -B)\ =\ (B\ <=\ -A)"
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   103
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   104
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   105
The proof fails.  It is not a statement about sets, due to overloading;
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   106
the relation symbol~\isa{<=} can be any relation, not just  
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   107
subset. 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   108
In this general form, the statement is not valid.  Putting
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   109
in a type constraint forces the variables to denote sets, allowing the
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   110
proof to succeed:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   111
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   112
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   113
\isacommand{lemma}\ "((A::\ {\isacharprime}a\ set)\ <=\ -B)\ =\ (B\ <=\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   114
-A)"
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   115
\end{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   116
Section~\ref{sec:axclass} below describes overloading.  Incidentally,
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   117
\isa{A~\isasymsubseteq~-B} asserts that the sets \isa{A} and \isa{B} are
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   118
disjoint.
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   119
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   120
\medskip
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   121
Two sets are \textbf{equal}\indexbold{equality!of sets} if they contain the
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   122
same elements.   This is
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   123
the principle of \textbf{extensionality}\indexbold{extensionality!for sets}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   124
for sets. 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   125
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   126
({\isasymAnd}x.\ (x\ {\isasymin}\ A)\ =\ (x\ {\isasymin}\ B))\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   127
{\isasymLongrightarrow}\ A\ =\ B
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   128
\rulenamedx{set_ext}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   129
\end{isabelle}
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   130
Extensionality can be expressed as 
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   131
$A=B\iff (A\subseteq B)\conj (B\subseteq A)$.  
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   132
The following rules express both
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   133
directions of this equivalence.  Proving a set equation using
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   134
\isa{equalityI} allows the two inclusions to be proved independently.
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   135
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   136
\isasymlbrakk A\ \isasymsubseteq\ B;\ B\ \isasymsubseteq\
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   137
A\isasymrbrakk\ \isasymLongrightarrow\ A\ =\ B
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   138
\rulenamedx{equalityI}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   139
\par\smallskip%          \isanewline didn't leave enough space
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   140
\isasymlbrakk A\ =\ B;\ \isasymlbrakk A\ \isasymsubseteq\ B;\ B\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   141
\isasymsubseteq\ A\isasymrbrakk\ \isasymLongrightarrow\ P\isasymrbrakk\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   142
\isasymLongrightarrow\ P%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   143
\rulenamedx{equalityE}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   144
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   145
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   146
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   147
\subsection{Finite Set Notation} 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   148
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   149
\indexbold{sets!notation for finite}
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   150
Finite sets are expressed using the constant \cdx{insert}, which is
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   151
a form of union:
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   152
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   153
insert\ a\ A\ =\ \isacharbraceleft a\isacharbraceright\ \isasymunion\ A
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   154
\rulename{insert_is_Un}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   155
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   156
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   157
The finite set expression \isa{\isacharbraceleft
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   158
a,b\isacharbraceright} abbreviates
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   159
\isa{insert\ a\ (insert\ b\ \isacharbraceleft\isacharbraceright)}.
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   160
Many facts about finite sets can be proved automatically: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   161
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   162
\isacommand{lemma}\
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   163
"\isacharbraceleft a,b\isacharbraceright\
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   164
\isasymunion\ \isacharbraceleft c,d\isacharbraceright\ =\
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   165
\isacharbraceleft a,b,c,d\isacharbraceright"\isanewline
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   166
\isacommand{by}\ blast
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   167
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   168
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   169
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   170
Not everything that we would like to prove is valid. 
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   171
Consider this attempt: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   172
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   173
\isacommand{lemma}\ "\isacharbraceleft a,b\isacharbraceright\ \isasyminter\ \isacharbraceleft b,c\isacharbraceright\ =\
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   174
\isacharbraceleft b\isacharbraceright"\isanewline
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   175
\isacommand{apply}\ auto
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   176
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   177
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   178
The proof fails, leaving the subgoal \isa{b=c}. To see why it 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   179
fails, consider a correct version: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   180
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   181
\isacommand{lemma}\ "\isacharbraceleft a,b\isacharbraceright\ \isasyminter\ 
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   182
\isacharbraceleft b,c\isacharbraceright\ =\ (if\ a=c\ then\
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   183
\isacharbraceleft a,b\isacharbraceright\ else\ \isacharbraceleft
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   184
b\isacharbraceright)"\isanewline
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   185
\isacommand{apply}\ simp\isanewline
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   186
\isacommand{by}\ blast
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   187
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   188
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   189
Our mistake was to suppose that the various items were distinct.  Another
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   190
remark: this proof uses two methods, namely {\isa{simp}}  and
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   191
{\isa{blast}}. Calling {\isa{simp}} eliminates the
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   192
\isa{if}-\isa{then}-\isa{else} expression,  which {\isa{blast}}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   193
cannot break down. The combined methods (namely {\isa{force}}  and
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   194
\isa{auto}) can prove this fact in one step. 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   195
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   196
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   197
\subsection{Set Comprehension}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   198
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   199
\index{set comprehensions|(}%
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   200
The set comprehension \isa{\isacharbraceleft x.\
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   201
P\isacharbraceright} expresses the set of all elements that satisfy the
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   202
predicate~\isa{P}.  Two laws describe the relationship between set 
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   203
comprehension and the membership relation:
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   204
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   205
(a\ \isasymin\
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   206
\isacharbraceleft x.\ P\ x\isacharbraceright)\ =\ P\ a
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   207
\rulename{mem_Collect_eq}\isanewline
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   208
\isacharbraceleft x.\ x\ \isasymin\ A\isacharbraceright\ =\ A
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   209
\rulename{Collect_mem_eq}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   210
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   211
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   212
\smallskip
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   213
Facts such as these have trivial proofs:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   214
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   215
\isacommand{lemma}\ "\isacharbraceleft x.\ P\ x\ \isasymor\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   216
x\ \isasymin\ A\isacharbraceright\ =\
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   217
\isacharbraceleft x.\ P\ x\isacharbraceright\ \isasymunion\ A"
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   218
\par\smallskip
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   219
\isacommand{lemma}\ "\isacharbraceleft x.\ P\ x\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   220
\isasymlongrightarrow\ Q\ x\isacharbraceright\ =\
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   221
-\isacharbraceleft x.\ P\ x\isacharbraceright\
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   222
\isasymunion\ \isacharbraceleft x.\ Q\ x\isacharbraceright"
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   223
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   224
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   225
\smallskip
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   226
Isabelle has a general syntax for comprehension, which is best 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   227
described through an example: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   228
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   229
\isacommand{lemma}\ "\isacharbraceleft p*q\ \isacharbar\ p\ q.\ 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   230
p{\isasymin}prime\ \isasymand\ q{\isasymin}prime\isacharbraceright\ =\ 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   231
\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   232
\ \ \ \ \ \ \ \ \isacharbraceleft z.\ \isasymexists p\ q.\ z\ =\ p*q\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   233
\isasymand\ p{\isasymin}prime\ \isasymand\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   234
q{\isasymin}prime\isacharbraceright"
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   235
\end{isabelle}
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   236
The left and right hand sides
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   237
of this equation are identical. The syntax used in the 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   238
left-hand side abbreviates the right-hand side: in this case, all numbers
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   239
that are the product of two primes.  The syntax provides a neat
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   240
way of expressing any set given by an expression built up from variables
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   241
under specific constraints.  The drawback is that it hides the true form of
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   242
the expression, with its existential quantifiers. 
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   243
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   244
\smallskip
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   245
\emph{Remark}.  We do not need sets at all.  They are essentially equivalent
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   246
to predicate variables, which are allowed in  higher-order logic.  The main
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   247
benefit of sets is their notation;  we can write \isa{x{\isasymin}A}
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   248
and
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   249
\isa{\isacharbraceleft z.\ P\isacharbraceright} where predicates would
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   250
require writing
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   251
\isa{A(x)} and
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   252
\isa{{\isasymlambda}z.\ P}. 
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   253
\index{set comprehensions|)}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   254
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   255
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   256
\subsection{Binding Operators}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   257
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   258
\index{quantifiers!for sets|(}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   259
Universal and existential quantifications may range over sets, 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   260
with the obvious meaning.  Here are the natural deduction rules for the
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   261
bounded universal quantifier.  Occasionally you will need to apply
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   262
\isa{bspec} with an explicit instantiation of the variable~\isa{x}:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   263
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   264
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   265
({\isasymAnd}x.\ x\ \isasymin\ A\ \isasymLongrightarrow\ P\ x)\ \isasymLongrightarrow\ {\isasymforall}x\isasymin
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   266
A.\ P\ x%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   267
\rulenamedx{ballI}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   268
\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   269
\isasymlbrakk{\isasymforall}x\isasymin A.\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   270
P\ x;\ x\ \isasymin\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   271
A\isasymrbrakk\ \isasymLongrightarrow\ P\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   272
x%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   273
\rulenamedx{bspec}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   274
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   275
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   276
Dually, here are the natural deduction rules for the
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   277
bounded existential quantifier.  You may need to apply
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   278
\isa{bexI} with an explicit instantiation:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   279
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   280
\isasymlbrakk P\ x;\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   281
x\ \isasymin\ A\isasymrbrakk\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   282
\isasymLongrightarrow\
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   283
\isasymexists x\isasymin A.\ P\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   284
x%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   285
\rulenamedx{bexI}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   286
\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   287
\isasymlbrakk\isasymexists x\isasymin A.\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   288
P\ x;\ {\isasymAnd}x.\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   289
{\isasymlbrakk}x\ \isasymin\ A;\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   290
P\ x\isasymrbrakk\ \isasymLongrightarrow\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   291
Q\isasymrbrakk\ \isasymLongrightarrow\ Q%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   292
\rulenamedx{bexE}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   293
\end{isabelle}
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   294
\index{quantifiers!for sets|)}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   295
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   296
\index{union!indexed}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   297
Unions can be formed over the values of a given  set.  The syntax is
14481
ab1e47451aaa auto update
paulson
parents: 14393
diff changeset
   298
\mbox{\isa{\isasymUnion x\isasymin A.\ B}} or 
ab1e47451aaa auto update
paulson
parents: 14393
diff changeset
   299
\isa{UN x:A.\ B} in \textsc{ascii}. Indexed union satisfies this basic law:
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   300
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   301
(b\ \isasymin\
15115
1c3be9eb4126 Undid \Union syntax with subscripts.
nipkow
parents: 14481
diff changeset
   302
(\isasymUnion x\isasymin A. B\ x) =\ (\isasymexists x\isasymin A.\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   303
b\ \isasymin\ B\ x)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   304
\rulenamedx{UN_iff}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   305
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   306
It has two natural deduction rules similar to those for the existential
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   307
quantifier.  Sometimes \isa{UN_I} must be applied explicitly:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   308
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   309
\isasymlbrakk a\ \isasymin\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   310
A;\ b\ \isasymin\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   311
B\ a\isasymrbrakk\ \isasymLongrightarrow\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   312
b\ \isasymin\
15115
1c3be9eb4126 Undid \Union syntax with subscripts.
nipkow
parents: 14481
diff changeset
   313
(\isasymUnion x\isasymin A. B\ x)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   314
\rulenamedx{UN_I}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   315
\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   316
\isasymlbrakk b\ \isasymin\
15115
1c3be9eb4126 Undid \Union syntax with subscripts.
nipkow
parents: 14481
diff changeset
   317
(\isasymUnion x\isasymin A. B\ x);\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   318
{\isasymAnd}x.\ {\isasymlbrakk}x\ \isasymin\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   319
A;\ b\ \isasymin\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   320
B\ x\isasymrbrakk\ \isasymLongrightarrow\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   321
R\isasymrbrakk\ \isasymLongrightarrow\ R%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   322
\rulenamedx{UN_E}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   323
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   324
%
12649
6e17f2ae9e16 updated;
wenzelm
parents: 12540
diff changeset
   325
The following built-in syntax translation (see {\S}\ref{sec:syntax-translations})
11203
881222d48777 *** empty log message ***
nipkow
parents: 11159
diff changeset
   326
lets us express the union over a \emph{type}:
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   327
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   328
\ \ \ \ \
10983
59961d32b1ae *** empty log message ***
nipkow
parents: 10978
diff changeset
   329
({\isasymUnion}x.\ B\ x)\ {\isasymrightleftharpoons}\
15115
1c3be9eb4126 Undid \Union syntax with subscripts.
nipkow
parents: 14481
diff changeset
   330
({\isasymUnion}x{\isasymin}UNIV. B\ x)
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   331
\end{isabelle}
11203
881222d48777 *** empty log message ***
nipkow
parents: 11159
diff changeset
   332
%Abbreviations work as you might expect.  The term on the left-hand side of
881222d48777 *** empty log message ***
nipkow
parents: 11159
diff changeset
   333
%the \isasymrightleftharpoons\ symbol is automatically translated to the right-hand side when the
881222d48777 *** empty log message ***
nipkow
parents: 11159
diff changeset
   334
%term is parsed, the reverse translation being done when the term is
881222d48777 *** empty log message ***
nipkow
parents: 11159
diff changeset
   335
%displayed.
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   336
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   337
We may also express the union of a set of sets, written \isa{Union\ C} in
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   338
\textsc{ascii}: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   339
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   340
(A\ \isasymin\ \isasymUnion C)\ =\ (\isasymexists X\isasymin C.\ A\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   341
\isasymin\ X)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   342
\rulenamedx{Union_iff}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   343
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   344
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   345
\index{intersection!indexed}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   346
Intersections are treated dually, although they seem to be used less often
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   347
than unions.  The syntax below would be \isa{INT
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   348
x:\ A.\ B} and \isa{Inter\ C} in \textsc{ascii}.  Among others, these
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   349
theorems are available:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   350
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   351
(b\ \isasymin\
15115
1c3be9eb4126 Undid \Union syntax with subscripts.
nipkow
parents: 14481
diff changeset
   352
(\isasymInter x\isasymin A. B\ x))\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   353
=\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   354
({\isasymforall}x\isasymin A.\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   355
b\ \isasymin\ B\ x)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   356
\rulenamedx{INT_iff}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   357
\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   358
(A\ \isasymin\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   359
\isasymInter C)\ =\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   360
({\isasymforall}X\isasymin C.\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   361
A\ \isasymin\ X)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   362
\rulenamedx{Inter_iff}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   363
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   364
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   365
Isabelle uses logical equivalences such as those above in automatic proof. 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   366
Unions, intersections and so forth are not simply replaced by their
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   367
definitions.  Instead, membership tests are simplified.  For example,  $x\in
11428
332347b9b942 tidying the index
paulson
parents: 11417
diff changeset
   368
A\cup B$ is replaced by $x\in A\lor x\in B$.
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   369
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   370
The internal form of a comprehension involves the constant  
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   371
\cdx{Collect},
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   372
which occasionally appears when a goal or theorem
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   373
is displayed.  For example, \isa{Collect\ P}  is the same term as
11159
07b13770c4d6 *** empty log message ***
nipkow
parents: 11080
diff changeset
   374
\isa{\isacharbraceleft x.\ P\ x\isacharbraceright}.  The same thing can
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   375
happen with quantifiers:   \hbox{\isa{All\ P}}\index{*All (constant)}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   376
is 
13814
5402c2eaf393 *** empty log message ***
nipkow
parents: 13439
diff changeset
   377
\isa{{\isasymforall}x.\ P\ x} and 
5402c2eaf393 *** empty log message ***
nipkow
parents: 13439
diff changeset
   378
\hbox{\isa{Ex\ P}}\index{*Ex (constant)} is \isa{\isasymexists x.\ P\ x}; 
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   379
also \isa{Ball\ A\ P}\index{*Ball (constant)} is 
13814
5402c2eaf393 *** empty log message ***
nipkow
parents: 13439
diff changeset
   380
\isa{{\isasymforall}x\isasymin A.\ P\ x} and 
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   381
\isa{Bex\ A\ P}\index{*Bex (constant)} is 
13814
5402c2eaf393 *** empty log message ***
nipkow
parents: 13439
diff changeset
   382
\isa{\isasymexists x\isasymin A.\ P\ x}.  For indexed unions and
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   383
intersections, you may see the constants 
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   384
\cdx{UNION} and  \cdx{INTER}\@.
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   385
The internal constant for $\varepsilon x.P(x)$ is~\cdx{Eps}.
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   386
12540
a5604ff1ef4e minor suggestions from Markus
paulson
parents: 12535
diff changeset
   387
We have only scratched the surface of Isabelle/HOL's set theory, which provides
a5604ff1ef4e minor suggestions from Markus
paulson
parents: 12535
diff changeset
   388
hundreds of theorems for your use.
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   389
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   390
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   391
\subsection{Finiteness and Cardinality}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   392
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   393
\index{sets!finite}%
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   394
The predicate \sdx{finite} holds of all finite sets.  Isabelle/HOL
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   395
includes many familiar theorems about finiteness and cardinality 
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   396
(\cdx{card}). For example, we have theorems concerning the
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   397
cardinalities of unions, intersections and the
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   398
powerset:\index{cardinality}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   399
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   400
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   401
{\isasymlbrakk}finite\ A;\ finite\ B\isasymrbrakk\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   402
\isasymLongrightarrow\ card\ A\ \isacharplus\ card\ B\ =\ card\ (A\ \isasymunion\ B)\ \isacharplus\ card\ (A\ \isasyminter\ B)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   403
\rulenamedx{card_Un_Int}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   404
\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   405
\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   406
finite\ A\ \isasymLongrightarrow\ card\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   407
(Pow\ A)\  =\ 2\ \isacharcircum\ card\ A%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   408
\rulenamedx{card_Pow}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   409
\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   410
\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   411
finite\ A\ \isasymLongrightarrow\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   412
card\ \isacharbraceleft B.\ B\ \isasymsubseteq\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   413
A\ \isasymand\ card\ B\ =\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   414
k\isacharbraceright\ =\ card\ A\ choose\ k%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   415
\rulename{n_subsets}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   416
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   417
Writing $|A|$ as $n$, the last of these theorems says that the number of
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   418
$k$-element subsets of~$A$ is \index{binomial coefficients}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   419
$\binom{n}{k}$.
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   420
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   421
\begin{warn}
11203
881222d48777 *** empty log message ***
nipkow
parents: 11159
diff changeset
   422
The term \isa{finite\ A} is defined via a syntax translation as an
12535
wenzelm
parents: 12489
diff changeset
   423
abbreviation for \isa{A {\isasymin} Finites}, where the constant
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   424
\cdx{Finites} denotes the set of all finite sets of a given type.  There
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   425
is no constant \isa{finite}.
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   426
\end{warn}
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   427
\index{sets|)}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   428
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   429
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   430
\section{Functions}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   431
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   432
\index{functions|(}%
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   433
This section describes a few concepts that involve
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   434
functions.  Some of the more important theorems are given along with the 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   435
names. A few sample proofs appear. Unlike with set theory, however, 
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   436
we cannot simply state lemmas and expect them to be proved using
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   437
\isa{blast}. 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   438
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   439
\subsection{Function Basics}
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   440
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   441
Two functions are \textbf{equal}\indexbold{equality!of functions}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   442
if they yield equal results given equal
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   443
arguments.  This is the principle of
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   444
\textbf{extensionality}\indexbold{extensionality!for functions} for
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   445
functions:
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   446
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   447
({\isasymAnd}x.\ f\ x\ =\ g\ x)\ {\isasymLongrightarrow}\ f\ =\ g
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   448
\rulenamedx{ext}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   449
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   450
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   451
\indexbold{updating a function}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   452
Function \textbf{update} is useful for modelling machine states. It has 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   453
the obvious definition and many useful facts are proved about 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   454
it.  In particular, the following equation is installed as a simplification
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   455
rule:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   456
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   457
(f(x:=y))\ z\ =\ (if\ z\ =\ x\ then\ y\ else\ f\ z)
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   458
\rulename{fun_upd_apply}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   459
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   460
Two syntactic points must be noted.  In
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   461
\isa{(f(x:=y))\ z} we are applying an updated function to an
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   462
argument; the outer parentheses are essential.  A series of two or more
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   463
updates can be abbreviated as shown on the left-hand side of this theorem:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   464
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   465
f(x:=y,\ x:=z)\ =\ f(x:=z)
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   466
\rulename{fun_upd_upd}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   467
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   468
Note also that we can write \isa{f(x:=z)} with only one pair of parentheses
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   469
when it is not being applied to an argument.
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   470
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   471
\medskip
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   472
The \bfindex{identity function} and function 
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   473
\textbf{composition}\indexbold{composition!of functions} are
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   474
defined:
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   475
\begin{isabelle}%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   476
id\ \isasymequiv\ {\isasymlambda}x.\ x%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   477
\rulenamedx{id_def}\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   478
f\ \isasymcirc\ g\ \isasymequiv\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   479
{\isasymlambda}x.\ f\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   480
(g\ x)%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   481
\rulenamedx{o_def}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   482
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   483
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   484
Many familiar theorems concerning the identity and composition 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   485
are proved. For example, we have the associativity of composition: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   486
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   487
f\ \isasymcirc\ (g\ \isasymcirc\ h)\ =\ f\ \isasymcirc\ g\ \isasymcirc\ h
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   488
\rulename{o_assoc}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   489
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   490
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   491
\subsection{Injections, Surjections, Bijections}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   492
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   493
\index{injections}\index{surjections}\index{bijections}%
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   494
A function may be \textbf{injective}, \textbf{surjective} or \textbf{bijective}: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   495
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   496
inj_on\ f\ A\ \isasymequiv\ {\isasymforall}x\isasymin A.\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   497
{\isasymforall}y\isasymin  A.\ f\ x\ =\ f\ y\ \isasymlongrightarrow\ x\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   498
=\ y%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   499
\rulenamedx{inj_on_def}\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   500
surj\ f\ \isasymequiv\ {\isasymforall}y.\
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   501
\isasymexists x.\ y\ =\ f\ x%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   502
\rulenamedx{surj_def}\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   503
bij\ f\ \isasymequiv\ inj\ f\ \isasymand\ surj\ f
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   504
\rulenamedx{bij_def}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   505
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   506
The second argument
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   507
of \isa{inj_on} lets us express that a function is injective over a
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   508
given set. This refinement is useful in higher-order logic, where
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   509
functions are total; in some cases, a function's natural domain is a subset
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   510
of its domain type.  Writing \isa{inj\ f} abbreviates \isa{inj_on\ f\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   511
UNIV}, for when \isa{f} is injective everywhere.
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   512
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   513
The operator \isa{inv} expresses the 
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   514
\textbf{inverse}\indexbold{inverse!of a function}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   515
of a function. In 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   516
general the inverse may not be well behaved.  We have the usual laws,
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   517
such as these: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   518
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   519
inj\ f\ \ \isasymLongrightarrow\ inv\ f\ (f\ x)\ =\ x%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   520
\rulename{inv_f_f}\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   521
surj\ f\ \isasymLongrightarrow\ f\ (inv\ f\ y)\ =\ y
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   522
\rulename{surj_f_inv_f}\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   523
bij\ f\ \ \isasymLongrightarrow\ inv\ (inv\ f)\ =\ f
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   524
\rulename{inv_inv_eq}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   525
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   526
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   527
%Other useful facts are that the inverse of an injection 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   528
%is a surjection and vice versa; the inverse of a bijection is 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   529
%a bijection. 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   530
%\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   531
%inj\ f\ \isasymLongrightarrow\ surj\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   532
%(inv\ f)
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   533
%\rulename{inj_imp_surj_inv}\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   534
%surj\ f\ \isasymLongrightarrow\ inj\ (inv\ f)
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   535
%\rulename{surj_imp_inj_inv}\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   536
%bij\ f\ \isasymLongrightarrow\ bij\ (inv\ f)
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   537
%\rulename{bij_imp_bij_inv}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   538
%\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   539
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   540
%The converses of these results fail.  Unless a function is 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   541
%well behaved, little can be said about its inverse. Here is another 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   542
%law: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   543
%\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   544
%{\isasymlbrakk}bij\ f;\ bij\ g\isasymrbrakk\ \isasymLongrightarrow\ inv\ (f\ \isasymcirc\ g)\ =\ inv\ g\ \isasymcirc\ inv\ f%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   545
%\rulename{o_inv_distrib}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   546
%\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   547
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   548
Theorems involving these concepts can be hard to prove. The following 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   549
example is easy, but it cannot be proved automatically. To begin 
10983
59961d32b1ae *** empty log message ***
nipkow
parents: 10978
diff changeset
   550
with, we need a law that relates the equality of functions to 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   551
equality over all arguments: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   552
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   553
(f\ =\ g)\ =\ ({\isasymforall}x.\ f\ x\ =\ g\ x)
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   554
\rulename{expand_fun_eq}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   555
\end{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   556
%
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   557
This is just a restatement of
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   558
extensionality.\indexbold{extensionality!for functions}
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   559
Our lemma
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   560
states  that an injection can be cancelled from the left  side of
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   561
function composition: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   562
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   563
\isacommand{lemma}\ "inj\ f\ \isasymLongrightarrow\ (f\ o\ g\ =\ f\ o\ h)\ =\ (g\ =\ h)"\isanewline
10983
59961d32b1ae *** empty log message ***
nipkow
parents: 10978
diff changeset
   564
\isacommand{apply}\ (simp\ add:\ expand_fun_eq\ inj_on_def)\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   565
\isacommand{apply}\ auto\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   566
\isacommand{done}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   567
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   568
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   569
The first step of the proof invokes extensionality and the definitions 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   570
of injectiveness and composition. It leaves one subgoal:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   571
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   572
\ 1.\ {\isasymforall}x\ y.\ f\ x\ =\ f\ y\ \isasymlongrightarrow\ x\ =\ y\
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   573
\isasymLongrightarrow\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   574
\ \ \ \ ({\isasymforall}x.\ f\ (g\ x)\ =\ f\ (h\ x))\ =\ ({\isasymforall}x.\ g\ x\ =\ h\ x)
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   575
\end{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   576
This can be proved using the \isa{auto} method. 
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   577
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   578
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   579
\subsection{Function Image}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   580
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   581
The \textbf{image}\indexbold{image!under a function}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   582
of a set under a function is a most useful notion.  It
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   583
has the obvious definition: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   584
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   585
f\ `\ A\ \isasymequiv\ \isacharbraceleft y.\ \isasymexists x\isasymin
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   586
A.\ y\ =\ f\ x\isacharbraceright
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   587
\rulenamedx{image_def}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   588
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   589
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   590
Here are some of the many facts proved about image: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   591
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   592
(f\ \isasymcirc\ g)\ `\ r\ =\ f\ `\ g\ `\ r
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   593
\rulename{image_compose}\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   594
f`(A\ \isasymunion\ B)\ =\ f`A\ \isasymunion\ f`B
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   595
\rulename{image_Un}\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   596
inj\ f\ \isasymLongrightarrow\ f`(A\ \isasyminter\
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   597
B)\ =\ f`A\ \isasyminter\ f`B
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   598
\rulename{image_Int}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   599
%\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   600
%bij\ f\ \isasymLongrightarrow\ f\ `\ (-\ A)\ =\ -\ f\ `\ A%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   601
%\rulename{bij_image_Compl_eq}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   602
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   603
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   604
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   605
Laws involving image can often be proved automatically. Here 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   606
are two examples, illustrating connections with indexed union and with the
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   607
general syntax for comprehension:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   608
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   609
\isacommand{lemma}\ "f`A\ \isasymunion\ g`A\ =\ ({\isasymUnion}x{\isasymin}A.\ \isacharbraceleft f\ x,\ g\
13439
2f98365f57a8 *** empty log message ***
nipkow
parents: 12815
diff changeset
   610
x\isacharbraceright)"
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   611
\par\smallskip
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   612
\isacommand{lemma}\ "f\ `\ \isacharbraceleft(x,y){.}\ P\ x\ y\isacharbraceright\ =\ \isacharbraceleft f(x,y)\ \isacharbar\ x\ y.\ P\ x\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   613
y\isacharbraceright"
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   614
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   615
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   616
\medskip
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   617
\index{range!of a function}%
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   618
A function's \textbf{range} is the set of values that the function can 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   619
take on. It is, in fact, the image of the universal set under 
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   620
that function. There is no constant \isa{range}.  Instead,
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   621
\sdx{range}  abbreviates an application of image to \isa{UNIV}: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   622
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   623
\ \ \ \ \ range\ f\
10983
59961d32b1ae *** empty log message ***
nipkow
parents: 10978
diff changeset
   624
{\isasymrightleftharpoons}\ f`UNIV
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   625
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   626
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   627
Few theorems are proved specifically 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   628
for {\isa{range}}; in most cases, you should look for a more general
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   629
theorem concerning images.
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   630
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   631
\medskip
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   632
\textbf{Inverse image}\index{inverse image!of a function} is also  useful.
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   633
It is defined as follows: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   634
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   635
f\ -`\ B\ \isasymequiv\ \isacharbraceleft x.\ f\ x\ \isasymin\ B\isacharbraceright
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   636
\rulenamedx{vimage_def}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   637
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   638
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   639
This is one of the facts proved about it:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   640
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   641
f\ -`\ (-\ A)\ =\ -\ f\ -`\ A%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   642
\rulename{vimage_Compl}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   643
\end{isabelle}
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   644
\index{functions|)}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   645
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   646
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   647
\section{Relations}
10513
6be063dec835 *** empty log message ***
nipkow
parents: 10399
diff changeset
   648
\label{sec:Relations}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   649
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   650
\index{relations|(}%
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   651
A \textbf{relation} is a set of pairs.  As such, the set operations apply
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   652
to them.  For instance, we may form the union of two relations.  Other
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   653
primitives are defined specifically for relations. 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   654
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   655
\subsection{Relation Basics}
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   656
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   657
The \bfindex{identity relation}, also known as equality, has the obvious 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   658
definition: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   659
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   660
Id\ \isasymequiv\ \isacharbraceleft p.\ \isasymexists x.\ p\ =\ (x,x){\isacharbraceright}%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   661
\rulenamedx{Id_def}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   662
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   663
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   664
\indexbold{composition!of relations}%
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   665
\textbf{Composition} of relations (the infix \sdx{O}) is also
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   666
available: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   667
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   668
r\ O\ s\ \isasymequiv\ \isacharbraceleft(x,z).\ \isasymexists y.\ (x,y)\ \isasymin\ s\ \isasymand\ (y,z)\ \isasymin\ r\isacharbraceright
12489
c92e38c3cbaa *** empty log message ***
nipkow
parents: 12473
diff changeset
   669
\rulenamedx{rel_comp_def}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   670
\end{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   671
%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   672
This is one of the many lemmas proved about these concepts: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   673
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   674
R\ O\ Id\ =\ R
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   675
\rulename{R_O_Id}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   676
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   677
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   678
Composition is monotonic, as are most of the primitives appearing 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   679
in this chapter.  We have many theorems similar to the following 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   680
one: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   681
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   682
\isasymlbrakk r\isacharprime\ \isasymsubseteq\ r;\ s\isacharprime\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   683
\isasymsubseteq\ s\isasymrbrakk\ \isasymLongrightarrow\ r\isacharprime\ O\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   684
s\isacharprime\ \isasymsubseteq\ r\ O\ s%
12489
c92e38c3cbaa *** empty log message ***
nipkow
parents: 12473
diff changeset
   685
\rulename{rel_comp_mono}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   686
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   687
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   688
\indexbold{converse!of a relation}%
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   689
\indexbold{inverse!of a relation}%
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   690
The \textbf{converse} or inverse of a
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   691
relation exchanges the roles  of the two operands.  We use the postfix
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   692
notation~\isa{r\isasyminverse} or
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   693
\isa{r\isacharcircum-1} in ASCII\@.
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   694
\begin{isabelle}
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   695
((a,b)\ \isasymin\ r\isasyminverse)\ =\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   696
((b,a)\ \isasymin\ r)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   697
\rulenamedx{converse_iff}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   698
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   699
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   700
Here is a typical law proved about converse and composition: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   701
\begin{isabelle}
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   702
(r\ O\ s)\isasyminverse\ =\ s\isasyminverse\ O\ r\isasyminverse
12489
c92e38c3cbaa *** empty log message ***
nipkow
parents: 12473
diff changeset
   703
\rulename{converse_rel_comp}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   704
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   705
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   706
\indexbold{image!under a relation}%
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   707
The \textbf{image} of a set under a relation is defined
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   708
analogously  to image under a function: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   709
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   710
(b\ \isasymin\ r\ ``\ A)\ =\ (\isasymexists x\isasymin
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   711
A.\ (x,b)\ \isasymin\ r)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   712
\rulenamedx{Image_iff}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   713
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   714
It satisfies many similar laws.
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   715
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   716
\index{domain!of a relation}%
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   717
\index{range!of a relation}%
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   718
The \textbf{domain} and \textbf{range} of a relation are defined in the 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   719
standard way: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   720
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   721
(a\ \isasymin\ Domain\ r)\ =\ (\isasymexists y.\ (a,y)\ \isasymin\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   722
r)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   723
\rulenamedx{Domain_iff}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   724
\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   725
(a\ \isasymin\ Range\ r)\
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   726
\ =\ (\isasymexists y.\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   727
(y,a)\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   728
\isasymin\ r)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   729
\rulenamedx{Range_iff}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   730
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   731
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   732
Iterated composition of a relation is available.  The notation overloads 
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   733
that of exponentiation.  Two simplification rules are installed: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   734
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   735
R\ \isacharcircum\ \isadigit{0}\ =\ Id\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   736
R\ \isacharcircum\ Suc\ n\ =\ R\ O\ R\isacharcircum n
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   737
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   738
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   739
\subsection{The Reflexive and Transitive Closure}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   740
11428
332347b9b942 tidying the index
paulson
parents: 11417
diff changeset
   741
\index{reflexive and transitive closure|(}%
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   742
The \textbf{reflexive and transitive closure} of the
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   743
relation~\isa{r} is written with a
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   744
postfix syntax.  In ASCII we write \isa{r\isacharcircum*} and in
12815
wenzelm
parents: 12649
diff changeset
   745
symbol notation~\isa{r\isactrlsup *}.  It is the least solution of the
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   746
equation
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   747
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   748
r\isactrlsup *\ =\ Id\ \isasymunion \ (r\ O\ r\isactrlsup *)
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   749
\rulename{rtrancl_unfold}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   750
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   751
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   752
Among its basic properties are three that serve as introduction 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   753
rules:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   754
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   755
(a,\ a)\ \isasymin \ r\isactrlsup *
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   756
\rulenamedx{rtrancl_refl}\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   757
p\ \isasymin \ r\ \isasymLongrightarrow \ p\ \isasymin \ r\isactrlsup *
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   758
\rulenamedx{r_into_rtrancl}\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   759
\isasymlbrakk (a,b)\ \isasymin \ r\isactrlsup *;\ 
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   760
(b,c)\ \isasymin \ r\isactrlsup *\isasymrbrakk \ \isasymLongrightarrow \
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   761
(a,c)\ \isasymin \ r\isactrlsup *
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   762
\rulenamedx{rtrancl_trans}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   763
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   764
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   765
Induction over the reflexive transitive closure is available: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   766
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   767
\isasymlbrakk (a,\ b)\ \isasymin \ r\isactrlsup *;\ P\ a;\ \isasymAnd y\ z.\ \isasymlbrakk (a,\ y)\ \isasymin \ r\isactrlsup *;\ (y,\ z)\ \isasymin \ r;\ P\ y\isasymrbrakk \ \isasymLongrightarrow \ P\ z\isasymrbrakk \isanewline
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   768
\isasymLongrightarrow \ P\ b%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   769
\rulename{rtrancl_induct}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   770
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   771
%
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   772
Idempotence is one of the laws proved about the reflexive transitive 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   773
closure: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   774
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   775
(r\isactrlsup *)\isactrlsup *\ =\ r\isactrlsup *
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   776
\rulename{rtrancl_idemp}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   777
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   778
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   779
\smallskip
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   780
The transitive closure is similar.  The ASCII syntax is
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   781
\isa{r\isacharcircum+}.  It has two  introduction rules: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   782
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   783
p\ \isasymin \ r\ \isasymLongrightarrow \ p\ \isasymin \ r\isactrlsup +
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   784
\rulenamedx{r_into_trancl}\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   785
\isasymlbrakk (a,\ b)\ \isasymin \ r\isactrlsup +;\ (b,\ c)\ \isasymin \ r\isactrlsup +\isasymrbrakk \ \isasymLongrightarrow \ (a,\ c)\ \isasymin \ r\isactrlsup +
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   786
\rulenamedx{trancl_trans}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   787
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   788
%
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   789
The induction rule resembles the one shown above. 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   790
A typical lemma states that transitive closure commutes with the converse
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   791
operator: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   792
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   793
(r\isasyminverse )\isactrlsup +\ =\ (r\isactrlsup +)\isasyminverse 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   794
\rulename{trancl_converse}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   795
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   796
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   797
\subsection{A Sample Proof}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   798
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   799
The reflexive transitive closure also commutes with the converse
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   800
operator.  Let us examine the proof. Each direction of the equivalence
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   801
is  proved separately. The two proofs are almost identical. Here 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   802
is the first one: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   803
\begin{isabelle}
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   804
\isacommand{lemma}\ rtrancl_converseD:\ "(x,y)\ \isasymin \
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   805
(r\isasyminverse)\isactrlsup *\ \isasymLongrightarrow \ (y,x)\ \isasymin
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   806
\ r\isactrlsup *"\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   807
\isacommand{apply}\ (erule\ rtrancl_induct)\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   808
\ \isacommand{apply}\ (rule\ rtrancl_refl)\isanewline
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   809
\isacommand{apply}\ (blast\ intro:\ rtrancl_trans)\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   810
\isacommand{done}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   811
\end{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   812
%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   813
The first step of the proof applies induction, leaving these subgoals: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   814
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   815
\ 1.\ (x,\ x)\ \isasymin \ r\isactrlsup *\isanewline
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   816
\ 2.\ \isasymAnd y\ z.\ \isasymlbrakk (x,y)\ \isasymin \
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   817
(r\isasyminverse)\isactrlsup *;\ (y,z)\ \isasymin \ r\isasyminverse ;\
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   818
(y,x)\ \isasymin \ r\isactrlsup *\isasymrbrakk \isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   819
\ \ \ \ \ \ \ \ \ \ \isasymLongrightarrow \ (z,x)\ \isasymin \ r\isactrlsup *
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   820
\end{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   821
%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   822
The first subgoal is trivial by reflexivity. The second follows 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   823
by first eliminating the converse operator, yielding the
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   824
assumption \isa{(z,y)\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   825
\isasymin\ r}, and then
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   826
applying the introduction rules shown above.  The same proof script handles
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   827
the other direction: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   828
\begin{isabelle}
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   829
\isacommand{lemma}\ rtrancl_converseI:\ "(y,x)\ \isasymin \ r\isactrlsup *\ \isasymLongrightarrow \ (x,y)\ \isasymin \ (r\isasyminverse)\isactrlsup *"\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   830
\isacommand{apply}\ (erule\ rtrancl_induct)\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   831
\ \isacommand{apply}\ (rule\ rtrancl_refl)\isanewline
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   832
\isacommand{apply}\ (blast\ intro:\ rtrancl_trans)\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   833
\isacommand{done}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   834
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   835
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   836
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   837
Finally, we combine the two lemmas to prove the desired equation: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   838
\begin{isabelle}
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   839
\isacommand{lemma}\ rtrancl_converse:\ "(r\isasyminverse)\isactrlsup *\ =\ (r\isactrlsup *)\isasyminverse"\isanewline
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   840
\isacommand{by}\ (auto\ intro:\ rtrancl_converseI\ dest:\
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   841
rtrancl_converseD)
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   842
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   843
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   844
\begin{warn}
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   845
This trivial proof requires \isa{auto} rather than \isa{blast} because
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   846
of a subtle issue involving ordered pairs.  Here is a subgoal that
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   847
arises internally after  the rules
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   848
\isa{equalityI} and \isa{subsetI} have been applied:
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   849
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   850
\ 1.\ \isasymAnd x.\ x\ \isasymin \ (r\isasyminverse )\isactrlsup *\ \isasymLongrightarrow \ x\ \isasymin \ (r\isactrlsup
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   851
*)\isasyminverse
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   852
%ignore subgoal 2
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   853
%\ 2.\ \isasymAnd x.\ x\ \isasymin \ (r\isactrlsup *)\isasyminverse \
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   854
%\isasymLongrightarrow \ x\ \isasymin \ (r\isasyminverse )\isactrlsup *
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   855
\end{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   856
\par\noindent
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   857
We cannot apply \isa{rtrancl_converseD}\@.  It refers to
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   858
ordered pairs, while \isa{x} is a variable of product type.
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   859
The \isa{simp} and \isa{blast} methods can do nothing, so let us try
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   860
\isa{clarify}:
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   861
\begin{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   862
\ 1.\ \isasymAnd a\ b.\ (a,b)\ \isasymin \ (r\isasyminverse )\isactrlsup *\ \isasymLongrightarrow \ (b,a)\ \isasymin \ r\isactrlsup
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   863
*
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   864
\end{isabelle}
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   865
Now that \isa{x} has been replaced by the pair \isa{(a,b)}, we can
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   866
proceed.  Other methods that split variables in this way are \isa{force},
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   867
\isa{auto}, \isa{fast} and \isa{best}.  Section~\ref{sec:products} will discuss proof
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   868
techniques for ordered pairs in more detail.
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   869
\end{warn}
11428
332347b9b942 tidying the index
paulson
parents: 11417
diff changeset
   870
\index{relations|)}\index{reflexive and transitive closure|)}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   871
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   872
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   873
\section{Well-Founded Relations and Induction}
10513
6be063dec835 *** empty log message ***
nipkow
parents: 10399
diff changeset
   874
\label{sec:Well-founded}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   875
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   876
\index{relations!well-founded|(}%
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   877
A well-founded relation captures the notion of a terminating process. 
25258
22d16596c306 recdef -> fun
nipkow
parents: 15115
diff changeset
   878
Complex recursive functions definitions \ref{sec:?????TN}
22d16596c306 recdef -> fun
nipkow
parents: 15115
diff changeset
   879
must specify a well-founded relation that
22d16596c306 recdef -> fun
nipkow
parents: 15115
diff changeset
   880
justifies their termination.  Most of the
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   881
forms of induction found in mathematics are merely special cases of
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   882
induction over a well-founded relation.
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   883
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   884
Intuitively, the relation~$\prec$ is \textbf{well-founded} if it admits no
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   885
infinite  descending chains
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   886
\[ \cdots \prec a@2 \prec a@1 \prec a@0. \]
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   887
Well-foundedness can be hard to show. The various 
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   888
formulations are all complicated.  However,  often a relation
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   889
is well-founded by construction.  HOL provides
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   890
theorems concerning ways of constructing  a well-founded relation.  The
11458
09a6c44a48ea numerous stylistic changes and indexing
paulson
parents: 11428
diff changeset
   891
most familiar way is to specify a 
09a6c44a48ea numerous stylistic changes and indexing
paulson
parents: 11428
diff changeset
   892
\index{measure functions}\textbf{measure function}~\isa{f} into
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   893
the natural numbers, when $\isa{x}\prec \isa{y}\iff \isa{f x} < \isa{f y}$;
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   894
we write this particular relation as
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   895
\isa{measure~f}.
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   896
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   897
\begin{warn}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   898
You may want to skip the rest of this section until you need to perform a
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   899
complex recursive function definition or induction.  The induction rule
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   900
returned by
25258
22d16596c306 recdef -> fun
nipkow
parents: 15115
diff changeset
   901
\isacommand{fun} is good enough for most purposes.  We use an explicit
11428
332347b9b942 tidying the index
paulson
parents: 11417
diff changeset
   902
well-founded induction only in {\S}\ref{sec:CTL-revisited}.
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   903
\end{warn}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   904
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   905
Isabelle/HOL declares \cdx{less_than} as a relation object, 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   906
that is, a set of pairs of natural numbers. Two theorems tell us that this
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   907
relation  behaves as expected and that it is well-founded: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   908
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   909
((x,y)\ \isasymin\ less_than)\ =\ (x\ <\ y)
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   910
\rulenamedx{less_than_iff}\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   911
wf\ less_than
11494
23a118849801 revisions and indexing
paulson
parents: 11458
diff changeset
   912
\rulenamedx{wf_less_than}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   913
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   914
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   915
The notion of measure generalizes to the 
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   916
\index{inverse image!of a relation}\textbf{inverse image} of
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   917
a relation. Given a relation~\isa{r} and a function~\isa{f}, we express  a
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   918
new relation using \isa{f} as a measure.  An infinite descending chain on
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   919
this new relation would give rise to an infinite descending chain
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   920
on~\isa{r}.  Isabelle/HOL defines this concept and proves a
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   921
theorem stating that it preserves well-foundedness: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   922
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   923
inv_image\ r\ f\ \isasymequiv\ \isacharbraceleft(x,y).\ (f\ x,\ f\ y)\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   924
\isasymin\ r\isacharbraceright
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   925
\rulenamedx{inv_image_def}\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   926
wf\ r\ \isasymLongrightarrow\ wf\ (inv_image\ r\ f)
11494
23a118849801 revisions and indexing
paulson
parents: 11458
diff changeset
   927
\rulenamedx{wf_inv_image}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   928
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   929
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   930
A measure function involves the natural numbers.  The relation \isa{measure
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   931
size} justifies primitive recursion and structural induction over a
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   932
datatype.  Isabelle/HOL defines
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   933
\isa{measure} as shown: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   934
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   935
measure\ \isasymequiv\ inv_image\ less_than%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   936
\rulenamedx{measure_def}\isanewline
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   937
wf\ (measure\ f)
11494
23a118849801 revisions and indexing
paulson
parents: 11458
diff changeset
   938
\rulenamedx{wf_measure}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   939
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   940
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   941
Of the other constructions, the most important is the
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   942
\bfindex{lexicographic product} of two relations. It expresses the
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   943
standard dictionary  ordering over pairs.  We write \isa{ra\ <*lex*>\
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   944
rb}, where \isa{ra} and \isa{rb} are the two operands.  The
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   945
lexicographic product satisfies the usual  definition and it preserves
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   946
well-foundedness: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   947
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   948
ra\ <*lex*>\ rb\ \isasymequiv \isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   949
\ \ \isacharbraceleft ((a,b),(a',b')).\ (a,a')\ \isasymin \ ra\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   950
\isasymor\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   951
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \,a=a'\ \isasymand \ (b,b')\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   952
\isasymin \ rb\isacharbraceright 
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   953
\rulenamedx{lex_prod_def}%
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   954
\par\smallskip
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   955
\isasymlbrakk wf\ ra;\ wf\ rb\isasymrbrakk \ \isasymLongrightarrow \ wf\ (ra\ <*lex*>\ rb)
11494
23a118849801 revisions and indexing
paulson
parents: 11458
diff changeset
   956
\rulenamedx{wf_lex_prod}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   957
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   958
25258
22d16596c306 recdef -> fun
nipkow
parents: 15115
diff changeset
   959
%These constructions can be used in a
22d16596c306 recdef -> fun
nipkow
parents: 15115
diff changeset
   960
%\textbf{recdef} declaration ({\S}\ref{sec:recdef-simplification}) to define
22d16596c306 recdef -> fun
nipkow
parents: 15115
diff changeset
   961
%the well-founded relation used to prove termination.
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   962
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   963
The \bfindex{multiset ordering}, useful for hard termination proofs, is
12473
f41e477576b9 *** empty log message ***
nipkow
parents: 12332
diff changeset
   964
available in the Library~\cite{HOL-Library}.
12332
aea72a834c85 *** empty log message ***
nipkow
parents: 11494
diff changeset
   965
Baader and Nipkow \cite[{\S}2.5]{Baader-Nipkow} discuss it. 
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   966
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   967
\medskip
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   968
Induction\index{induction!well-founded|(}
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   969
comes in many forms,
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   970
including traditional mathematical  induction, structural induction on
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   971
lists and induction on size.  All are instances of the following rule,
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   972
for a suitable well-founded relation~$\prec$: 
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   973
\[ \infer{P(a)}{\infer*{P(x)}{[\forall y.\, y\prec x \imp P(y)]}} \]
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   974
To show $P(a)$ for a particular term~$a$, it suffices to show $P(x)$ for
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   975
arbitrary~$x$ under the assumption that $P(y)$ holds for $y\prec x$. 
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   976
Intuitively, the well-foundedness of $\prec$ ensures that the chains of
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   977
reasoning are finite.
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   978
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   979
\smallskip
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   980
In Isabelle, the induction rule is expressed like this:
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   981
\begin{isabelle}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   982
{\isasymlbrakk}wf\ r;\ 
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   983
  {\isasymAnd}x.\ {\isasymforall}y.\ (y,x)\ \isasymin\ r\
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   984
\isasymlongrightarrow\ P\ y\ \isasymLongrightarrow\ P\ x\isasymrbrakk\
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   985
\isasymLongrightarrow\ P\ a
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
   986
\rulenamedx{wf_induct}
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   987
\end{isabelle}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   988
Here \isa{wf\ r} expresses that the relation~\isa{r} is well-founded.
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   989
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   990
Many familiar induction principles are instances of this rule. 
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   991
For example, the predecessor relation on the natural numbers 
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   992
is well-founded; induction over it is mathematical induction. 
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   993
The ``tail of'' relation on lists is well-founded; induction over 
11410
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   994
it is structural induction.%
b3b61ea9632c indexing
paulson
parents: 11203
diff changeset
   995
\index{induction!well-founded|)}%
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
   996
\index{relations!well-founded|)}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   997
0bea1c33abef sets chapter
paulson
parents:
diff changeset
   998
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
   999
\section{Fixed Point Operators}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1000
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1001
\index{fixed points|(}%
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1002
Fixed point operators define sets
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1003
recursively.  They are invoked implicitly when making an inductive
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1004
definition, as discussed in Chap.\ts\ref{chap:inductive} below.  However,
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1005
they can be used directly, too. The
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1006
\emph{least}  or \emph{strongest} fixed point yields an inductive
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1007
definition;  the \emph{greatest} or \emph{weakest} fixed point yields a
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
  1008
coinductive  definition.  Mathematicians may wish to note that the
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
  1009
existence  of these fixed points is guaranteed by the Knaster-Tarski
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
  1010
theorem. 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1011
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1012
\begin{warn}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1013
Casual readers should skip the rest of this section.  We use fixed point
11428
332347b9b942 tidying the index
paulson
parents: 11417
diff changeset
  1014
operators only in {\S}\ref{sec:VMC}.
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1015
\end{warn}
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1016
11411
c315dda16748 indexing
paulson
parents: 11410
diff changeset
  1017
The theory applies only to monotonic functions.\index{monotone functions|bold} 
c315dda16748 indexing
paulson
parents: 11410
diff changeset
  1018
Isabelle's definition of monotone is overloaded over all orderings:
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1019
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1020
mono\ f\ \isasymequiv\ {\isasymforall}A\ B.\ A\ \isasymle\ B\ \isasymlongrightarrow\ f\ A\ \isasymle\ f\ B%
11417
499435b4084e less indexing of theorem names
paulson
parents: 11411
diff changeset
  1021
\rulenamedx{mono_def}
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1022
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1023
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1024
For fixed point operators, the ordering will be the subset relation: if
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1025
$A\subseteq B$ then we expect $f(A)\subseteq f(B)$.  In addition to its
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1026
definition, monotonicity has the obvious introduction and destruction
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1027
rules:
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1028
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1029
({\isasymAnd}A\ B.\ A\ \isasymle\ B\ \isasymLongrightarrow\ f\ A\ \isasymle\ f\ B)\ \isasymLongrightarrow\ mono\ f%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1030
\rulename{monoI}%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1031
\par\smallskip%          \isanewline didn't leave enough space
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1032
{\isasymlbrakk}mono\ f;\ A\ \isasymle\ B\isasymrbrakk\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1033
\isasymLongrightarrow\ f\ A\ \isasymle\ f\ B%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1034
\rulename{monoD}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1035
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1036
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1037
The most important properties of the least fixed point are that 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1038
it is a fixed point and that it enjoys an induction rule: 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1039
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1040
mono\ f\ \isasymLongrightarrow\ lfp\ f\ =\ f\ (lfp\ f)
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1041
\rulename{lfp_unfold}%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1042
\par\smallskip%          \isanewline didn't leave enough space
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1043
{\isasymlbrakk}a\ \isasymin\ lfp\ f;\ mono\ f;\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1044
  \ {\isasymAnd}x.\ x\
10857
47b1f34ddd09 revisions e.g. images, transitive closure...
paulson
parents: 10534
diff changeset
  1045
\isasymin\ f\ (lfp\ f\ \isasyminter\ \isacharbraceleft x.\ P\
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1046
x\isacharbraceright)\ \isasymLongrightarrow\ P\ x\isasymrbrakk\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1047
\isasymLongrightarrow\ P\ a%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1048
\rulename{lfp_induct}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1049
\end{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1050
%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1051
The induction rule shown above is more convenient than the basic 
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1052
one derived from the minimality of {\isa{lfp}}.  Observe that both theorems
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1053
demand \isa{mono\ f} as a premise.
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1054
11080
22855d091249 various revisions in response to comments from Tobias
paulson
parents: 10983
diff changeset
  1055
The greatest fixed point is similar, but it has a \bfindex{coinduction} rule: 
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1056
\begin{isabelle}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1057
mono\ f\ \isasymLongrightarrow\ gfp\ f\ =\ f\ (gfp\ f)
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1058
\rulename{gfp_unfold}%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1059
\isanewline
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1060
{\isasymlbrakk}mono\ f;\ a\ \isasymin\ X;\ X\ \isasymsubseteq\ f\ (X\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1061
\isasymunion\ gfp\ f)\isasymrbrakk\ \isasymLongrightarrow\ a\ \isasymin\
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1062
gfp\ f%
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1063
\rulename{coinduct}
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1064
\end{isabelle}
11428
332347b9b942 tidying the index
paulson
parents: 11417
diff changeset
  1065
A \textbf{bisimulation}\index{bisimulations} 
332347b9b942 tidying the index
paulson
parents: 11417
diff changeset
  1066
is perhaps the best-known concept defined as a
10303
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1067
greatest fixed point.  Exhibiting a bisimulation to prove the equality of
0bea1c33abef sets chapter
paulson
parents:
diff changeset
  1068
two agents in a process algebra is an example of coinduction.
12540
a5604ff1ef4e minor suggestions from Markus
paulson
parents: 12535
diff changeset
  1069
The coinduction rule can be strengthened in various ways.
11203
881222d48777 *** empty log message ***
nipkow
parents: 11159
diff changeset
  1070
\index{fixed points|)}
14393
71dff3bade66 new Union syntax
paulson
parents: 13814
diff changeset
  1071
71dff3bade66 new Union syntax
paulson
parents: 13814
diff changeset
  1072
%The section "Case Study: Verified Model Checking" is part of this chapter
71dff3bade66 new Union syntax
paulson
parents: 13814
diff changeset
  1073
\input{CTL/ctl}  
71dff3bade66 new Union syntax
paulson
parents: 13814
diff changeset
  1074
\endinput