doc-src/TutorialI/Types/types.tex
author nipkow
Wed, 08 Nov 2000 14:38:04 +0100
changeset 10420 ef006735bee8
parent 10396 5ab08609e6c8
child 10538 d1bf9ca9008d
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
\chapter{More about Types}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     2
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     3
So far we have learned about a few basic types (for example \isa{bool} and
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     4
\isa{nat}), type abbreviations (\isacommand{types}) and recursive datatpes
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     5
(\isacommand{datatype}). This chapter will introduce the following more
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     6
advanced material:
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     7
\begin{itemize}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     8
\item More about basic types: numbers ({\S}\ref{sec:numbers}), pairs
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     9
  ({\S}\ref{sec:products}) and records ({\S}\ref{sec:records}), and how to reason
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    10
  about them.
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    11
\item Introducing your own types: how to introduce your own new types that
10362
c6b197ccf1f1 *** empty log message ***
nipkow
parents: 10329
diff changeset
    12
  cannot be constructed with any of the basic methods ({\S}\ref{sec:adv-typedef}).
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    13
\item Type classes: how to specify and reason about axiomatic collections of
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    14
  types ({\S}\ref{sec:axclass}).
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    15
\end{itemize}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    16
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    17
\section{Basic types}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    18
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    19
\subsection{Numbers}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    20
\label{sec:numbers}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    21
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    22
\subsection{Pairs}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    23
\label{sec:products}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    24
% Check refs to this section to see what is expected of it.
10420
ef006735bee8 *** empty log message ***
nipkow
parents: 10396
diff changeset
    25
% Mention type unit
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    26
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    27
\subsection{Records}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    28
\label{sec:records}
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    29
10362
c6b197ccf1f1 *** empty log message ***
nipkow
parents: 10329
diff changeset
    30
\input{Types/document/Typedef}
c6b197ccf1f1 *** empty log message ***
nipkow
parents: 10329
diff changeset
    31
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    32
\section{Axiomatic type classes}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    33
\label{sec:axclass}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    34
\index{axiomatic type class|(}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    35
\index{*axclass|(}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    36
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    37
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    38
The programming language Haskell has popularized the notion of type classes.
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    39
Isabelle offers the related concept of an \textbf{axiomatic type class}.
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    40
Roughly speaking, an axiomatic type class is a type class with axioms, i.e.\ 
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    41
an axiomatic specification of a class of types. Thus we can talk about a type
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    42
$t$ being in a class $c$, which is written $\tau :: c$.  This is the case of
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    43
$\tau$ satisfies the axioms of $c$. Furthermore, type classes can be
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    44
organized in a hierarchy. Thus there is the notion of a class $d$ being a
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    45
\textbf{subclass} of a class $c$, written $d < c$. This is the case if all
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    46
axioms of $c$ are also provable in $d$. Let us now introduce these concepts
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    47
by means of a running example, ordering relations.
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    48
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    49
\subsection{Overloading}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    50
\label{sec:overloading}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    51
\index{overloading|(}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    52
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    53
\input{Types/document/Overloading0}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    54
\input{Types/document/Overloading1}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    55
\input{Types/document/Overloading}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    56
\input{Types/document/Overloading2}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    57
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    58
\index{overloading|)}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    59
10362
c6b197ccf1f1 *** empty log message ***
nipkow
parents: 10329
diff changeset
    60
\input{Types/document/Axioms}
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    61
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    62
\index{axiomatic type class|)}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    63
\index{*axclass|)}