doc-src/AxClass/body.tex
author wenzelm
Sun, 21 May 2000 21:48:39 +0200
changeset 8903 78d6e47469e4
parent 8890 9a44d8d98731
child 8906 fc7841f31388
permissions -rw-r--r--
new Isar version;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
     1
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
     2
\chapter{Introduction}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
     3
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
     4
A Haskell-style type-system \cite{haskell-report} with ordered type-classes
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
     5
has been present in Isabelle since 1991 \cite{nipkow-sorts93}.  Initially,
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
     6
classes have mainly served as a \emph{purely syntactic} tool to formulate
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
     7
polymorphic object-logics in a clean way, such as the standard Isabelle
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
     8
formulation of many-sorted FOL \cite{paulson-isa-book}.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
     9
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    10
Applying classes at the \emph{logical level} to provide a simple notion of
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    11
abstract theories and instantiations to concrete ones, has been long proposed
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    12
as well \cite{nipkow-types93,nipkow-sorts93}).  At that time, Isabelle still
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    13
lacked built-in support for these \emph{axiomatic type classes}. More
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    14
importantly, their semantics was not yet fully fleshed out (and unnecessarily
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    15
complicated, too).
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    16
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    17
Since the Isabelle94 releases, actual axiomatic type classes have been an
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    18
integral part of Isabelle's meta-logic.  This very simple implementation is
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    19
based on a straight-forward extension of traditional simple-typed Higher-Order
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    20
Logic, including types qualified by logical predicates and overloaded constant
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    21
definitions; see \cite{Wenzel:1997:TPHOL} for further details.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    22
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    23
Yet until Isabelle99, there used to be still a fundamental methodological
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    24
problem in using axiomatic type classes conveniently, due to the traditional
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    25
distinction of Isabelle theory files vs.\ ML proof scripts.  This has been
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    26
finally overcome with the advent of Isabelle/Isar theories
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    27
\cite{isabelle-isar-ref}: now definitions and proofs may be freely intermixed.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    28
This nicely accommodates the usual procedure of defining axiomatic type
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    29
classes, proving abstract properties, defining operations on concrete types,
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    30
proving concrete properties for instantiation of classes etc.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    31
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    32
\medskip
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    33
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    34
So to cut a long story short, the present version of axiomatic type classes
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    35
(Isabelle99 or later) now provides an even more useful and convenient
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    36
mechanism for light-weight abstract theories, without any special provisions
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    37
to be observed by the user.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    38
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    39
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    40
\chapter{Examples}\label{sec:ex}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    41
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    42
Axiomatic type classes are a concept of Isabelle's meta-logic
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    43
\cite{paulson-isa-book,Wenzel:1997:TPHOL}.  They may be applied to any
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    44
object-logic that directly uses the meta type system, such as Isabelle/HOL
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    45
\cite{isabelle-HOL}.  Subsequently, we present various examples that are all
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    46
formulated within HOL, except the one of \secref{sec:ex-natclass} which is in
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    47
FOL.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    48
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    49
\section{Semigroups}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    50
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    51
An axiomatic type class is simply a class of types that all meet certain
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    52
\emph{axioms}. Thus, type classes may be also understood as type predicates
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    53
--- i.e.\ abstractions over a single type argument $\alpha$.  Class axioms
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    54
typically contain polymorphic constants that depend on this type $\alpha$.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    55
These \emph{characteristic constants} behave like operations associated with
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    56
the ``carrier'' type $\alpha$.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    57
8903
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
    58
We illustrate these basic concepts by the following theory of semigroups.
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    59
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    60
\bigskip
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    61
\input{generated/Semigroup}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    62
\bigskip
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    63
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    64
\noindent
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    65
Above we have first declared a polymorphic constant $\TIMES :: \alpha \To
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    66
\alpha \To \alpha$ and then defined the class $semigroup$ of all types $\tau$
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    67
such that $\TIMES :: \tau \To \tau \To \tau$ is indeed an associative
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    68
operator.  The $assoc$ axiom contains exactly one type variable, which is
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    69
invisible in the above presentation, though.  Also note that free term
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    70
variables (like $x$, $y$, $z$) are allowed for user convenience ---
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    71
conceptually all of these are bound by outermost universal quantifiers.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    72
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    73
\medskip
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    74
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    75
In general, type classes may be used to describe \emph{structures} with
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    76
exactly one carrier $\alpha$ and a fixed \emph{signature}.  Different
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    77
signatures require different classes. In the following theory, class
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    78
$plus_semigroup$ represents semigroups of the form $(\tau, \PLUS^\tau)$ while
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    79
$times_semigroup$ represents semigroups $(\tau, \TIMES^\tau)$.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    80
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    81
\bigskip
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    82
\input{generated/Semigroups}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    83
\bigskip
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    84
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    85
\noindent Even if classes $plus_semigroup$ and $times_semigroup$ both represent
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    86
semigroups in a sense, they are not the same!
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    87
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    88
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    89
\input{generated/Group}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    90
8903
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
    91
\input{generated/Product}
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    92
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    93
8903
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
    94
\section{Defining natural numbers in FOL}\label{sec:ex-natclass}
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    95
8903
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
    96
Axiomatic type classes abstract over exactly one type argument. Thus, any
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
    97
\emph{axiomatic} theory extension where each axiom refers to at most one type
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
    98
variable, may be trivially turned into a \emph{definitional} one.
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
    99
8903
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   100
We illustrate this with the natural numbers in Isabelle/FOL.
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   101
8903
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   102
\bigskip
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   103
\input{generated/NatClass}
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   104
\bigskip
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   105
8903
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   106
This is an abstract version of the plain $Nat$ theory in
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   107
FOL.\footnote{See \url{http://isabelle.in.tum.de/library/FOL/ex/Nat.html}}
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   108
8903
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   109
Basically, we have just replaced all occurrences of type $nat$ by $\alpha$ and
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   110
used the natural number axioms to define class $nat$.  There is only a minor
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   111
snag, that the original recursion operator $rec$ had to be made monomorphic,
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   112
in a sense.  Thus class $nat$ contains exactly those types $\tau$ that are
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   113
isomorphic to ``the'' natural numbers (with signature $0$, $Suc$, $rec$).
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   114
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   115
\medskip
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   116
8903
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   117
What we have done here can be also viewed as \emph{type specification}.  Of
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   118
course, it still remains open if there is some type at all that meets the
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   119
class axioms.  Now a very nice property of axiomatic type classes is, that
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   120
abstract reasoning is always possible --- independent of satisfiability.  The
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   121
meta-logic won't break, even if some classes (or general sorts) turns out to
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   122
be empty (``inconsistent'') later.
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   123
8903
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   124
Theorems of the abstract natural numbers may be derived in the same way as for
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   125
the concrete version.  The original proof scripts may be used with some
78d6e47469e4 new Isar version;
wenzelm
parents: 8890
diff changeset
   126
trivial changes only (mostly adding some type constraints).
8890
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   127
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   128
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   129
%% FIXME move some parts to ref or isar-ref manual (!?);
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   130
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   131
% \chapter{The user interface of Isabelle's axclass package}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   132
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   133
% The actual axiomatic type class package of Isabelle/Pure mainly consists
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   134
% of two new theory sections: \texttt{axclass} and \texttt{instance}.  Some
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   135
% typical applications of these have already been demonstrated in
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   136
% \secref{sec:ex}, below their syntax and semantics are presented more
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   137
% completely.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   138
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   139
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   140
% \section{The axclass section}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   141
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   142
% Within theory files, \texttt{axclass} introduces an axiomatic type class
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   143
% definition. Its concrete syntax is:
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   144
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   145
% \begin{matharray}{l}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   146
%   \texttt{axclass} \\
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   147
%   \ \ c \texttt{ < } c@1\texttt, \ldots\texttt, c@n \\
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   148
%   \ \ id@1\ axm@1 \\
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   149
%   \ \ \vdots \\
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   150
%   \ \ id@m\ axm@m
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   151
% \emphnd{matharray}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   152
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   153
% Where $c, c@1, \ldots, c@n$ are classes (category $id$ or
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   154
% $string$) and $axm@1, \ldots, axm@m$ (with $m \ge
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   155
% 0$) are formulas (category $string$).
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   156
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   157
% Class $c$ has to be new, and sort $\{c@1, \ldots, c@n\}$ a subsort of
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   158
% \texttt{logic}. Each class axiom $axm@j$ may contain any term
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   159
% variables, but at most one type variable (which need not be the same
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   160
% for all axioms). The sort of this type variable has to be a supersort
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   161
% of $\{c@1, \ldots, c@n\}$.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   162
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   163
% \medskip
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   164
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   165
% The \texttt{axclass} section declares $c$ as subclass of $c@1, \ldots,
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   166
% c@n$ to the type signature.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   167
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   168
% Furthermore, $axm@1, \ldots, axm@m$ are turned into the
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   169
% ``abstract axioms'' of $c$ with names $id@1, \ldots,
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   170
% id@m$.  This is done by replacing all occurring type variables
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   171
% by $\alpha :: c$. Original axioms that do not contain any type
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   172
% variable will be prefixed by the logical precondition
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   173
% $\texttt{OFCLASS}(\alpha :: \texttt{logic}, c\texttt{_class})$.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   174
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   175
% Another axiom of name $c\texttt{I}$ --- the ``class $c$ introduction
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   176
% rule'' --- is built from the respective universal closures of
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   177
% $axm@1, \ldots, axm@m$ appropriately.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   178
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   179
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   180
% \section{The instance section}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   181
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   182
% Section \texttt{instance} proves class inclusions or type arities at the
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   183
% logical level and then transfers these into the type signature.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   184
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   185
% Its concrete syntax is:
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   186
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   187
% \begin{matharray}{l}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   188
%   \texttt{instance} \\
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   189
%   \ \ [\ c@1 \texttt{ < } c@2 \ |\
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   190
%       t \texttt{ ::\ (}sort@1\texttt, \ldots \texttt, sort@n\texttt) sort\ ] \\
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   191
%   \ \ [\ \texttt(name@1 \texttt, \ldots\texttt, name@m\texttt)\ ] \\
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   192
%   \ \ [\ \texttt{\{|} text \texttt{|\}}\ ]
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   193
% \emphnd{matharray}
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   194
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   195
% Where $c@1, c@2$ are classes and $t$ is an $n$-place type constructor
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   196
% (all of category $id$ or $string)$. Furthermore,
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   197
% $sort@i$ are sorts in the usual Isabelle-syntax.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   198
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   199
% \medskip
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   200
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   201
% Internally, \texttt{instance} first sets up an appropriate goal that
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   202
% expresses the class inclusion or type arity as a meta-proposition.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   203
% Then tactic \texttt{AxClass.axclass_tac} is applied with all preceding
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   204
% meta-definitions of the current theory file and the user-supplied
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   205
% witnesses. The latter are $name@1, \ldots, name@m$, where
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   206
% $id$ refers to an \ML-name of a theorem, and $string$ to an
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   207
% axiom of the current theory node\footnote{Thus, the user may reference
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   208
%   axioms from above this \texttt{instance} in the theory file. Note
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   209
%   that new axioms appear at the \ML-toplevel only after the file is
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   210
%   processed completely.}.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   211
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   212
% Tactic \texttt{AxClass.axclass_tac} first unfolds the class definition by
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   213
% resolving with rule $c\texttt\texttt{I}$, and then applies the witnesses
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   214
% according to their form: Meta-definitions are unfolded, all other
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   215
% formulas are repeatedly resolved\footnote{This is done in a way that
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   216
%   enables proper object-\emph{rules} to be used as witnesses for
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   217
%   corresponding class axioms.} with.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   218
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   219
% The final optional argument $text$ is \ML-code of an arbitrary
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   220
% user tactic which is applied last to any remaining goals.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   221
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   222
% \medskip
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   223
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   224
% Because of the complexity of \texttt{instance}'s witnessing mechanisms,
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   225
% new users of the axclass package are advised to only use the simple
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   226
% form $\texttt{instance}\ \ldots\ (id@1, \ldots, id@!m)$, where
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   227
% the identifiers refer to theorems that are appropriate type instances
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   228
% of the class axioms. This typically requires an auxiliary theory,
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   229
% though, which defines some constants and then proves these witnesses.
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   230
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   231
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   232
%%% Local Variables: 
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   233
%%% mode: latex
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   234
%%% TeX-master: "axclass"
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   235
%%% End: 
9a44d8d98731 snapshot of new Isar'ized version;
wenzelm
parents:
diff changeset
   236
% LocalWords:  Isabelle FOL