doc-src/IsarRef/intro.tex
author wenzelm
Wed, 27 Feb 2002 19:43:55 +0100
changeset 12966 6373b4d09325
parent 12879 8e1cae1de136
child 13039 cfcc1f6f21df
permissions -rw-r--r--
'using' command;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
     1
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
     2
\chapter{Introduction}
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
     3
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
     4
\section{Overview}
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
     5
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
     6
The \emph{Isabelle} system essentially provides a generic infrastructure for
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
     7
building deductive systems (programmed in Standard ML), with a special focus
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
     8
on interactive theorem proving in higher-order logics.  In the olden days even
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
     9
end-users would refer to certain ML functions (goal commands, tactics,
12879
wenzelm
parents: 12621
diff changeset
    10
tacticals etc.) to pursue their everyday theorem proving tasks
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    11
\cite{isabelle-intro,isabelle-ref}.
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    12
  
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    13
In contrast \emph{Isar} provides an interpreted language environment of its
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    14
own, which has been specifically tailored for the needs of theory and proof
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    15
development.  Compared to raw ML, the Isabelle/Isar top-level provides a more
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    16
robust and comfortable development platform, with proper support for theory
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    17
development graphs, single-step evaluation with unlimited undo, etc.  The
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    18
Isabelle/Isar version of the \emph{Proof~General} user interface
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    19
\cite{proofgeneral,Aspinall:TACAS:2000} provides an adequate front-end for
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    20
interactive theory and proof development.
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    21
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    22
\medskip Apart from these technical advances over bare-bones ML programming,
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    23
the main intention of Isar is to provide a conceptually different view on
12879
wenzelm
parents: 12621
diff changeset
    24
machine-checked proofs \cite{Wenzel:1999:TPHOL,Wenzel-PhD} --- ``Isar'' stands
wenzelm
parents: 12621
diff changeset
    25
for ``Intelligible semi-automated reasoning''.  Drawing from both the
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    26
traditions of informal mathematical proof texts and high-level programming
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    27
languages, Isar provides a versatile environment for structured formal proof
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    28
documents.  Thus properly written Isar proof texts become accessible to a
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    29
broader audience than unstructured tactic scripts (which typically only
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    30
provide operational information for the machine).  Writing human-readable
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    31
proof texts certainly requires some additional efforts by the writer in order
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    32
to achieve a good presentation --- both of formal and informal parts of the
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    33
text.  On the other hand, human-readable formal texts gain some value in their
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    34
own right, independently of the mechanic proof-checking process.
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    35
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    36
Despite its grand design of structured proof texts, Isar is able to assimilate
12879
wenzelm
parents: 12621
diff changeset
    37
the old tactical style as an ``improper'' sub-language.  This provides an easy
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    38
upgrade path for existing tactic scripts, as well as additional means for
12879
wenzelm
parents: 12621
diff changeset
    39
interactive experimentation and debugging of structured proofs.  Isabelle/Isar
wenzelm
parents: 12621
diff changeset
    40
supports a broad range of proof styles, both readable and unreadable ones.
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    41
12879
wenzelm
parents: 12621
diff changeset
    42
\medskip The Isabelle/Isar framework is generic and should work reasonably
wenzelm
parents: 12621
diff changeset
    43
well for any Isabelle object-logic that conforms to the natural deduction view
wenzelm
parents: 12621
diff changeset
    44
of the Isabelle/Pure framework.  Major Isabelle logics like HOL
wenzelm
parents: 12621
diff changeset
    45
\cite{isabelle-HOL}, HOLCF \cite{MuellerNvOS99}, FOL \cite{isabelle-logics},
wenzelm
parents: 12621
diff changeset
    46
and ZF \cite{isabelle-ZF} have already been set up for end-users.
wenzelm
parents: 12621
diff changeset
    47
Nonetheless, much of the existing body of theories still consist of old-style
wenzelm
parents: 12621
diff changeset
    48
theory files with accompanied ML code for proof scripts; this legacy will be
wenzelm
parents: 12621
diff changeset
    49
gradually converted in due time.
12618
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    50
43a97a2155d0 first stage of major update;
wenzelm
parents: 11041
diff changeset
    51
7167
wenzelm
parents: 7046
diff changeset
    52
\section{Quick start}
wenzelm
parents: 7046
diff changeset
    53
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    54
\subsection{Terminal sessions}
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    55
12879
wenzelm
parents: 12621
diff changeset
    56
Isar is already part of Isabelle.  The low-level \texttt{isabelle} binary
wenzelm
parents: 12621
diff changeset
    57
provides option \texttt{-I} to run the Isabelle/Isar interaction loop at
wenzelm
parents: 12621
diff changeset
    58
startup, rather than the raw ML top-level.  So the most basic way to do
wenzelm
parents: 12621
diff changeset
    59
anything with Isabelle/Isar is as follows:
7175
wenzelm
parents: 7167
diff changeset
    60
\begin{ttbox}
wenzelm
parents: 7167
diff changeset
    61
isabelle -I HOL\medskip
12879
wenzelm
parents: 12621
diff changeset
    62
\out{> Welcome to Isabelle/HOL (Isabelle2002)}\medskip
7175
wenzelm
parents: 7167
diff changeset
    63
theory Foo = Main:
7297
wenzelm
parents: 7175
diff changeset
    64
constdefs foo :: nat  "foo == 1";
wenzelm
parents: 7175
diff changeset
    65
lemma "0 < foo" by (simp add: foo_def);
7175
wenzelm
parents: 7167
diff changeset
    66
end
wenzelm
parents: 7167
diff changeset
    67
\end{ttbox}
9233
8c8399b9ecaa removed "help";
wenzelm
parents: 8843
diff changeset
    68
Note that any Isabelle/Isar command may be retracted by \texttt{undo}.  See
10160
wenzelm
parents: 10110
diff changeset
    69
the Isabelle/Isar Quick Reference (appendix~\ref{ap:refcard}) for a
10110
7d6e03a1f11e fixed ref;
wenzelm
parents: 9849
diff changeset
    70
comprehensive overview of available commands and other language elements.
7175
wenzelm
parents: 7167
diff changeset
    71
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    72
8843
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
    73
\subsection{Proof~General}
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    74
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    75
Plain TTY-based interaction as above used to be quite feasible with
8547
wenzelm
parents: 8516
diff changeset
    76
traditional tactic based theorem proving, but developing Isar documents really
12879
wenzelm
parents: 12621
diff changeset
    77
demands some better user-interface support.  The Proof~General environment by
wenzelm
parents: 12621
diff changeset
    78
David Aspinall \cite{proofgeneral,Aspinall:TACAS:2000} offers a generic Emacs
wenzelm
parents: 12621
diff changeset
    79
interface for interactive theorem provers that organizes all the cut-and-paste
wenzelm
parents: 12621
diff changeset
    80
and forward-backward walk through the text in a very neat way.  In
wenzelm
parents: 12621
diff changeset
    81
Isabelle/Isar, the current position within a partial proof document is equally
wenzelm
parents: 12621
diff changeset
    82
important than the actual proof state.  Thus Proof~General provides the
wenzelm
parents: 12621
diff changeset
    83
canonical working environment for Isabelle/Isar, both for getting acquainted
wenzelm
parents: 12621
diff changeset
    84
(e.g.\ by replaying existing Isar documents) and for production work.
7175
wenzelm
parents: 7167
diff changeset
    85
8843
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
    86
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
    87
\subsubsection{Proof~General as default Isabelle interface}
7167
wenzelm
parents: 7046
diff changeset
    88
12879
wenzelm
parents: 12621
diff changeset
    89
The Isabelle interface wrapper script provides an easy way to invoke
wenzelm
parents: 12621
diff changeset
    90
Proof~General (and XEmacs or GNU Emacs).  The default configuration of
wenzelm
parents: 12621
diff changeset
    91
Isabelle is smart enough to detect the Proof~General distribution in several
wenzelm
parents: 12621
diff changeset
    92
canonical places (e.g.\ \texttt{\$ISABELLE_HOME/contrib/ProofGeneral}).  Thus
wenzelm
parents: 12621
diff changeset
    93
the capital \texttt{Isabelle} executable would already refer to the
9849
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
    94
\texttt{ProofGeneral/isar} interface without further ado.\footnote{There is
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
    95
  also a \texttt{ProofGeneral/isa} interface for old tactic scripts written in
12879
wenzelm
parents: 12621
diff changeset
    96
  ML.} The Isabelle interface script provides several options; pass \verb,-?,
wenzelm
parents: 12621
diff changeset
    97
to see its usage.
7981
wenzelm
parents: 7895
diff changeset
    98
7175
wenzelm
parents: 7167
diff changeset
    99
With the proper Isabelle interface setup, Isar documents may now be edited by
wenzelm
parents: 7167
diff changeset
   100
visiting appropriate theory files, e.g.\ 
wenzelm
parents: 7167
diff changeset
   101
\begin{ttbox}
12879
wenzelm
parents: 12621
diff changeset
   102
Isabelle \({\langle}isabellehome{\rangle}\)/src/HOL/Isar_examples/Summation.thy
7175
wenzelm
parents: 7167
diff changeset
   103
\end{ttbox}
12879
wenzelm
parents: 12621
diff changeset
   104
Users may note the tool bar for navigating forward and backward through the
wenzelm
parents: 12621
diff changeset
   105
text (this depends on the local Emacs installation).  Consult the
wenzelm
parents: 12621
diff changeset
   106
Proof~General documentation \cite{proofgeneral} for further basic command
wenzelm
parents: 12621
diff changeset
   107
sequences, in particular ``\texttt{C-c C-return}'' and ``\texttt{C-c u}''.
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
   108
9849
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   109
\medskip
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   110
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   111
Proof~General may be also configured manually by giving Isabelle settings like
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   112
this (see also \cite{isabelle-sys}):
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   113
\begin{ttbox}
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   114
ISABELLE_INTERFACE=\$ISABELLE_HOME/contrib/ProofGeneral/isar/interface
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   115
PROOFGENERAL_OPTIONS=""
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   116
\end{ttbox}
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   117
You may have to change \texttt{\$ISABELLE_HOME/contrib/ProofGeneral} to the
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   118
actual installation directory of Proof~General.
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   119
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   120
\medskip
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   121
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   122
Apart from the Isabelle command line, defaults for interface options may be
12879
wenzelm
parents: 12621
diff changeset
   123
given by the \texttt{PROOFGENERAL_OPTIONS} setting.  For example, the Emacs
wenzelm
parents: 12621
diff changeset
   124
executable to be used may be configured in Isabelle's settings like this:
9849
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   125
\begin{ttbox}
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   126
PROOFGENERAL_OPTIONS="-p xemacs-nomule"  
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   127
\end{ttbox}
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   128
12879
wenzelm
parents: 12621
diff changeset
   129
Occasionally, a user's \verb,~/.emacs, file contains code that is incompatible
wenzelm
parents: 12621
diff changeset
   130
with the (X)Emacs version used by Proof~General, causing the interface startup
wenzelm
parents: 12621
diff changeset
   131
to fail prematurely.  Here the \texttt{-u false} option helps to get the
wenzelm
parents: 12621
diff changeset
   132
interface process up and running.  Note that additional Lisp customization
wenzelm
parents: 12621
diff changeset
   133
code may reside in \texttt{proofgeneral-settings.el} of
wenzelm
parents: 12621
diff changeset
   134
\texttt{\$ISABELLE_HOME/etc} or \texttt{\$ISABELLE_HOME_USER/etc}.
9849
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   135
8843
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
   136
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
   137
\subsubsection{The X-Symbol package}
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
   138
12879
wenzelm
parents: 12621
diff changeset
   139
Proof~General provides native support for the Emacs X-Symbol package
wenzelm
parents: 12621
diff changeset
   140
\cite{x-symbol}, which handles proper mathematical symbols displayed on
wenzelm
parents: 12621
diff changeset
   141
screen.  Pass option \texttt{-x true} to the Isabelle interface script, or
wenzelm
parents: 12621
diff changeset
   142
check the appropriate Proof~General menu setting by hand.  In any case, the
wenzelm
parents: 12621
diff changeset
   143
X-Symbol package must have been properly installed already.
8516
f5f6a97ee43f simplified setup;
wenzelm
parents: 8508
diff changeset
   144
8843
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
   145
Contrary to what you may expect from the documentation of X-Symbol, the
9849
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   146
package is very easy to install and configures itself automatically.  The
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   147
default configuration of Isabelle is smart enough to detect the X-Symbol
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   148
package in several canonical places (e.g.\ 
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   149
\texttt{\$ISABELLE_HOME/contrib/x-symbol}).
8843
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
   150
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
   151
\medskip
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
   152
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
   153
Using proper mathematical symbols in Isabelle theories can be very convenient
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
   154
for readability of large formulas.  On the other hand, the plain ASCII sources
10160
wenzelm
parents: 10110
diff changeset
   155
easily become somewhat unintelligible.  For example, $\Longrightarrow$ would
9849
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   156
appear as \verb,\<Longrightarrow>, according the default set of Isabelle
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   157
symbols.  Nevertheless, the Isabelle document preparation system (see
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   158
\S\ref{sec:document-prep}) will be happy to print non-ASCII symbols properly.
71ad08ad2cf0 simplified PG/X-Symbol intro;
wenzelm
parents: 9604
diff changeset
   159
It is even possible to invent additional notation beyond the display
12879
wenzelm
parents: 12621
diff changeset
   160
capabilities of Emacs and X-Symbol.
7175
wenzelm
parents: 7167
diff changeset
   161
7981
wenzelm
parents: 7895
diff changeset
   162
wenzelm
parents: 7895
diff changeset
   163
\section{Isabelle/Isar theories}
wenzelm
parents: 7895
diff changeset
   164
8547
wenzelm
parents: 8516
diff changeset
   165
Isabelle/Isar offers the following main improvements over classic Isabelle.
7981
wenzelm
parents: 7895
diff changeset
   166
\begin{enumerate}
wenzelm
parents: 7895
diff changeset
   167
\item A new \emph{theory format}, occasionally referred to as ``new-style
wenzelm
parents: 7895
diff changeset
   168
  theories'', supporting interactive development and unlimited undo operation.
wenzelm
parents: 7895
diff changeset
   169
\item A \emph{formal proof document language} designed to support intelligible
wenzelm
parents: 7895
diff changeset
   170
  semi-automated reasoning.  Instead of putting together unreadable tactic
wenzelm
parents: 7895
diff changeset
   171
  scripts, the author is enabled to express the reasoning in way that is close
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
   172
  to usual mathematical practice.
8547
wenzelm
parents: 8516
diff changeset
   173
\item A simple document preparation system, for typesetting formal
wenzelm
parents: 8516
diff changeset
   174
  developments together with informal text.  The resulting hyper-linked PDF
wenzelm
parents: 8516
diff changeset
   175
  documents are equally well suited for WWW presentation and as printed
wenzelm
parents: 8516
diff changeset
   176
  copies.
7981
wenzelm
parents: 7895
diff changeset
   177
\end{enumerate}
wenzelm
parents: 7895
diff changeset
   178
wenzelm
parents: 7895
diff changeset
   179
The Isar proof language is embedded into the new theory format as a proper
wenzelm
parents: 7895
diff changeset
   180
sub-language.  Proof mode is entered by stating some $\THEOREMNAME$ or
wenzelm
parents: 7895
diff changeset
   181
$\LEMMANAME$ at the theory level, and left again with the final conclusion
12879
wenzelm
parents: 12621
diff changeset
   182
(e.g.\ via $\QEDNAME$).  A few theory specification mechanisms also require
wenzelm
parents: 12621
diff changeset
   183
some proof, such as HOL's $\isarkeyword{typedef}$ which demands non-emptiness
wenzelm
parents: 12621
diff changeset
   184
of the representing sets.
7460
wenzelm
parents: 7335
diff changeset
   185
7981
wenzelm
parents: 7895
diff changeset
   186
New-style theory files may still be associated with separate ML files
wenzelm
parents: 7895
diff changeset
   187
consisting of plain old tactic scripts.  There is no longer any ML binding
wenzelm
parents: 7895
diff changeset
   188
generated for the theory and theorems, though.  ML functions \texttt{theory},
wenzelm
parents: 7895
diff changeset
   189
\texttt{thm}, and \texttt{thms} retrieve this information \cite{isabelle-ref}.
wenzelm
parents: 7895
diff changeset
   190
Nevertheless, migration between classic Isabelle and Isabelle/Isar is
wenzelm
parents: 7895
diff changeset
   191
relatively easy.  Thus users may start to benefit from interactive theory
8547
wenzelm
parents: 8516
diff changeset
   192
development and document preparation, even before they have any idea of the
wenzelm
parents: 8516
diff changeset
   193
Isar proof language at all.
7981
wenzelm
parents: 7895
diff changeset
   194
wenzelm
parents: 7895
diff changeset
   195
\begin{warn}
12879
wenzelm
parents: 12621
diff changeset
   196
  Proof~General does \emph{not} support mixed interactive development of
wenzelm
parents: 12621
diff changeset
   197
  classic Isabelle theory files or tactic scripts, together with Isar
wenzelm
parents: 12621
diff changeset
   198
  documents.  The ``\texttt{isa}'' and ``\texttt{isar}'' versions of
7981
wenzelm
parents: 7895
diff changeset
   199
  Proof~General are handled as two different theorem proving systems, only one
wenzelm
parents: 7895
diff changeset
   200
  of these may be active at the same time.
wenzelm
parents: 7895
diff changeset
   201
\end{warn}
wenzelm
parents: 7895
diff changeset
   202
12879
wenzelm
parents: 12621
diff changeset
   203
Manual conversion of existing tactic scripts may be done by running two
wenzelm
parents: 12621
diff changeset
   204
separate Proof~General sessions, one for replaying the old script and the
wenzelm
parents: 12621
diff changeset
   205
other for the emerging Isabelle/Isar document.  Also note that Isar supports
wenzelm
parents: 12621
diff changeset
   206
emulation commands and methods that support traditional tactic scripts within
wenzelm
parents: 12621
diff changeset
   207
new-style theories, see appendix~\ref{ap:conv} for more information.
7981
wenzelm
parents: 7895
diff changeset
   208
7167
wenzelm
parents: 7046
diff changeset
   209
8843
5370a030dd47 improved X-Symbol stuff;
wenzelm
parents: 8684
diff changeset
   210
\subsection{Document preparation}\label{sec:document-prep}
8684
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   211
12879
wenzelm
parents: 12621
diff changeset
   212
Isabelle/Isar provides a simple document preparation system based on existing
wenzelm
parents: 12621
diff changeset
   213
PDF-\LaTeX technology, with full support of hyper-links (both local references
wenzelm
parents: 12621
diff changeset
   214
and URLs), bookmarks, and thumbnails.  Thus the results are equally well
wenzelm
parents: 12621
diff changeset
   215
suited for WWW browsing and as printed copies.
8684
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   216
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   217
\medskip
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   218
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   219
Isabelle generates {\LaTeX} output as part of the run of a \emph{logic
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   220
  session} (see also \cite{isabelle-sys}).  Getting started with a working
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   221
configuration for common situations is quite easy by using the Isabelle
12879
wenzelm
parents: 12621
diff changeset
   222
\texttt{mkdir} and \texttt{make} tools.  First invoke
8684
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   223
\begin{ttbox}
12879
wenzelm
parents: 12621
diff changeset
   224
  isatool mkdir Foo
8684
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   225
\end{ttbox}
12879
wenzelm
parents: 12621
diff changeset
   226
to initialize a separate directory for session \texttt{Foo} --- it is safe to
wenzelm
parents: 12621
diff changeset
   227
experiment, since \texttt{isatool mkdir} never overwrites existing files.
wenzelm
parents: 12621
diff changeset
   228
Ensure that \texttt{Foo/ROOT.ML} holds ML commands to load all theories
wenzelm
parents: 12621
diff changeset
   229
required for this session; furthermore \texttt{Foo/document/root.tex} should
wenzelm
parents: 12621
diff changeset
   230
include any special {\LaTeX} macro packages required for your document (the
wenzelm
parents: 12621
diff changeset
   231
default is usually sufficient as a start).
8684
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   232
12879
wenzelm
parents: 12621
diff changeset
   233
The session is controlled by a separate \texttt{IsaMakefile} (with crude
wenzelm
parents: 12621
diff changeset
   234
source dependencies by default).  This file is located one level up from the
wenzelm
parents: 12621
diff changeset
   235
\texttt{Foo} directory location.  Now invoke
8684
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   236
\begin{ttbox}
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   237
  isatool make Foo
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   238
\end{ttbox}
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   239
to run the \texttt{Foo} session, with browser information and document
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   240
preparation enabled.  Unless any errors are reported by Isabelle or {\LaTeX},
12879
wenzelm
parents: 12621
diff changeset
   241
the output will appear inside the directory \texttt{ISABELLE_BROWSER_INFO}, as
wenzelm
parents: 12621
diff changeset
   242
reported by the batch job in verbose mode.
8684
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   243
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   244
\medskip
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   245
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   246
You may also consider to tune the \texttt{usedir} options in
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   247
\texttt{IsaMakefile}, for example to change the output format from
12879
wenzelm
parents: 12621
diff changeset
   248
\texttt{pdf} to \texttt{dvi}, or activate the \texttt{-D generated} option in
wenzelm
parents: 12621
diff changeset
   249
order to keep a second copy of the generated {\LaTeX} sources.
8684
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   250
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   251
\medskip
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   252
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   253
See \emph{The Isabelle System Manual} \cite{isabelle-sys} for further details
12879
wenzelm
parents: 12621
diff changeset
   254
on Isabelle logic sessions and theory presentation.  The Isabelle/HOL tutorial
wenzelm
parents: 12621
diff changeset
   255
\cite{isabelle-hol-book} also covers theory presentation issues.
8684
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   256
dfe444b748aa improved document preparation;
wenzelm
parents: 8547
diff changeset
   257
10160
wenzelm
parents: 10110
diff changeset
   258
\subsection{How to write Isar proofs anyway?}\label{sec:isar-howto}
7167
wenzelm
parents: 7046
diff changeset
   259
12879
wenzelm
parents: 12621
diff changeset
   260
This is one of the key questions, of course.  First of all, the tactic script
wenzelm
parents: 12621
diff changeset
   261
emulation of Isabelle/Isar essentially provides a clarified version of the
wenzelm
parents: 12621
diff changeset
   262
very same unstructured proof style of classic Isabelle.  Old-time users should
wenzelm
parents: 12621
diff changeset
   263
quickly become acquainted with that (degenerative) view of Isar at the least.
12621
48cafea0684b next round of updates;
wenzelm
parents: 12618
diff changeset
   264
12879
wenzelm
parents: 12621
diff changeset
   265
Writing \emph{proper} Isar proof texts targeted at human readers is quite
wenzelm
parents: 12621
diff changeset
   266
different, though.  Experienced users of the unstructured style may even have
wenzelm
parents: 12621
diff changeset
   267
to unlearn some of their habits to master proof composition in Isar.  In
wenzelm
parents: 12621
diff changeset
   268
contrast, new users with less experience in old-style tactical proving, but a
wenzelm
parents: 12621
diff changeset
   269
good understanding of mathematical proof in general often get started easier.
7297
wenzelm
parents: 7175
diff changeset
   270
12879
wenzelm
parents: 12621
diff changeset
   271
\medskip The present text really is only a reference manual on Isabelle/Isar,
wenzelm
parents: 12621
diff changeset
   272
not a tutorial.  Nevertheless, we will attempt to give some clues of how the
wenzelm
parents: 12621
diff changeset
   273
concepts introduced here may be put into practice.  Appendix~\ref{ap:refcard}
wenzelm
parents: 12621
diff changeset
   274
provides a quick reference card of the most common Isabelle/Isar language
wenzelm
parents: 12621
diff changeset
   275
elements.  Appendix~\ref{ap:conv} offers some practical hints on converting
wenzelm
parents: 12621
diff changeset
   276
existing Isabelle theories and proof scripts to the new format (without
wenzelm
parents: 12621
diff changeset
   277
restructuring proofs).
10160
wenzelm
parents: 10110
diff changeset
   278
12879
wenzelm
parents: 12621
diff changeset
   279
Further issues concerning the Isar concepts are covered in the literature
wenzelm
parents: 12621
diff changeset
   280
\cite{Wenzel:1999:TPHOL,Wiedijk:2000:MV,Bauer-Wenzel:2000:HB,Bauer-Wenzel:2001}.
wenzelm
parents: 12621
diff changeset
   281
The author's PhD thesis \cite{Wenzel-PhD} presently provides the most complete
wenzelm
parents: 12621
diff changeset
   282
exposition of Isar foundations, techniques, and applications.  A number of
wenzelm
parents: 12621
diff changeset
   283
example applications are distributed with Isabelle, and available via the
wenzelm
parents: 12621
diff changeset
   284
Isabelle WWW library (e.g.\ \url{http://isabelle.in.tum.de/library/}).  As a
wenzelm
parents: 12621
diff changeset
   285
general rule of thumb, more recent Isabelle applications that also include a
wenzelm
parents: 12621
diff changeset
   286
separate ``document'' (in PDF) are more likely to consist of proper
wenzelm
parents: 12621
diff changeset
   287
Isabelle/Isar theories and proofs.
7836
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   288
12879
wenzelm
parents: 12621
diff changeset
   289
%FIXME
wenzelm
parents: 12621
diff changeset
   290
% The following examples may be of particular interest.  Apart from the plain
wenzelm
parents: 12621
diff changeset
   291
% sources represented in HTML, these Isabelle sessions also provide actual
wenzelm
parents: 12621
diff changeset
   292
% documents (in PDF).
wenzelm
parents: 12621
diff changeset
   293
% \begin{itemize}
wenzelm
parents: 12621
diff changeset
   294
% \item \url{http://isabelle.in.tum.de/library/HOL/Isar_examples/} is a
wenzelm
parents: 12621
diff changeset
   295
%   collection of introductory examples.
wenzelm
parents: 12621
diff changeset
   296
% \item \url{http://isabelle.in.tum.de/library/HOL/Lattice/} is an example of
wenzelm
parents: 12621
diff changeset
   297
%   typical mathematics-style reasoning in ``axiomatic'' structures.
wenzelm
parents: 12621
diff changeset
   298
% \item \url{http://isabelle.in.tum.de/library/HOL/HOL-Real/HahnBanach/} is a
wenzelm
parents: 12621
diff changeset
   299
%   big mathematics application on infinitary vector spaces and functional
wenzelm
parents: 12621
diff changeset
   300
%   analysis.
wenzelm
parents: 12621
diff changeset
   301
% \item \url{http://isabelle.in.tum.de/library/HOL/Lambda/} develops fundamental
wenzelm
parents: 12621
diff changeset
   302
%   properties of $\lambda$-calculus (Church-Rosser and termination).
10993
883248dcf3f8 added Unix example;
wenzelm
parents: 10160
diff changeset
   303
  
12879
wenzelm
parents: 12621
diff changeset
   304
%   This may serve as a realistic example of porting of legacy proof scripts
wenzelm
parents: 12621
diff changeset
   305
%   into Isar tactic emulation scripts.
wenzelm
parents: 12621
diff changeset
   306
% \item \url{http://isabelle.in.tum.de/library/HOL/Unix/} gives a mathematical
wenzelm
parents: 12621
diff changeset
   307
%   model of the main aspects of the Unix file-system including its security
wenzelm
parents: 12621
diff changeset
   308
%   model, but ignoring processes.  A few odd effects caused by the general
wenzelm
parents: 12621
diff changeset
   309
%   ``worse-is-better'' approach followed in Unix are discussed within the
wenzelm
parents: 12621
diff changeset
   310
%   formal model.
10993
883248dcf3f8 added Unix example;
wenzelm
parents: 10160
diff changeset
   311
  
12879
wenzelm
parents: 12621
diff changeset
   312
%   This example represents a non-trivial verification task, with all proofs
wenzelm
parents: 12621
diff changeset
   313
%   carefully worked out using the proper part of the Isar proof language;
wenzelm
parents: 12621
diff changeset
   314
%   unstructured scripts are only used for symbolic evaluation.
wenzelm
parents: 12621
diff changeset
   315
% \item \url{http://isabelle.in.tum.de/library/HOL/MicroJava/} is a
wenzelm
parents: 12621
diff changeset
   316
%   formalization of a fragment of Java, together with a corresponding virtual
wenzelm
parents: 12621
diff changeset
   317
%   machine and a specification of its bytecode verifier and a lightweight
wenzelm
parents: 12621
diff changeset
   318
%   bytecode verifier, including proofs of type-safety.
10993
883248dcf3f8 added Unix example;
wenzelm
parents: 10160
diff changeset
   319
  
12879
wenzelm
parents: 12621
diff changeset
   320
%   This represents a very ``realistic'' example of large formalizations
wenzelm
parents: 12621
diff changeset
   321
%   performed in form of tactic emulation scripts and proper Isar proof texts.
wenzelm
parents: 12621
diff changeset
   322
% \end{itemize}
8547
wenzelm
parents: 8516
diff changeset
   323
7167
wenzelm
parents: 7046
diff changeset
   324
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   325
%%% Local Variables: 
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   326
%%% mode: latex
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   327
%%% TeX-master: "isar-ref"
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   328
%%% End: