| 
285
 | 
     1  | 
\chapter*{Preface}
 | 
| 
 | 
     2  | 
\markboth{Preface}{Preface}   %or Preface ?
 | 
| 
356
 | 
     3  | 
%%\addcontentsline{toc}{chapter}{Preface} 
 | 
| 
285
 | 
     4  | 
  | 
| 
 | 
     5  | 
Most theorem provers support a fixed logic, such as first-order or
  | 
| 
 | 
     6  | 
equational logic.  They bring sophisticated proof procedures to bear upon
  | 
| 
304
 | 
     7  | 
the conjectured formula.  The resolution prover Otter~\cite{wos-bledsoe} is
 | 
| 
329
 | 
     8  | 
an impressive example.
  | 
| 
285
 | 
     9  | 
  | 
| 
329
 | 
    10  | 
{\sc alf}~\cite{alf}, Coq~\cite{coq} and Nuprl~\cite{constable86} each
 | 
| 
 | 
    11  | 
support a fixed logic too.  These are higher-order type theories,
  | 
| 
 | 
    12  | 
explicitly concerned with computation and capable of expressing
  | 
| 
 | 
    13  | 
developments in constructive mathematics.  They are far removed from
  | 
| 
 | 
    14  | 
classical first-order logic.
  | 
| 
 | 
    15  | 
  | 
| 
 | 
    16  | 
A diverse collection of logics --- type theories, process calculi,
  | 
| 
 | 
    17  | 
$\lambda$-calculi --- may be found in the Computer Science literature.
  | 
| 
 | 
    18  | 
Such logics require proof support.  Few proof procedures are known for
  | 
| 
 | 
    19  | 
them, but the theorem prover can at least automate routine steps.
  | 
| 
 | 
    20  | 
  | 
| 
 | 
    21  | 
A {\bf generic} theorem prover is one that supports a variety of logics.
 | 
| 
304
 | 
    22  | 
Some generic provers are noteworthy for their user interfaces
  | 
| 
 | 
    23  | 
\cite{dawson90,mural,sawamura92}.  Most of them work by implementing a
 | 
| 
 | 
    24  | 
syntactic framework that can express typical inference rules.  Isabelle's
  | 
| 
 | 
    25  | 
distinctive feature is its representation of logics within a fragment of
  | 
| 
 | 
    26  | 
higher-order logic, called the meta-logic.  The proof theory of
  | 
| 
 | 
    27  | 
higher-order logic may be used to demonstrate that the representation is
  | 
| 
 | 
    28  | 
correct~\cite{paulson89}.  The approach has much in common with the
 | 
| 
 | 
    29  | 
Edinburgh Logical Framework~\cite{harper-jacm} and with
 | 
| 
285
 | 
    30  | 
Felty's~\cite{felty93} use of $\lambda$Prolog to implement logics.
 | 
| 
 | 
    31  | 
  | 
| 
 | 
    32  | 
An inference rule in Isabelle is a generalized Horn clause.  Rules are
  | 
| 
 | 
    33  | 
joined to make proofs by resolving such clauses.  Logical variables in
  | 
| 
 | 
    34  | 
goals can be instantiated incrementally.  But Isabelle is not a resolution
  | 
| 
304
 | 
    35  | 
theorem prover like Otter.  Isabelle's clauses are drawn from a richer
  | 
| 
 | 
    36  | 
language and a fully automatic search would be impractical.  Isabelle does
  | 
| 
 | 
    37  | 
not resolve clauses automatically, but under user direction.  You can
  | 
| 
 | 
    38  | 
conduct single-step proofs, use Isabelle's built-in proof procedures, or
  | 
| 
 | 
    39  | 
develop new proof procedures using tactics and tacticals.
  | 
| 
285
 | 
    40  | 
  | 
| 
329
 | 
    41  | 
Isabelle's meta-logic is higher-order, based on the simply typed
  | 
| 
285
 | 
    42  | 
$\lambda$-calculus.  So resolution cannot use ordinary unification, but
  | 
| 
 | 
    43  | 
higher-order unification~\cite{huet75}.  This complicated procedure gives
 | 
| 
 | 
    44  | 
Isabelle strong support for many logical formalisms involving variable
  | 
| 
 | 
    45  | 
binding.
  | 
| 
 | 
    46  | 
  | 
| 
 | 
    47  | 
The diagram below illustrates some of the logics distributed with Isabelle.
  | 
| 
 | 
    48  | 
These include first-order logic (intuitionistic and classical), the sequent
  | 
| 
 | 
    49  | 
calculus, higher-order logic, Zermelo-Fraenkel set theory~\cite{suppes72},
 | 
| 
 | 
    50  | 
a version of Constructive Type Theory~\cite{nordstrom90}, several modal
 | 
| 
356
 | 
    51  | 
logics, and a Logic for Computable Functions~\cite{paulson87}.  Several
 | 
| 
 | 
    52  | 
experimental logics are being developed, such as linear logic.
  | 
| 
285
 | 
    53  | 
  | 
| 
5374
 | 
    54  | 
\centerline{\epsfbox{gfx/Isa-logics.eps}}
 | 
| 
285
 | 
    55  | 
  | 
| 
 | 
    56  | 
  | 
| 
 | 
    57  | 
\section*{How to read this book}
 | 
| 
304
 | 
    58  | 
Isabelle is a complex system, but beginners can get by with a few commands
  | 
| 
285
 | 
    59  | 
and a basic knowledge of how Isabelle works.  Some knowledge of
  | 
| 
 | 
    60  | 
Standard~\ML{} is essential because \ML{} is Isabelle's user interface.
 | 
| 
 | 
    61  | 
Advanced Isabelle theorem proving can involve writing \ML{} code, possibly
 | 
| 
 | 
    62  | 
with Isabelle's sources at hand.  My book on~\ML{}~\cite{paulson91} covers
 | 
| 
 | 
    63  | 
much material connected with Isabelle, including a simple theorem prover.
  | 
| 
 | 
    64  | 
  | 
| 
 | 
    65  | 
The Isabelle documentation is divided into three parts, which serve
  | 
| 
 | 
    66  | 
distinct purposes:
  | 
| 
 | 
    67  | 
\begin{itemize}
 | 
| 
 | 
    68  | 
\item {\em Introduction to Isabelle\/} describes the basic features of
 | 
| 
 | 
    69  | 
  Isabelle.  This part is intended to be read through.  If you are
  | 
| 
 | 
    70  | 
  impatient to get started, you might skip the first chapter, which
  | 
| 
 | 
    71  | 
  describes Isabelle's meta-logic in some detail.  The other chapters
  | 
| 
 | 
    72  | 
  present on-line sessions of increasing difficulty.  It also explains how
  | 
| 
 | 
    73  | 
  to derive rules define theories, and concludes with an extended example:
  | 
| 
 | 
    74  | 
  a Prolog interpreter.
  | 
| 
 | 
    75  | 
  | 
| 
304
 | 
    76  | 
\item {\em The Isabelle Reference Manual\/} provides detailed information
 | 
| 
 | 
    77  | 
  about Isabelle's facilities, excluding the object-logics.  This part
  | 
| 
 | 
    78  | 
  would make boring reading, though browsing might be useful.  Mostly you
  | 
| 
 | 
    79  | 
  should use it to locate facts quickly.
  | 
| 
285
 | 
    80  | 
  | 
| 
 | 
    81  | 
\item {\em Isabelle's Object-Logics\/} describes the various logics
 | 
| 
329
 | 
    82  | 
  distributed with Isabelle.  The chapters are intended for reference only;
  | 
| 
 | 
    83  | 
  they overlap somewhat so that each chapter can be read in isolation.
  | 
| 
285
 | 
    84  | 
\end{itemize}
 | 
| 
 | 
    85  | 
This book should not be read from start to finish.  Instead you might read
  | 
| 
 | 
    86  | 
a couple of chapters from {\em Introduction to Isabelle}, then try some
 | 
| 
 | 
    87  | 
examples referring to the other parts, return to the {\em Introduction},
 | 
| 
 | 
    88  | 
and so forth.  Starred sections discuss obscure matters and may be skipped
  | 
| 
 | 
    89  | 
on a first reading.
  | 
| 
 | 
    90  | 
  | 
| 
 | 
    91  | 
  | 
| 
 | 
    92  | 
  | 
| 
329
 | 
    93  | 
\section*{Releases of Isabelle}
 | 
| 
285
 | 
    94  | 
Isabelle was first distributed in 1986.  The 1987 version introduced a
  | 
| 
 | 
    95  | 
higher-order meta-logic with an improved treatment of quantifiers.  The
  | 
| 
 | 
    96  | 
1988 version added limited polymorphism and support for natural deduction.
  | 
| 
 | 
    97  | 
The 1989 version included a parser and pretty printer generator.  The 1992
  | 
| 
 | 
    98  | 
version introduced type classes, to support many-sorted and higher-order
  | 
| 
 | 
    99  | 
logics.  The 1993 version provides greater support for theories and is
  | 
| 
 | 
   100  | 
much faster.  
  | 
| 
 | 
   101  | 
  | 
| 
 | 
   102  | 
Isabelle is still under development.  Projects under consideration include
  | 
| 
 | 
   103  | 
better support for inductive definitions, some means of recording proofs, a
  | 
| 
 | 
   104  | 
graphical user interface, and developments in the standard object-logics.
  | 
| 
 | 
   105  | 
I hope but cannot promise to maintain upwards compatibility.
  | 
| 
 | 
   106  | 
  | 
| 
14379
 | 
   107  | 
Isabelle can be downloaded from .
  | 
| 
 | 
   108  | 
\begin{quote}
 | 
| 
 | 
   109  | 
{\tt http://www.cl.cam.ac.uk/Research/HVG/Isabelle/dist/}  
 | 
| 
 | 
   110  | 
\end{quote}
 | 
| 
356
 | 
   111  | 
The electronic distribution list {\tt isabelle-users\at cl.cam.ac.uk}
 | 
| 
 | 
   112  | 
provides a forum for discussing problems and applications involving
  | 
| 
 | 
   113  | 
Isabelle.  To join, send me a message via {\tt lcp\at cl.cam.ac.uk}.
 | 
| 
 | 
   114  | 
Please notify me of any errors you find in this book.
  | 
| 
285
 | 
   115  | 
  | 
| 
304
 | 
   116  | 
\section*{Acknowledgements} 
 | 
| 
285
 | 
   117  | 
Tobias Nipkow has made immense contributions to Isabelle, including the
  | 
| 
 | 
   118  | 
parser generator, type classes, the simplifier, and several object-logics.
  | 
| 
 | 
   119  | 
He also arranged for several of his students to help.  Carsten Clasohm
  | 
| 
 | 
   120  | 
implemented the theory database; Markus Wenzel implemented macros; Sonia
  | 
| 
 | 
   121  | 
Mahjoub and Karin Nimmermann also contributed.  
  | 
| 
 | 
   122  | 
  | 
| 
 | 
   123  | 
Nipkow and his students wrote much of the documentation underlying this
  | 
| 
 | 
   124  | 
book.  Nipkow wrote the first versions of \S\ref{sec:defining-theories},
 | 
| 
329
 | 
   125  | 
\S\ref{sec:ref-defining-theories}, Chap.\ts\ref{Defining-Logics},
 | 
| 
 | 
   126  | 
Chap.\ts\ref{simp-chap} and App.\ts\ref{app:TheorySyntax}\@.  Carsten
 | 
| 
304
 | 
   127  | 
Clasohm contributed to Chap.\ts\ref{theories}.  Markus Wenzel contributed
 | 
| 
329
 | 
   128  | 
to Chap.\ts\ref{chap:syntax}.  Nipkow also provided the quotation at
 | 
| 
 | 
   129  | 
the front.
  | 
| 
285
 | 
   130  | 
  | 
| 
329
 | 
   131  | 
David Aspinall, Sara Kalvala, Ina Kraan, Chris Owens, Zhenyu Qian, Norbert
  | 
| 
 | 
   132  | 
V{\"o}lker and Markus Wenzel suggested changes and corrections to the
 | 
| 
 | 
   133  | 
documentation.
  | 
| 
285
 | 
   134  | 
  | 
| 
 | 
   135  | 
Martin Coen, Rajeev Gor\'e, Philippe de Groote and Philippe No\"el helped
  | 
| 
 | 
   136  | 
to develop Isabelle's standard object-logics.  David Aspinall performed
  | 
| 
 | 
   137  | 
some useful research into theories and implemented an Isabelle Emacs mode.
  | 
| 
 | 
   138  | 
Isabelle was developed using Dave Matthews's Standard~{\sc ml} compiler,
 | 
| 
 | 
   139  | 
Poly/{\sc ml}.  
 | 
| 
 | 
   140  | 
  | 
| 
 | 
   141  | 
The research has been funded by numerous SERC grants dating from the Alvey
  | 
| 
 | 
   142  | 
programme (grants GR/E0355.7, GR/G53279, GR/H40570) and by ESPRIT (projects
  | 
| 
 | 
   143  | 
3245: Logical Frameworks and 6453: Types).
  |