doc-src/TutorialI/Types/Overloading2.thy
author nipkow
Tue, 01 May 2001 22:26:55 +0200
changeset 11277 a2bff98d6e5d
parent 11196 bb4ede27fcb7
child 11494 23a118849801
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     1
(*<*)theory Overloading2 = Overloading1:(*>*)
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     2
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     3
text{*
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     4
Of course this is not the only possible definition of the two relations.
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     5
Componentwise comparison of lists of equal length also makes sense. This time
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     6
the elements of the list must also be of class @{text ordrel} to permit their
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     7
comparison:
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     8
*}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     9
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    10
instance list :: (ordrel)ordrel
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    11
by intro_classes
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    12
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    13
defs (overloaded)
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    14
le_list_def: "xs <<= (ys::'a::ordrel list) \<equiv>
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    15
              size xs = size ys \<and> (\<forall>i<size xs. xs!i <<= ys!i)"
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    16
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    17
text{*\noindent
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    18
The infix function @{text"!"} yields the nth element of a list.
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    19
*}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    20
10885
90695f46440b lcp's pass over the book, chapters 1-8
paulson
parents: 10761
diff changeset
    21
subsubsection{*Predefined Overloading*}
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    22
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    23
text{*
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    24
HOL comes with a number of overloaded constants and corresponding classes.
10978
5eebea8f359f *** empty log message ***
nipkow
parents: 10971
diff changeset
    25
The most important ones are listed in Table~\ref{tab:overloading} in the appendix. They are
10971
6852682eaf16 *** empty log message ***
nipkow
parents: 10885
diff changeset
    26
defined on all numeric types and sometimes on other types as well, for example
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    27
@{text"-"}, @{text"\<le>"} and @{text"<"} on sets.
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    28
10696
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    29
In addition there is a special input syntax for bounded quantifiers:
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    30
\begin{center}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    31
\begin{tabular}{lcl}
11196
bb4ede27fcb7 *** empty log message ***
nipkow
parents: 10978
diff changeset
    32
@{text"\<forall>x \<le> y. P x"} & @{text"\<rightharpoonup>"} & @{prop"\<forall>x. x \<le> y \<longrightarrow> P x"} \\
bb4ede27fcb7 *** empty log message ***
nipkow
parents: 10978
diff changeset
    33
@{text"\<exists>x \<le> y. P x"} & @{text"\<rightharpoonup>"} & @{prop"\<exists>x. x \<le> y \<and> P x"}
10696
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    34
\end{tabular}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    35
\end{center}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    36
And analogously for @{text"<"} instead of @{text"\<le>"}.
11277
a2bff98d6e5d *** empty log message ***
nipkow
parents: 11196
diff changeset
    37
The form on the left is translated into the one on the right upon input.
a2bff98d6e5d *** empty log message ***
nipkow
parents: 11196
diff changeset
    38
For technical reasons, it is not translated back upon output.
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    39
*}(*<*)end(*>*)