| 7827 |      1 | \documentclass[12pt,a4paper]{article}
 | 
| 9695 |      2 | \usepackage{graphicx,../iman,../extra,../ttbox,../proof,../pdfsetup}
 | 
| 2656 |      3 | 
 | 
| 105 |      4 | %% $Id$
 | 
|  |      5 | %% run    bibtex intro         to prepare bibliography
 | 
|  |      6 | %% run    ../sedindex intro    to prepare index file
 | 
|  |      7 | %prth *(\(.*\));          \1;      
 | 
|  |      8 | %{\\out \(.*\)}          {\\out val it = "\1" : thm}
 | 
|  |      9 | 
 | 
| 6611 |     10 | \title{\includegraphics[scale=0.5]{isabelle} \\[4ex] Introduction to Isabelle}   
 | 
| 105 |     11 | \author{{\em Lawrence C. Paulson}\\
 | 
| 3127 |     12 |         Computer Laboratory \\ University of Cambridge \\
 | 
|  |     13 |         \texttt{lcp@cl.cam.ac.uk}\\[3ex] 
 | 
|  |     14 |         With Contributions by Tobias Nipkow and Markus Wenzel
 | 
| 105 |     15 | }
 | 
|  |     16 | \makeindex
 | 
|  |     17 | 
 | 
|  |     18 | \underscoreoff
 | 
|  |     19 | 
 | 
|  |     20 | \setcounter{secnumdepth}{2} \setcounter{tocdepth}{2}
 | 
|  |     21 | 
 | 
|  |     22 | \sloppy
 | 
|  |     23 | \binperiod     %%%treat . like a binary operator
 | 
|  |     24 | 
 | 
|  |     25 | \newcommand\qeq{\stackrel{?}{\equiv}}  %for disagreement pairs in unification
 | 
|  |     26 | \newcommand{\nand}{\mathbin{\lnot\&}} 
 | 
|  |     27 | \newcommand{\xor}{\mathbin{\#}}
 | 
|  |     28 | 
 | 
|  |     29 | \pagenumbering{roman} 
 | 
|  |     30 | \begin{document}
 | 
|  |     31 | \pagestyle{empty}
 | 
|  |     32 | \begin{titlepage}
 | 
|  |     33 | \maketitle 
 | 
| 14148 |     34 | \emph{Note}: this document is part of the earlier Isabelle documentation, 
 | 
|  |     35 | which is largely superseded by the Isabelle/HOL
 | 
|  |     36 | \emph{Tutorial}~\cite{isa-tutorial}. It describes the old-style theory 
 | 
|  |     37 | syntax and shows how to conduct proofs using the 
 | 
|  |     38 | ML top level. This style of interaction is largely obsolete:
 | 
|  |     39 | most Isabelle proofs are now written using the Isar 
 | 
|  |     40 | language and the Proof General interface. However, this paper contains valuable 
 | 
|  |     41 | information that is not available elsewhere. Its examples are based 
 | 
|  |     42 | on first-order logic rather than higher-order logic.
 | 
|  |     43 | 
 | 
| 105 |     44 | \thispagestyle{empty}
 | 
|  |     45 | \vfill
 | 
|  |     46 | {\small Copyright \copyright{} \number\year{} by Lawrence C. Paulson}
 | 
|  |     47 | \end{titlepage}
 | 
|  |     48 | 
 | 
|  |     49 | \pagestyle{headings}
 | 
|  |     50 | \part*{Preface}
 | 
| 1878 |     51 | \index{Isabelle!overview} \index{Isabelle!object-logics supported}
 | 
|  |     52 | Isabelle~\cite{paulson-natural,paulson-found,paulson700} is a generic theorem
 | 
|  |     53 | prover.  It has been instantiated to support reasoning in several
 | 
|  |     54 | object-logics:
 | 
| 105 |     55 | \begin{itemize}
 | 
|  |     56 | \item first-order logic, constructive and classical versions
 | 
|  |     57 | \item higher-order logic, similar to that of Gordon's {\sc
 | 
| 348 |     58 | hol}~\cite{mgordon-hol}
 | 
| 105 |     59 | \item Zermelo-Fraenkel set theory~\cite{suppes72}
 | 
|  |     60 | \item an extensional version of Martin-L\"of's Type Theory~\cite{nordstrom90}
 | 
|  |     61 | \item the classical first-order sequent calculus, {\sc lk}
 | 
|  |     62 | \item the modal logics $T$, $S4$, and $S43$
 | 
|  |     63 | \item the Logic for Computable Functions~\cite{paulson87}
 | 
|  |     64 | \end{itemize}
 | 
|  |     65 | A logic's syntax and inference rules are specified declaratively; this
 | 
|  |     66 | allows single-step proof construction.  Isabelle provides control
 | 
|  |     67 | structures for expressing search procedures.  Isabelle also provides
 | 
|  |     68 | several generic tools, such as simplifiers and classical theorem provers,
 | 
|  |     69 | which can be applied to object-logics.
 | 
|  |     70 | 
 | 
| 14148 |     71 | Isabelle is a large system, but beginners can get by with a small
 | 
|  |     72 | repertoire of commands and a basic knowledge of how Isabelle works.  
 | 
|  |     73 | The Isabelle/HOL \emph{Tutorial}~\cite{isa-tutorial} describes how to get started. Advanced Isabelle users will benefit from some
 | 
|  |     74 | knowledge of Standard~\ML{}, because Isabelle is written in \ML{};
 | 
| 105 |     75 | \index{ML}
 | 
| 14148 |     76 | if you are prepared to writing \ML{}
 | 
|  |     77 | code, you can get Isabelle to do almost anything.  My book
 | 
| 6592 |     78 | on~\ML{}~\cite{paulson-ml2} covers much material connected with Isabelle,
 | 
| 105 |     79 | including a simple theorem prover.  Users must be familiar with logic as
 | 
|  |     80 | used in computer science; there are many good
 | 
|  |     81 | texts~\cite{galton90,reeves90}.
 | 
|  |     82 | 
 | 
|  |     83 | \index{LCF}
 | 
| 348 |     84 | {\sc lcf}, developed by Robin Milner and colleagues~\cite{mgordon79}, is an
 | 
| 105 |     85 | ancestor of {\sc hol}, Nuprl, and several other systems.  Isabelle borrows
 | 
|  |     86 | ideas from {\sc lcf}: formulae are~\ML{} values; theorems belong to an
 | 
|  |     87 | abstract type; tactics and tacticals support backward proof.  But {\sc lcf}
 | 
|  |     88 | represents object-level rules by functions, while Isabelle represents them
 | 
|  |     89 | by terms.  You may find my other writings~\cite{paulson87,paulson-handbook}
 | 
|  |     90 | helpful in understanding the relationship between {\sc lcf} and Isabelle.
 | 
|  |     91 | 
 | 
|  |     92 | \index{Isabelle!release history} Isabelle was first distributed in 1986.
 | 
|  |     93 | The 1987 version introduced a higher-order meta-logic with an improved
 | 
|  |     94 | treatment of quantifiers.  The 1988 version added limited polymorphism and
 | 
|  |     95 | support for natural deduction.  The 1989 version included a parser and
 | 
|  |     96 | pretty printer generator.  The 1992 version introduced type classes, to
 | 
| 14148 |     97 | support many-sorted and higher-order logics.  The 1994 version introduced
 | 
|  |     98 | greater support for theories.  The most important recent change is the
 | 
|  |     99 | introduction of the Isar proof language, thanks to Markus Wenzel.  
 | 
|  |    100 | Isabelle is still under
 | 
| 105 |    101 | development and will continue to change.
 | 
|  |    102 | 
 | 
|  |    103 | \subsubsection*{Overview} 
 | 
| 296 |    104 | This manual consists of three parts.  Part~I discusses the Isabelle's
 | 
|  |    105 | foundations.  Part~II, presents simple on-line sessions, starting with
 | 
|  |    106 | forward proof.  It also covers basic tactics and tacticals, and some
 | 
|  |    107 | commands for invoking them.  Part~III contains further examples for users
 | 
|  |    108 | with a bit of experience.  It explains how to derive rules define theories,
 | 
|  |    109 | and concludes with an extended example: a Prolog interpreter.
 | 
| 105 |    110 | 
 | 
|  |    111 | Isabelle's Reference Manual and Object-Logics manual contain more details.
 | 
|  |    112 | They assume familiarity with the concepts presented here.
 | 
|  |    113 | 
 | 
|  |    114 | 
 | 
|  |    115 | \subsubsection*{Acknowledgements} 
 | 
| 311 |    116 | Tobias Nipkow contributed most of the section on defining theories.
 | 
| 14148 |    117 | Stefan Berghofer, Sara Kalvala and Viktor Kuncak suggested improvements.
 | 
| 105 |    118 | 
 | 
| 8979 |    119 | Tobias Nipkow has made immense contributions to Isabelle, including the parser
 | 
|  |    120 | generator, type classes, and the simplifier.  Carsten Clasohm and Markus
 | 
|  |    121 | Wenzel made major contributions; Sonia Mahjoub and Karin Nimmermann also
 | 
|  |    122 | helped.  Isabelle was developed using Dave Matthews's Standard~{\sc ml}
 | 
|  |    123 | compiler, Poly/{\sc ml}.  Many people have contributed to Isabelle's standard
 | 
|  |    124 | object-logics, including Martin Coen, Philippe de Groote, Philippe No\"el.
 | 
|  |    125 | The research has been funded by the EPSRC (grants GR/G53279, GR/H40570,
 | 
|  |    126 | GR/K57381, GR/K77051, GR/M75440) and by ESPRIT (projects 3245: Logical
 | 
|  |    127 | Frameworks, and 6453: Types), and by the DFG Schwerpunktprogramm
 | 
|  |    128 | \emph{Deduktion}.
 | 
| 105 |    129 | 
 | 
|  |    130 | \newpage
 | 
|  |    131 | \pagestyle{plain} \tableofcontents 
 | 
|  |    132 | \newpage
 | 
|  |    133 | 
 | 
|  |    134 | \newfont{\sanssi}{cmssi12}
 | 
|  |    135 | \vspace*{2.5cm}
 | 
|  |    136 | \begin{quote}
 | 
|  |    137 | \raggedleft
 | 
|  |    138 | {\sanssi
 | 
|  |    139 | You can only find truth with logic\\
 | 
|  |    140 | if you have already found truth without it.}\\
 | 
|  |    141 | \bigskip
 | 
|  |    142 | 
 | 
|  |    143 | G.K. Chesterton, {\em The Man who was Orthodox}
 | 
|  |    144 | \end{quote}
 | 
|  |    145 | 
 | 
|  |    146 | \clearfirst  \pagestyle{headings}
 | 
|  |    147 | \include{foundations}
 | 
|  |    148 | \include{getting}
 | 
|  |    149 | \include{advanced}
 | 
|  |    150 | 
 | 
|  |    151 | \bibliographystyle{plain} \small\raggedright\frenchspacing
 | 
| 6592 |    152 | \bibliography{../manual}
 | 
| 105 |    153 | 
 | 
| 8828 |    154 | \printindex
 | 
| 105 |    155 | \end{document}
 |