doc-src/TutorialI/Types/document/Overloading2.tex
author wenzelm
Mon, 29 Aug 2005 16:25:24 +0200
changeset 17187 45bee2f6e61f
parent 17181 5f42dd5e6570
child 19288 85b684d3fdbd
permissions -rw-r--r--
updated;
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}}}%
17056
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
     4
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
     5
\isadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
     6
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
     7
\endisadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
     8
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
     9
\isatagtheory
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    10
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    11
\endisatagtheory
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    12
{\isafoldtheory}%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    13
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    14
\isadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    15
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    16
\endisadelimtheory
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    17
%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    18
\begin{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    19
Of course this is not the only possible definition of the two relations.
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    20
Componentwise comparison of lists of equal length also makes sense. This time
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    21
the elements of the list must also be of class \isa{ordrel} to permit their
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    22
comparison:%
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    23
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
    24
\isamarkuptrue%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
    25
\isacommand{instance}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
    26
\ list\ {\isacharcolon}{\isacharcolon}\ {\isacharparenleft}ordrel{\isacharparenright}ordrel\isanewline
17056
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    27
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    28
\isadelimproof
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    29
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    30
\endisadelimproof
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    31
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    32
\isatagproof
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
    33
\isacommand{by}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
    34
\ intro{\isacharunderscore}classes%
17056
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    35
\endisatagproof
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    36
{\isafoldproof}%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    37
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    38
\isadelimproof
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    39
\isanewline
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    40
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    41
\endisadelimproof
15481
fc075ae929e4 the new subst tactic, by Lucas Dixon
paulson
parents: 15230
diff changeset
    42
\isanewline
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
    43
\isacommand{defs}\isamarkupfalse%
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
    44
\ {\isacharparenleft}\isakeyword{overloaded}{\isacharparenright}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
    45
le{\isacharunderscore}list{\isacharunderscore}def{\isacharcolon}\ {\isachardoublequoteopen}xs\ {\isacharless}{\isacharless}{\isacharequal}\ {\isacharparenleft}ys{\isacharcolon}{\isacharcolon}{\isacharprime}a{\isacharcolon}{\isacharcolon}ordrel\ list{\isacharparenright}\ {\isasymequiv}\isanewline
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
    46
\ \ \ \ \ \ \ \ \ \ \ \ \ \ size\ xs\ {\isacharequal}\ size\ ys\ {\isasymand}\ {\isacharparenleft}{\isasymforall}i{\isacharless}size\ xs{\isachardot}\ xs{\isacharbang}i\ {\isacharless}{\isacharless}{\isacharequal}\ ys{\isacharbang}i{\isacharparenright}{\isachardoublequoteclose}%
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    47
\begin{isamarkuptext}%
10328
bf33cbd76c05 *** empty log message ***
nipkow
parents: 10305
diff changeset
    48
\noindent
11494
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    49
The infix function \isa{{\isacharbang}} yields the nth element of a list.
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    50
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    51
\begin{warn}
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    52
A type constructor can be instantiated in only one way to
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    53
a given type class.  For example, our two instantiations of \isa{list} must
12334
60bf75e157e4 *** empty log message ***
nipkow
parents: 11866
diff changeset
    54
reside in separate theories with disjoint scopes.
11494
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    55
\end{warn}%
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    56
\end{isamarkuptext}%
11866
fbd097aec213 updated;
wenzelm
parents: 11494
diff changeset
    57
\isamarkuptrue%
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    58
%
10878
b254d5ad6dd4 auto update
paulson
parents: 10761
diff changeset
    59
\isamarkupsubsubsection{Predefined Overloading%
10397
e2d0dda41f2c auto update
paulson
parents: 10396
diff changeset
    60
}
11866
fbd097aec213 updated;
wenzelm
parents: 11494
diff changeset
    61
\isamarkuptrue%
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    62
%
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    63
\begin{isamarkuptext}%
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    64
HOL comes with a number of overloaded constants and corresponding classes.
10978
5eebea8f359f *** empty log message ***
nipkow
parents: 10971
diff changeset
    65
The most important ones are listed in Table~\ref{tab:overloading} in the appendix. They are
10971
6852682eaf16 *** empty log message ***
nipkow
parents: 10878
diff changeset
    66
defined on all numeric types and sometimes on other types as well, for example
11494
23a118849801 revisions and indexing
paulson
parents: 11277
diff changeset
    67
$-$ and \isa{{\isasymle}} on sets.
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10328
diff changeset
    68
14379
ea10a8c3e9cf updated links to the old ftp site
paulson
parents: 13778
diff changeset
    69
In addition there is a special syntax for bounded quantifiers:
10696
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    70
\begin{center}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    71
\begin{tabular}{lcl}
15230
315079a40f31 auto update
paulson
parents: 15181
diff changeset
    72
\isa{{\isasymforall}x{\isasymle}y{\isachardot}\ P\ x} & \isa{{\isasymrightleftharpoons}} & \isa{{\isachardoublequote}{\isasymforall}x{\isachardot}\ x\ {\isasymle}\ y\ {\isasymlongrightarrow}\ P\ x{\isachardoublequote}} \\
315079a40f31 auto update
paulson
parents: 15181
diff changeset
    73
\isa{{\isasymexists}x{\isasymle}y{\isachardot}\ P\ x} & \isa{{\isasymrightleftharpoons}} & \isa{{\isachardoublequote}{\isasymexists}x{\isachardot}\ x\ {\isasymle}\ y\ {\isasymand}\ P\ x{\isachardoublequote}}
10696
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    74
\end{tabular}
76d7f6c9a14c *** empty log message ***
nipkow
parents: 10654
diff changeset
    75
\end{center}
14379
ea10a8c3e9cf updated links to the old ftp site
paulson
parents: 13778
diff changeset
    76
And analogously for \isa{{\isacharless}} instead of \isa{{\isasymle}}.%
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    77
\end{isamarkuptext}%
17175
1eced27ee0e1 updated;
wenzelm
parents: 17056
diff changeset
    78
\isamarkuptrue%
17056
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    79
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    80
\isadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    81
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    82
\endisadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    83
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    84
\isatagtheory
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    85
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    86
\endisatagtheory
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    87
{\isafoldtheory}%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    88
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    89
\isadelimtheory
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    90
%
05fc32a23b8b updated;
wenzelm
parents: 16353
diff changeset
    91
\endisadelimtheory
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    92
\end{isabellebody}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    93
%%% Local Variables:
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    94
%%% mode: latex
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    95
%%% TeX-master: "root"
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    96
%%% End: