
lcp@285: \chapter*{Preface}
lcp@285: \markboth{Preface}{Preface}   %or Preface ?
lcp@285: \addcontentsline{toc}{chapter}{Preface} 
lcp@285: 
lcp@285: \index{Isabelle!object-logics supported}
lcp@285: 
lcp@285: Most theorem provers support a fixed logic, such as first-order or
lcp@285: equational logic.  They bring sophisticated proof procedures to bear upon
lcp@304: the conjectured formula.  The resolution prover Otter~\cite{wos-bledsoe} is
lcp@304: an impressive example.  ALF~\cite{alf}, Coq~\cite{coq} and
lcp@304: Nuprl~\cite{constable86} each support a fixed logic too, but one far
lcp@304: removed from first-order logic.  They are explicitly concerned with
lcp@304: computation.  A diverse collection of logics --- type theories, process
lcp@304: calculi, $\lambda$-calculi --- may be found in the Computer Science
lcp@304: literature.  Such logics require proof support.  Few proof procedures are
lcp@304: known for them, but the theorem prover can at least automate routine steps.
lcp@285: 
lcp@304: A {\bf generic} theorem prover is one that can support a variety of logics.
lcp@304: Some generic provers are noteworthy for their user interfaces
lcp@304: \cite{dawson90,mural,sawamura92}.  Most of them work by implementing a
lcp@304: syntactic framework that can express typical inference rules.  Isabelle's
lcp@304: distinctive feature is its representation of logics within a fragment of
lcp@304: higher-order logic, called the meta-logic.  The proof theory of
lcp@304: higher-order logic may be used to demonstrate that the representation is
lcp@304: correct~\cite{paulson89}.  The approach has much in common with the
lcp@304: Edinburgh Logical Framework~\cite{harper-jacm} and with
lcp@285: Felty's~\cite{felty93} use of $\lambda$Prolog to implement logics.
lcp@285: 
lcp@285: An inference rule in Isabelle is a generalized Horn clause.  Rules are
lcp@285: joined to make proofs by resolving such clauses.  Logical variables in
lcp@285: goals can be instantiated incrementally.  But Isabelle is not a resolution
lcp@304: theorem prover like Otter.  Isabelle's clauses are drawn from a richer
lcp@304: language and a fully automatic search would be impractical.  Isabelle does
lcp@304: not resolve clauses automatically, but under user direction.  You can
lcp@304: conduct single-step proofs, use Isabelle's built-in proof procedures, or
lcp@304: develop new proof procedures using tactics and tacticals.
lcp@285: 
lcp@285: Isabelle's meta-logic is higher-order, based on the typed
lcp@285: $\lambda$-calculus.  So resolution cannot use ordinary unification, but
lcp@285: higher-order unification~\cite{huet75}.  This complicated procedure gives
lcp@285: Isabelle strong support for many logical formalisms involving variable
lcp@285: binding.
lcp@285: 
lcp@285: The diagram below illustrates some of the logics distributed with Isabelle.
lcp@285: These include first-order logic (intuitionistic and classical), the sequent
lcp@285: calculus, higher-order logic, Zermelo-Fraenkel set theory~\cite{suppes72},
lcp@285: a version of Constructive Type Theory~\cite{nordstrom90}, several modal
lcp@285: logics, and a Logic for Computable Functions.  Several experimental
lcp@285: logics are also available, such a term assignment calculus for linear
lcp@285: logic.  
lcp@285: 
lcp@285: \centerline{\epsfbox{Isa-logics.eps}}
lcp@285: 
lcp@285: 
lcp@285: \section*{How to read this book}
lcp@304: Isabelle is a complex system, but beginners can get by with a few commands
lcp@285: and a basic knowledge of how Isabelle works.  Some knowledge of
lcp@285: Standard~\ML{} is essential because \ML{} is Isabelle's user interface.
lcp@285: Advanced Isabelle theorem proving can involve writing \ML{} code, possibly
lcp@285: with Isabelle's sources at hand.  My book on~\ML{}~\cite{paulson91} covers
lcp@285: much material connected with Isabelle, including a simple theorem prover.
lcp@285: 
lcp@285: The Isabelle documentation is divided into three parts, which serve
lcp@285: distinct purposes:
lcp@285: \begin{itemize}
lcp@285: \item {\em Introduction to Isabelle\/} describes the basic features of
lcp@285:   Isabelle.  This part is intended to be read through.  If you are
lcp@285:   impatient to get started, you might skip the first chapter, which
lcp@285:   describes Isabelle's meta-logic in some detail.  The other chapters
lcp@285:   present on-line sessions of increasing difficulty.  It also explains how
lcp@285:   to derive rules define theories, and concludes with an extended example:
lcp@285:   a Prolog interpreter.
lcp@285: 
lcp@304: \item {\em The Isabelle Reference Manual\/} provides detailed information
lcp@304:   about Isabelle's facilities, excluding the object-logics.  This part
lcp@304:   would make boring reading, though browsing might be useful.  Mostly you
lcp@304:   should use it to locate facts quickly.
lcp@285: 
lcp@285: \item {\em Isabelle's Object-Logics\/} describes the various logics
lcp@285:   distributed with Isabelle.  Its final chapter explains how to define new
lcp@285:   logics.  The other chapters are intended for reference only.
lcp@285: \end{itemize}
lcp@285: This book should not be read from start to finish.  Instead you might read
lcp@285: a couple of chapters from {\em Introduction to Isabelle}, then try some
lcp@285: examples referring to the other parts, return to the {\em Introduction},
lcp@285: and so forth.  Starred sections discuss obscure matters and may be skipped
lcp@285: on a first reading.
lcp@285: 
lcp@285: 
lcp@285: 
lcp@285: \section*{Releases of Isabelle}\index{Isabelle!release history}
lcp@285: Isabelle was first distributed in 1986.  The 1987 version introduced a
lcp@285: higher-order meta-logic with an improved treatment of quantifiers.  The
lcp@285: 1988 version added limited polymorphism and support for natural deduction.
lcp@285: The 1989 version included a parser and pretty printer generator.  The 1992
lcp@285: version introduced type classes, to support many-sorted and higher-order
lcp@285: logics.  The 1993 version provides greater support for theories and is
lcp@285: much faster.  
lcp@285: 
lcp@285: Isabelle is still under development.  Projects under consideration include
lcp@285: better support for inductive definitions, some means of recording proofs, a
lcp@285: graphical user interface, and developments in the standard object-logics.
lcp@285: I hope but cannot promise to maintain upwards compatibility.
lcp@285: 
lcp@285: Isabelle is available by anonymous ftp:
lcp@285: \begin{itemize}
lcp@285: \item University of Cambridge\\
lcp@285:         host {\tt ftp.cl.cam.ac.uk}\\
lcp@285:         directory {\tt ml}
lcp@285: 
lcp@285: \item Technical University of Munich\\
lcp@285:         host {\tt ftp.informatik.tu-muenchen.de}\\
lcp@285:         directory {\tt local/lehrstuhl/nipkow}
lcp@285: \end{itemize}
lcp@285: My electronic mail address is {\tt lcp\at cl.cam.ac.uk}.  Please report any
lcp@285: errors you find in this book and your problems or successes with Isabelle.
lcp@285: 
lcp@285: 
lcp@304: \section*{Acknowledgements} 
lcp@285: Tobias Nipkow has made immense contributions to Isabelle, including the
lcp@285: parser generator, type classes, the simplifier, and several object-logics.
lcp@285: He also arranged for several of his students to help.  Carsten Clasohm
lcp@285: implemented the theory database; Markus Wenzel implemented macros; Sonia
lcp@285: Mahjoub and Karin Nimmermann also contributed.  
lcp@285: 
lcp@285: Nipkow and his students wrote much of the documentation underlying this
lcp@285: book.  Nipkow wrote the first versions of \S\ref{sec:defining-theories},
lcp@304: \S\ref{sec:ref-defining-theories}, Chap.\ts\ref{simp-chap},
lcp@304: Chap.\ts\ref{Defining-Logics} and App.\ts\ref{app:TheorySyntax}\@.  Carsten
lcp@304: Clasohm contributed to Chap.\ts\ref{theories}.  Markus Wenzel contributed
lcp@304: to Chap.\ts\ref{Defining-Logics}.
lcp@285: 
lcp@304: David Aspinall, Sara Kalvala, Ina Kraan, Zhenyu Qian, Norbert V{\"o}lker and
lcp@285: Markus Wenzel suggested changes and corrections to the documentation.
lcp@285: 
lcp@285: Martin Coen, Rajeev Gor\'e, Philippe de Groote and Philippe No\"el helped
lcp@285: to develop Isabelle's standard object-logics.  David Aspinall performed
lcp@285: some useful research into theories and implemented an Isabelle Emacs mode.
lcp@285: Isabelle was developed using Dave Matthews's Standard~{\sc ml} compiler,
lcp@285: Poly/{\sc ml}.  
lcp@285: 
lcp@285: The research has been funded by numerous SERC grants dating from the Alvey
lcp@285: programme (grants GR/E0355.7, GR/G53279, GR/H40570) and by ESPRIT (projects
lcp@285: 3245: Logical Frameworks and 6453: Types).
lcp@285: 
lcp@285: 
lcp@285: \index{ML}




