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