doc-src/IsarRef/intro.tex
author wenzelm
Fri, 17 Mar 2000 22:52:29 +0100
changeset 8511 72188cd6bbfc
parent 8508 76d8d8aab881
child 8516 f5f6a97ee43f
permissions -rw-r--r--
tuned; some more stuff;
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
7167
wenzelm
parents: 7046
diff changeset
     4
\section{Quick start}
wenzelm
parents: 7046
diff changeset
     5
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
     6
\subsection{Terminal sessions}
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
     7
7175
wenzelm
parents: 7167
diff changeset
     8
Isar is already part of Isabelle (as of version Isabelle99, or later).  The
wenzelm
parents: 7167
diff changeset
     9
\texttt{isabelle} binary provides option \texttt{-I} to run the Isar
wenzelm
parents: 7167
diff changeset
    10
interaction loop at startup, rather than the plain ML top-level.  Thus the
wenzelm
parents: 7167
diff changeset
    11
quickest way to do anything with Isabelle/Isar is as follows:
wenzelm
parents: 7167
diff changeset
    12
\begin{ttbox}
wenzelm
parents: 7167
diff changeset
    13
isabelle -I HOL\medskip
wenzelm
parents: 7167
diff changeset
    14
\out{> Welcome to Isabelle/HOL (Isabelle99)}\medskip
wenzelm
parents: 7167
diff changeset
    15
theory Foo = Main:
7297
wenzelm
parents: 7175
diff changeset
    16
constdefs foo :: nat  "foo == 1";
wenzelm
parents: 7175
diff changeset
    17
lemma "0 < foo" by (simp add: foo_def);
7175
wenzelm
parents: 7167
diff changeset
    18
end
wenzelm
parents: 7167
diff changeset
    19
\end{ttbox}
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    20
Note that any Isabelle/Isar command may be retracted by \texttt{undo}; the
7981
wenzelm
parents: 7895
diff changeset
    21
\texttt{help} command prints a list of available language elements.
7175
wenzelm
parents: 7167
diff changeset
    22
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    23
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    24
\subsection{The Proof~General interface}
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    25
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    26
Plain TTY-based interaction as above used to be quite feasible with
7175
wenzelm
parents: 7167
diff changeset
    27
traditional tactic based theorem proving, but developing Isar documents
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    28
demands some better user-interface support.  David Aspinall's
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    29
\emph{Proof~General}\index{Proof General} environment
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    30
\cite{proofgeneral,Aspinall:TACAS:2000} offers a generic Emacs-based interface
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    31
for interactive theorem provers that does all the cut-and-paste and
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    32
forward-backward walk through the text in a very neat way.  In Isabelle/Isar,
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    33
the current position within a partial proof document is equally important than
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    34
the actual proof state.  Thus Proof~General provides the canonical working
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    35
environment for Isabelle/Isar, both for getting acquainted (e.g.\ by replaying
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    36
existing Isar documents) and real production work.
7175
wenzelm
parents: 7167
diff changeset
    37
wenzelm
parents: 7167
diff changeset
    38
\medskip
7167
wenzelm
parents: 7046
diff changeset
    39
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7297
diff changeset
    40
The easiest way to use Proof~General is to make it the default Isabelle user
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    41
interface (see also \cite{isabelle-sys}).  Just put something like this into
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    42
your Isabelle settings file:
7175
wenzelm
parents: 7167
diff changeset
    43
\begin{ttbox}
wenzelm
parents: 7167
diff changeset
    44
ISABELLE_INTERFACE=\$ISABELLE_HOME/contrib/ProofGeneral/isar/interface
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    45
PROOFGENERAL_OPTIONS=""
7175
wenzelm
parents: 7167
diff changeset
    46
\end{ttbox}
wenzelm
parents: 7167
diff changeset
    47
You may have to change \texttt{\$ISABELLE_HOME/contrib/ProofGeneral} to the
7335
abba35b98892 draft release;
wenzelm
parents: 7315
diff changeset
    48
actual installation directory of Proof~General.  From now on, the capital
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7297
diff changeset
    49
\texttt{Isabelle} executable refers to the \texttt{ProofGeneral/isar}
7981
wenzelm
parents: 7895
diff changeset
    50
interface.\footnote{There is also a \texttt{ProofGeneral/isa} interface, for
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    51
  classic Isabelle tactic scripts.}
7175
wenzelm
parents: 7167
diff changeset
    52
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    53
%FIXME remove?
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    54
%Its usage is as follows:
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    55
%\begin{ttbox}
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    56
%Usage: interface [OPTIONS] [FILES ...]
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    57
%
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    58
%  Options are:
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    59
%    -l NAME      logic image name (default $ISABELLE_LOGIC=HOL)
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    60
%    -p NAME      Emacs program name (default xemacs)
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    61
%    -u BOOL      use .emacs file (default true)
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    62
%    -w BOOL      use window system (default true)
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    63
%    -x BOOL      enable x-symbol package
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    64
%  Starts Proof General for Isabelle/Isar with proof documents FILES
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    65
%  (default Scratch.thy).
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    66
%
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    67
%  PROOFGENERAL_OPTIONS=
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    68
%\end{ttbox} %$
7460
wenzelm
parents: 7335
diff changeset
    69
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    70
The interface script provides several options (pass ``\texttt{-?}'' to see its
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    71
usage).  Apart from the command line, the defaults for these options may be
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    72
overridden via the \texttt{PROOFGENERAL_OPTIONS} setting as well.  For
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    73
example, plain GNU Emacs instead of XEmacs (which is the default) may be
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    74
configured in Isabelle's settings via \texttt{PROOFGENERAL_OPTIONS="-p
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    75
  emacs"}.
7175
wenzelm
parents: 7167
diff changeset
    76
7981
wenzelm
parents: 7895
diff changeset
    77
Occasionally, a user's \texttt{.emacs} file contains material that is
wenzelm
parents: 7895
diff changeset
    78
incompatible with the version of (X)Emacs that Proof~General prefers.  Then
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    79
proper startup may be still achieved by using the \texttt{-u false} option.
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    80
Also note that any Emacs lisp file \texttt{proofgeneral-settings.el} occurring
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    81
in \texttt{\$ISABELLE_HOME/etc} or \texttt{\$ISABELLE_HOME_USER/etc} is
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    82
automatically loaded by the Proof~General interface script as well.
7981
wenzelm
parents: 7895
diff changeset
    83
wenzelm
parents: 7895
diff changeset
    84
\medskip
wenzelm
parents: 7895
diff changeset
    85
7175
wenzelm
parents: 7167
diff changeset
    86
With the proper Isabelle interface setup, Isar documents may now be edited by
wenzelm
parents: 7167
diff changeset
    87
visiting appropriate theory files, e.g.\ 
wenzelm
parents: 7167
diff changeset
    88
\begin{ttbox}
wenzelm
parents: 7167
diff changeset
    89
Isabelle \({\langle}isabellehome{\rangle}\)/src/HOL/Isar_examples/BasicLogic.thy
wenzelm
parents: 7167
diff changeset
    90
\end{ttbox}
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7297
diff changeset
    91
Users of XEmacs may note the tool bar for navigating forward and backward
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    92
through the text.  Consult the Proof~General documentation
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    93
\cite{proofgeneral,Aspinall:TACAS:2000} for further basic command sequences,
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    94
such as ``\texttt{c-c return}'' or ``\texttt{c-c u}''.
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    95
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    96
\medskip
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    97
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    98
Proof~General also supports the Emacs X-Symbol package \cite{x-symbol}, which
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
    99
provides a nice way to get proper mathematical symbols displayed on screen.
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
   100
Just pass option \texttt{-x true} to the Isabelle interface script, or check
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
   101
the appropriate menu setting by hand.  In any case, the X-Symbol package
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
   102
already must have been properly installed.
7175
wenzelm
parents: 7167
diff changeset
   103
7981
wenzelm
parents: 7895
diff changeset
   104
wenzelm
parents: 7895
diff changeset
   105
\section{Isabelle/Isar theories}
wenzelm
parents: 7895
diff changeset
   106
wenzelm
parents: 7895
diff changeset
   107
Isabelle/Isar offers two main improvements over classic Isabelle:
wenzelm
parents: 7895
diff changeset
   108
\begin{enumerate}
wenzelm
parents: 7895
diff changeset
   109
\item A new \emph{theory format}, occasionally referred to as ``new-style
wenzelm
parents: 7895
diff changeset
   110
  theories'', supporting interactive development and unlimited undo operation.
wenzelm
parents: 7895
diff changeset
   111
\item A \emph{formal proof document language} designed to support intelligible
wenzelm
parents: 7895
diff changeset
   112
  semi-automated reasoning.  Instead of putting together unreadable tactic
wenzelm
parents: 7895
diff changeset
   113
  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
   114
  to usual mathematical practice.
7981
wenzelm
parents: 7895
diff changeset
   115
\end{enumerate}
wenzelm
parents: 7895
diff changeset
   116
wenzelm
parents: 7895
diff changeset
   117
The Isar proof language is embedded into the new theory format as a proper
wenzelm
parents: 7895
diff changeset
   118
sub-language.  Proof mode is entered by stating some $\THEOREMNAME$ or
wenzelm
parents: 7895
diff changeset
   119
$\LEMMANAME$ at the theory level, and left again with the final conclusion
wenzelm
parents: 7895
diff changeset
   120
(e.g.\ via $\QEDNAME$).  A few theory extension mechanisms require proof as
wenzelm
parents: 7895
diff changeset
   121
well, such as the HOL $\isarkeyword{typedef}$ which demands non-emptiness of
wenzelm
parents: 7895
diff changeset
   122
the representing sets.
7460
wenzelm
parents: 7335
diff changeset
   123
7981
wenzelm
parents: 7895
diff changeset
   124
New-style theory files may still be associated with separate ML files
wenzelm
parents: 7895
diff changeset
   125
consisting of plain old tactic scripts.  There is no longer any ML binding
wenzelm
parents: 7895
diff changeset
   126
generated for the theory and theorems, though.  ML functions \texttt{theory},
wenzelm
parents: 7895
diff changeset
   127
\texttt{thm}, and \texttt{thms} retrieve this information \cite{isabelle-ref}.
wenzelm
parents: 7895
diff changeset
   128
Nevertheless, migration between classic Isabelle and Isabelle/Isar is
wenzelm
parents: 7895
diff changeset
   129
relatively easy.  Thus users may start to benefit from interactive theory
wenzelm
parents: 7895
diff changeset
   130
development even before they have any idea of the Isar proof language at all.
wenzelm
parents: 7895
diff changeset
   131
wenzelm
parents: 7895
diff changeset
   132
\begin{warn}
wenzelm
parents: 7895
diff changeset
   133
  Currently Proof~General does \emph{not} support mixed interactive
wenzelm
parents: 7895
diff changeset
   134
  development of classic Isabelle theory files or tactic scripts, together
wenzelm
parents: 7895
diff changeset
   135
  with Isar documents.  The ``\texttt{isa}'' and ``\texttt{isar}'' versions of
wenzelm
parents: 7895
diff changeset
   136
  Proof~General are handled as two different theorem proving systems, only one
wenzelm
parents: 7895
diff changeset
   137
  of these may be active at the same time.
wenzelm
parents: 7895
diff changeset
   138
\end{warn}
wenzelm
parents: 7895
diff changeset
   139
wenzelm
parents: 7895
diff changeset
   140
Porting of existing tactic scripts is best done by running two separate
wenzelm
parents: 7895
diff changeset
   141
Proof~General sessions, one for replaying the old script and the other for the
wenzelm
parents: 7895
diff changeset
   142
emerging Isabelle/Isar document.
wenzelm
parents: 7895
diff changeset
   143
7167
wenzelm
parents: 7046
diff changeset
   144
wenzelm
parents: 7046
diff changeset
   145
\section{How to write Isar proofs anyway?}
wenzelm
parents: 7046
diff changeset
   146
7297
wenzelm
parents: 7175
diff changeset
   147
This is one of the key questions, of course.  Isar offers a rather different
wenzelm
parents: 7175
diff changeset
   148
approach to formal proof documents than plain old tactic scripts.  Experienced
wenzelm
parents: 7175
diff changeset
   149
users of existing interactive theorem proving systems may have to learn
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
   150
thinking differently in order to make effective use of Isabelle/Isar.  On the
7297
wenzelm
parents: 7175
diff changeset
   151
other hand, Isabelle/Isar comes much closer to existing mathematical practice
wenzelm
parents: 7175
diff changeset
   152
of formal proof, so users with less experience in old-style tactical proving,
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
   153
but a good understanding of mathematical proof, might cope with Isar even
7981
wenzelm
parents: 7895
diff changeset
   154
better.  See also \cite{Wenzel:1999:TPHOL} for further background information
wenzelm
parents: 7895
diff changeset
   155
on Isar.
7297
wenzelm
parents: 7175
diff changeset
   156
7981
wenzelm
parents: 7895
diff changeset
   157
\medskip This really is a \emph{reference manual}.  Nevertheless, we will also
wenzelm
parents: 7895
diff changeset
   158
give some clues of how the concepts introduced here may be put into practice.
wenzelm
parents: 7895
diff changeset
   159
Appendix~\ref{ap:refcard} provides a quick reference card of the most common
wenzelm
parents: 7895
diff changeset
   160
Isabelle/Isar language elements.  There are several examples distributed with
wenzelm
parents: 7895
diff changeset
   161
Isabelle, and available via the Isabelle WWW library:
7836
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   162
\begin{center}\small
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   163
  \begin{tabular}{l}
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   164
    \url{http://www.cl.cam.ac.uk/Research/HVG/Isabelle/library/} \\
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   165
    \url{http://isabelle.in.tum.de/library/} \\
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
   166
    \url{http://isabelle.in.tum.de/Isar/} \\
7836
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   167
  \end{tabular}
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   168
\end{center}
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   169
7987
wenzelm
parents: 7981
diff changeset
   170
See \texttt{HOL/Isar_examples} for a collection of introductory examples, and
7981
wenzelm
parents: 7895
diff changeset
   171
\texttt{HOL/HOL-Real/HahnBanach} is a big mathematics application.  Apart from
8508
76d8d8aab881 simplified Proof General setup;
wenzelm
parents: 7987
diff changeset
   172
plain HTML sources, these sessions also provide actual documents (in PDF).
7167
wenzelm
parents: 7046
diff changeset
   173
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   174
%%% Local Variables: 
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   175
%%% mode: latex
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   176
%%% TeX-master: "isar-ref"
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   177
%%% End: