doc-src/TutorialI/Types/document/Overloading2.tex
author wenzelm
Fri, 22 Dec 2000 18:25:00 +0100
changeset 10730 bbaa0c6ef59f
parent 10696 76d7f6c9a14c
child 10761 0d36ace55e5a
permissions -rw-r--r--
SML90 stuff;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     1
%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     2
\begin{isabellebody}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     3
\def\isabellecontext{Overloading{\isadigit{2}}}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     4
%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     5
\begin{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     6
Of course this is not the only possible definition of the two relations.
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     7
Componentwise comparison of lists of equal length also makes sense. This time
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     8
the elements of the list must also be of class \isa{ordrel} to permit their
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     9
comparison:%
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    10
\end{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    11
\isacommand{instance}\ list\ {\isacharcolon}{\isacharcolon}\ {\isacharparenleft}ordrel{\isacharparenright}ordrel\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    12
\isacommand{by}\ intro{\isacharunderscore}classes\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    13
\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    14
\isacommand{defs}\ {\isacharparenleft}\isakeyword{overloaded}{\isacharparenright}\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    15
le{\isacharunderscore}list{\isacharunderscore}def{\isacharcolon}\ {\isachardoublequote}xs\ {\isacharless}{\isacharless}{\isacharequal}\ {\isacharparenleft}ys{\isacharcolon}{\isacharcolon}{\isacharprime}a{\isacharcolon}{\isacharcolon}ordrel\ list{\isacharparenright}\ {\isasymequiv}\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    16
\ \ \ \ \ \ \ \ \ \ \ \ \ \ size\ xs\ {\isacharequal}\ size\ ys\ {\isasymand}\ {\isacharparenleft}{\isasymforall}i{\isacharless}size\ xs{\isachardot}\ xs{\isacharbang}i\ {\isacharless}{\isacharless}{\isacharequal}\ ys{\isacharbang}i{\isacharparenright}{\isachardoublequote}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    17
\begin{isamarkuptext}%
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    18
\noindent
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    19
The infix function \isa{{\isacharbang}} yields the nth element of a list.%
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    20
\end{isamarkuptext}%
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    21
%
10397
e2d0dda41f2c auto update
paulson
parents: 10396
diff changeset
    22
\isamarkupsubsubsection{Predefined overloading%
e2d0dda41f2c auto update
paulson
parents: 10396
diff changeset
    23
}
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    24
%
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    25
\begin{isamarkuptext}%
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    26
HOL comes with a number of overloaded constants and corresponding classes.
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    27
The most important ones are listed in Table~\ref{tab:overloading}. They are
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    28
defined on all numeric types and somtimes on other types as well, for example
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    29
\isa{{\isacharminus}}, \isa{{\isasymle}} and \isa{{\isacharless}} on sets.
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    30
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    31
\begin{table}[htbp]
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    32
\begin{center}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    33
\begin{tabular}{lll}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    34
Constant & Type & Syntax \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    35
\hline
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    36
\isa{{\isadigit{0}}} & \isa{{\isacharprime}a{\isacharcolon}{\isacharcolon}zero} \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    37
\isa{{\isacharplus}} & \isa{{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}plus{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a} & (infixl 65) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    38
\isa{{\isacharminus}} & \isa{{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}minus{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a} &  (infixl 65) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    39
\isa{{\isacharasterisk}} & \isa{{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}times{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a} & (infixl 70) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    40
\isa{{\isacharcircum}} & \isa{{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}power{\isacharparenright}\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ {\isacharprime}a} & (infixr 80) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    41
\isa{{\isacharminus}} & \isa{{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}minus{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a} \\
10654
458068404143 *** empty log message ***
nipkow
parents: 10397
diff changeset
    42
\isa{abs} &  \isa{{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}minus{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a} & $\mid~\mid$\\
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    43
\isa{{\isasymle}} & \isa{{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}ord{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ bool} & (infixl 50) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    44
\isa{{\isacharless}} & \isa{{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}ord{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ bool} & (infixl 50) \\
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    45
\isa{min} &  \isa{{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}ord{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a} \\
10654
458068404143 *** empty log message ***
nipkow
parents: 10397
diff changeset
    46
\isa{max} &  \isa{{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}ord{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}a}
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    47
\end{tabular}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    48
\caption{Overloaded constants in HOL}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    49
\label{tab:overloading}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    50
\end{center}
10696
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    51
\end{table}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    52
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    53
In addition there is a special input syntax for bounded quantifiers:
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    54
\begin{center}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    55
\begin{tabular}{lcl}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    56
\isa{{\isasymforall}x\ {\isasymle}\ y{\isachardot}\ P\ x} & \isa{{\isasymequiv}} & \isa{{\isasymforall}x{\isachardot}\ x\ {\isasymle}\ y\ {\isasymlongrightarrow}\ P\ x} \\
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    57
\isa{{\isasymexists}x\ {\isasymle}\ y{\isachardot}\ P\ x} & \isa{{\isasymequiv}} & \isa{{\isasymexists}x{\isachardot}\ x\ {\isasymle}\ y\ {\isasymand}\ P\ x}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    58
\end{tabular}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    59
\end{center}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    60
And analogously for \isa{{\isacharless}} instead of \isa{{\isasymle}}.
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    61
The form on the left is translated into the one on the right upon input but it is not
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    62
translated back upon output.%
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    63
\end{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    64
\end{isabellebody}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    65
%%% Local Variables:
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    66
%%% mode: latex
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    67
%%% TeX-master: "root"
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    68
%%% End: