doc-src/TutorialI/Types/types.tex
author wenzelm
Thu, 20 Dec 2001 21:12:02 +0100
changeset 12568 a46009d88687
parent 11859 cb26f3922489
child 14400 6069098854b9
permissions -rw-r--r--
document/Records.tex;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     1
\chapter{More about Types}
10539
5929460a41df *** empty log message ***
nipkow
parents: 10538
diff changeset
     2
\label{ch:more-types}
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     3
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     4
So far we have learned about a few basic types (for example \isa{bool} and
11277
a2bff98d6e5d *** empty log message ***
nipkow
parents: 11213
diff changeset
     5
\isa{nat}), type abbreviations (\isacommand{types}) and recursive datatypes
10885
90695f46440b lcp's pass over the book, chapters 1-8
paulson
parents: 10595
diff changeset
     6
(\isacommand{datatype}). This chapter will introduce more
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     7
advanced material:
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     8
\begin{itemize}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
     9
\item More about basic types: numbers ({\S}\ref{sec:numbers}), pairs
10538
d1bf9ca9008d *** empty log message ***
nipkow
parents: 10420
diff changeset
    10
  ({\S}\ref{sec:products}) and records ({\S}\ref{sec:records}), and how to
d1bf9ca9008d *** empty log message ***
nipkow
parents: 10420
diff changeset
    11
  reason about them.
11149
e258b536a137 *** empty log message ***
nipkow
parents: 10885
diff changeset
    12
\item Type classes: how to specify and reason about axiomatic collections of
e258b536a137 *** empty log message ***
nipkow
parents: 10885
diff changeset
    13
  types ({\S}\ref{sec:axclass}).
10885
90695f46440b lcp's pass over the book, chapters 1-8
paulson
parents: 10595
diff changeset
    14
\item Introducing your own types: how to introduce new types that
10538
d1bf9ca9008d *** empty log message ***
nipkow
parents: 10420
diff changeset
    15
  cannot be constructed with any of the basic methods
d1bf9ca9008d *** empty log message ***
nipkow
parents: 10420
diff changeset
    16
  ({\S}\ref{sec:adv-typedef}).
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    17
\end{itemize}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    18
11149
e258b536a137 *** empty log message ***
nipkow
parents: 10885
diff changeset
    19
The material in this section goes beyond the needs of most novices.  Serious
e258b536a137 *** empty log message ***
nipkow
parents: 10885
diff changeset
    20
users should at least skim the sections on basic types and on type classes.
11494
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    21
The latter material is fairly advanced; read the beginning to understand what
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    22
it is 
11149
e258b536a137 *** empty log message ***
nipkow
parents: 10885
diff changeset
    23
about, but consult the rest only when necessary.
e258b536a137 *** empty log message ***
nipkow
parents: 10885
diff changeset
    24
10595
be043b89acc5 partial numerics section
paulson
parents: 10543
diff changeset
    25
\input{Types/numerics}
be043b89acc5 partial numerics section
paulson
parents: 10543
diff changeset
    26
11428
332347b9b942 tidying the index
paulson
parents: 11389
diff changeset
    27
\index{pairs and tuples|(}
10538
d1bf9ca9008d *** empty log message ***
nipkow
parents: 10420
diff changeset
    28
\input{Types/document/Pairs}
11428
332347b9b942 tidying the index
paulson
parents: 11389
diff changeset
    29
\index{pairs and tuples|)}
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    30
12568
a46009d88687 document/Records.tex;
wenzelm
parents: 11859
diff changeset
    31
\input{Types/document/Records}
11389
55e2aef8909b the records section
paulson
parents: 11277
diff changeset
    32
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    33
11277
a2bff98d6e5d *** empty log message ***
nipkow
parents: 11213
diff changeset
    34
\section{Axiomatic Type Classes}
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    35
\label{sec:axclass}
11428
332347b9b942 tidying the index
paulson
parents: 11389
diff changeset
    36
\index{axiomatic type classes|(}
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    37
\index{*axclass|(}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    38
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    39
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    40
The programming language Haskell has popularized the notion of type classes.
11277
a2bff98d6e5d *** empty log message ***
nipkow
parents: 11213
diff changeset
    41
In its simplest form, a type class is a set of types with a common interface:
a2bff98d6e5d *** empty log message ***
nipkow
parents: 11213
diff changeset
    42
all types in that class must provide the functions in the interface.
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    43
Isabelle offers the related concept of an \textbf{axiomatic type class}.
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    44
Roughly speaking, an axiomatic type class is a type class with axioms, i.e.\ 
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    45
an axiomatic specification of a class of types. Thus we can talk about a type
11213
aeb5c72dd72a *** empty log message ***
nipkow
parents: 11196
diff changeset
    46
$\tau$ being in a class $C$, which is written $\tau :: C$.  This is the case if
11196
bb4ede27fcb7 *** empty log message ***
nipkow
parents: 11161
diff changeset
    47
$\tau$ satisfies the axioms of $C$. Furthermore, type classes can be
11494
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    48
organized in a hierarchy.  Thus there is the notion of a class $D$ being a
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    49
\textbf{subclass}\index{subclasses}
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    50
of a class $C$, written $D < C$. This is the case if all
11196
bb4ede27fcb7 *** empty log message ***
nipkow
parents: 11161
diff changeset
    51
axioms of $C$ are also provable in $D$. We introduce these concepts
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    52
by means of a running example, ordering relations.
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    53
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    54
\subsection{Overloading}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    55
\label{sec:overloading}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    56
\index{overloading|(}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    57
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    58
\input{Types/document/Overloading0}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    59
\input{Types/document/Overloading1}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    60
\input{Types/document/Overloading}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    61
\input{Types/document/Overloading2}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    62
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    63
\index{overloading|)}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    64
10362
c6b197ccf1f1 *** empty log message ***
nipkow
parents: 10329
diff changeset
    65
\input{Types/document/Axioms}
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    66
11428
332347b9b942 tidying the index
paulson
parents: 11389
diff changeset
    67
\index{axiomatic type classes|)}
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    68
\index{*axclass|)}
11149
e258b536a137 *** empty log message ***
nipkow
parents: 10885
diff changeset
    69
e258b536a137 *** empty log message ***
nipkow
parents: 10885
diff changeset
    70
11859
cb26f3922489 Types/document/Typedefs;
wenzelm
parents: 11494
diff changeset
    71
\input{Types/document/Typedefs}