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