doc-src/TutorialI/Types/document/Overloading1.tex
author nipkow
Mon, 23 Oct 2000 20:58:12 +0200
changeset 10305 adff80268127
child 10328 bf33cbd76c05
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
%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     2
\begin{isabellebody}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     3
\def\isabellecontext{Overloading{\isadigit{1}}}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     4
%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     5
\isamarkupsubsubsection{Controlled overloading with type classes}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     6
%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     7
\begin{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     8
We now start with the theory of ordering relations, which we want to phrase
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     9
in terms of the two binary symbols \isa{{\isacharless}{\isacharless}} and \isa{{\isacharless}{\isacharless}{\isacharequal}}: they have
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    10
been chosen to avoid clashes with \isa{{\isasymle}} and \isa{{\isacharless}} in theory \isa{Main}. To restrict the application of \isa{{\isacharless}{\isacharless}} and \isa{{\isacharless}{\isacharless}{\isacharequal}} we
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    11
introduce the class \isa{ordrel}:%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    12
\end{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    13
\isacommand{axclass}\ ordrel\ {\isacharless}\ {\isachardoublequote}term{\isachardoublequote}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    14
\begin{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    15
\noindent
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    16
This is a degenerate form of axiomatic type class without any axioms.
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    17
Its sole purpose is to restrict the use of overloaded constants to meaningful
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    18
instances:%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    19
\end{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    20
\isacommand{consts}\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    21
\ \ {\isachardoublequote}{\isacharless}{\isacharless}{\isachardoublequote}\ \ \ \ \ \ \ \ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}ordrel{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ bool{\isachardoublequote}\ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    22
\ \ {\isachardoublequote}{\isacharless}{\isacharless}{\isacharequal}{\isachardoublequote}\ \ \ \ \ \ \ {\isacharcolon}{\isacharcolon}\ {\isachardoublequote}{\isacharparenleft}{\isacharprime}a{\isacharcolon}{\isacharcolon}ordrel{\isacharparenright}\ {\isasymRightarrow}\ {\isacharprime}a\ {\isasymRightarrow}\ bool{\isachardoublequote}\ \ \ \ \ \ \ \ \ \ \ \ \ {\isacharparenleft}\isakeyword{infixl}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    23
\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    24
\isacommand{instance}\ bool\ {\isacharcolon}{\isacharcolon}\ ordrel\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    25
\isacommand{by}\ intro{\isacharunderscore}classes\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    26
\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    27
\isacommand{defs}\ {\isacharparenleft}\isakeyword{overloaded}{\isacharparenright}\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    28
le{\isacharunderscore}bool{\isacharunderscore}def{\isacharcolon}\ \ {\isachardoublequote}P\ {\isacharless}{\isacharless}{\isacharequal}\ Q\ {\isasymequiv}\ P\ {\isasymlongrightarrow}\ Q{\isachardoublequote}\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    29
less{\isacharunderscore}bool{\isacharunderscore}def{\isacharcolon}\ {\isachardoublequote}P\ {\isacharless}{\isacharless}\ Q\ {\isasymequiv}\ {\isasymnot}P\ {\isasymand}\ Q{\isachardoublequote}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    30
\begin{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    31
Now \isa{False\ {\isacharless}{\isacharless}{\isacharequal}\ False} is provable%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    32
\end{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    33
\isacommand{lemma}\ {\isachardoublequote}False\ {\isacharless}{\isacharless}{\isacharequal}\ False{\isachardoublequote}\isanewline
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    34
\isacommand{by}{\isacharparenleft}simp\ add{\isacharcolon}\ le{\isacharunderscore}bool{\isacharunderscore}def{\isacharparenright}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    35
\begin{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    36
\noindent
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    37
whereas \isa{{\isacharbrackleft}{\isacharbrackright}\ {\isacharless}{\isacharless}{\isacharequal}\ {\isacharbrackleft}{\isacharbrackright}} is not even welltyped. In order to make it welltyped
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    38
we need to make lists a type of class \isa{ordrel}:%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    39
\end{isamarkuptext}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    40
\end{isabellebody}%
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    41
%%% Local Variables:
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    42
%%% mode: latex
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    43
%%% TeX-master: "root"
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    44
%%% End: