doc-src/TutorialI/Types/document/Overloading.tex
author wenzelm
Fri, 02 Feb 2001 22:19:52 +0100
changeset 11035 bad7568e76e0
parent 10328 bf33cbd76c05
child 11196 bb4ede27fcb7
permissions -rw-r--r--
use hol_rewrite_cterm;
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}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     4
\isacommand{instance}\ list\ {\isacharcolon}{\isacharcolon}\ {\isacharparenleft}{\isachardoublequote}term{\isachardoublequote}{\isacharparenright}ordrel\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     5
\isacommand{by}\ intro{\isacharunderscore}classes%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     6
\begin{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     7
\noindent
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     8
This \isacommand{instance} declaration can be read like the declaration of
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
     9
a function on types: the constructor \isa{list} maps types of class \isa{term}, i.e.\ all HOL types, to types of class \isa{ordrel}, i.e.\
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    10
if \isa{ty\ {\isacharcolon}{\isacharcolon}\ term} then \isa{ty\ list\ {\isacharcolon}{\isacharcolon}\ ordrel}.
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    11
Of course we should also define the meaning of \isa{{\isacharless}{\isacharless}{\isacharequal}} and
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    12
\isa{{\isacharless}{\isacharless}} on lists:%
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    13
\end{isamarkuptext}%
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
prefix{\isacharunderscore}def{\isacharcolon}\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    16
\ \ {\isachardoublequote}xs\ {\isacharless}{\isacharless}{\isacharequal}\ {\isacharparenleft}ys{\isacharcolon}{\isacharcolon}{\isacharprime}a{\isacharcolon}{\isacharcolon}ordrel\ list{\isacharparenright}\ \ {\isasymequiv}\ \ {\isasymexists}zs{\isachardot}\ ys\ {\isacharequal}\ xs{\isacharat}zs{\isachardoublequote}\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    17
strict{\isacharunderscore}prefix{\isacharunderscore}def{\isacharcolon}\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    18
\ \ {\isachardoublequote}xs\ {\isacharless}{\isacharless}\ {\isacharparenleft}ys{\isacharcolon}{\isacharcolon}{\isacharprime}a{\isacharcolon}{\isacharcolon}ordrel\ list{\isacharparenright}\ \ \ {\isasymequiv}\ \ xs\ {\isacharless}{\isacharless}{\isacharequal}\ ys\ {\isasymand}\ xs\ {\isasymnoteq}\ ys{\isachardoublequote}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    19
\begin{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    20
We could also have made the second definition non-overloaded once and for
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    21
all: \isa{x\ {\isacharless}{\isacharless}\ y\ {\isasymequiv}\ x\ {\isacharless}{\isacharless}{\isacharequal}\ y\ {\isasymand}\ x\ {\isasymnoteq}\ y}.  This would have saved us writing
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    22
many similar definitions at different types, but it would also have fixed
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    23
that \isa{{\isacharless}{\isacharless}} is defined in terms of \isa{{\isacharless}{\isacharless}{\isacharequal}} and never the other way
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    24
around. Below you will see why we want to avoid this asymmetry.%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    25
\end{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    26
\end{isabellebody}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    27
%%% Local Variables:
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    28
%%% mode: latex
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    29
%%% TeX-master: "root"
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    30
%%% End: