doc-src/TutorialI/Types/types.tex
author paulson
Thu, 19 Feb 2004 17:57:54 +0100
changeset 14400 6069098854b9
parent 12568 a46009d88687
child 25257 8faf184ba5b1
permissions -rw-r--r--
new numerics section using type classes
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}
14400
6069098854b9 new numerics section using type classes
paulson
parents: 12568
diff changeset
     9
\item Pairs ({\S}\ref{sec:products}) and records ({\S}\ref{sec:records}),
and how to reason about them.
11149
e258b536a137 *** empty log message ***
nipkow
parents: 10885
diff changeset
    10
\item Type classes: how to specify and reason about axiomatic collections of
14400
6069098854b9 new numerics section using type classes
paulson
parents: 12568
diff changeset
    11
  types ({\S}\ref{sec:axclass}). This section leads on to a discussion of
6069098854b9 new numerics section using type classes
paulson
parents: 12568
diff changeset
    12
  Isabelle's numeric types ({\S}\ref{sec:numbers}).  
6069098854b9 new numerics section using type classes
paulson
parents: 12568
diff changeset
    13
\item Introducing your own types: how to define types that
10538
d1bf9ca9008d *** empty log message ***
nipkow
parents: 10420
diff changeset
    14
  cannot be constructed with any of the basic methods
d1bf9ca9008d *** empty log message ***
nipkow
parents: 10420
diff changeset
    15
  ({\S}\ref{sec:adv-typedef}).
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    16
\end{itemize}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    17
14400
6069098854b9 new numerics section using type classes
paulson
parents: 12568
diff changeset
    18
The material in this section goes beyond the needs of most novices.
Serious users should at least skim the sections as far as type classes.
That material is fairly advanced; read the beginning to understand what it
is about, but consult the rest only when necessary.
10595
be043b89acc5 partial numerics section
paulson
parents: 10543
diff changeset
    19
11428
332347b9b942 tidying the index
paulson
parents: 11389
diff changeset
    20
\index{pairs and tuples|(}
14400
6069098854b9 new numerics section using type classes
paulson
parents: 12568
diff changeset
    21
\input{Types/document/Pairs}    %%%Section "Pairs and Tuples"
11428
332347b9b942 tidying the index
paulson
parents: 11389
diff changeset
    22
\index{pairs and tuples|)}
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    23
14400
6069098854b9 new numerics section using type classes
paulson
parents: 12568
diff changeset
    24
\input{Types/document/Records}  %%%Section "Records"
11389
55e2aef8909b the records section
paulson
parents: 11277
diff changeset
    25
10396
5ab08609e6c8 *** empty log message ***
nipkow
parents: 10362
diff changeset
    26
14400
6069098854b9 new numerics section using type classes
paulson
parents: 12568
diff changeset
    27
\section{Axiomatic Type Classes} %%%Section
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    28
\label{sec:axclass}
11428
332347b9b942 tidying the index
paulson
parents: 11389
diff changeset
    29
\index{axiomatic type classes|(}
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    30
\index{*axclass|(}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    31
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    32
The programming language Haskell has popularized the notion of type classes.
11277
a2bff98d6e5d *** empty log message ***
nipkow
parents: 11213
diff changeset
    33
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
    34
all types in that class must provide the functions in the interface.
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    35
Isabelle offers the related concept of an \textbf{axiomatic type class}.
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    36
Roughly speaking, an axiomatic type class is a type class with axioms, i.e.\ 
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    37
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
    38
$\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
    39
$\tau$ satisfies the axioms of $C$. Furthermore, type classes can be
11494
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    40
organized in a hierarchy.  Thus there is the notion of a class $D$ being a
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    41
\textbf{subclass}\index{subclasses}
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    42
of a class $C$, written $D < C$. This is the case if all
11196
bb4ede27fcb7 *** empty log message ***
nipkow
parents: 11161
diff changeset
    43
axioms of $C$ are also provable in $D$. We introduce these concepts
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    44
by means of a running example, ordering relations.
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    45
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    46
\subsection{Overloading}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    47
\label{sec:overloading}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    48
\index{overloading|(}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    49
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    50
\input{Types/document/Overloading0}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    51
\input{Types/document/Overloading1}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    52
\input{Types/document/Overloading}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    53
\input{Types/document/Overloading2}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    54
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    55
\index{overloading|)}
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    56
10362
c6b197ccf1f1 *** empty log message ***
nipkow
parents: 10329
diff changeset
    57
\input{Types/document/Axioms}
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    58
11428
332347b9b942 tidying the index
paulson
parents: 11389
diff changeset
    59
\index{axiomatic type classes|)}
10305
adff80268127 *** empty log message ***
nipkow
parents:
diff changeset
    60
\index{*axclass|)}
11149
e258b536a137 *** empty log message ***
nipkow
parents: 10885
diff changeset
    61
14400
6069098854b9 new numerics section using type classes
paulson
parents: 12568
diff changeset
    62
\input{Types/numerics}             %%%Section "Numbers"
11149
e258b536a137 *** empty log message ***
nipkow
parents: 10885
diff changeset
    63
14400
6069098854b9 new numerics section using type classes
paulson
parents: 12568
diff changeset
    64
\input{Types/document/Typedefs}    %%%Section "Introducing New Types"