doc-src/IsarRef/intro.tex
author wenzelm
Thu, 21 Oct 1999 17:42:21 +0200
changeset 7895 7c492d8bc8e3
parent 7875 1baf422ec16a
child 7981 5120a2a15d06
permissions -rw-r--r--
updated;
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
7175
wenzelm
parents: 7167
diff changeset
     6
Isar is already part of Isabelle (as of version Isabelle99, or later).  The
wenzelm
parents: 7167
diff changeset
     7
\texttt{isabelle} binary provides option \texttt{-I} to run the Isar
wenzelm
parents: 7167
diff changeset
     8
interaction loop at startup, rather than the plain ML top-level.  Thus the
wenzelm
parents: 7167
diff changeset
     9
quickest way to do anything with Isabelle/Isar is as follows:
wenzelm
parents: 7167
diff changeset
    10
\begin{ttbox}
wenzelm
parents: 7167
diff changeset
    11
isabelle -I HOL\medskip
wenzelm
parents: 7167
diff changeset
    12
\out{> Welcome to Isabelle/HOL (Isabelle99)}\medskip
wenzelm
parents: 7167
diff changeset
    13
theory Foo = Main:
7297
wenzelm
parents: 7175
diff changeset
    14
constdefs foo :: nat  "foo == 1";
wenzelm
parents: 7175
diff changeset
    15
lemma "0 < foo" by (simp add: foo_def);
7175
wenzelm
parents: 7167
diff changeset
    16
end
wenzelm
parents: 7167
diff changeset
    17
\end{ttbox}
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    18
Note that any Isabelle/Isar command may be retracted by \texttt{undo}; the
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    19
\texttt{help} command prints the list of available language elements.
7175
wenzelm
parents: 7167
diff changeset
    20
wenzelm
parents: 7167
diff changeset
    21
Plain TTY-based interaction like this used to be quite feasible with
wenzelm
parents: 7167
diff changeset
    22
traditional tactic based theorem proving, but developing Isar documents
7297
wenzelm
parents: 7175
diff changeset
    23
demands some better user-interface support.  \emph{Proof~General}\index{Proof
wenzelm
parents: 7175
diff changeset
    24
  General} of LFCS Edinburgh \cite{proofgeneral} offers a generic Emacs-based
wenzelm
parents: 7175
diff changeset
    25
environment for interactive theorem provers that does all the cut-and-paste
wenzelm
parents: 7175
diff changeset
    26
and forward-backward walk through the document in a very neat way.  Note that
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    27
in Isabelle/Isar, the current position within a partial proof document is
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    28
equally important than the actual proof state.  Thus Proof~General provides
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    29
the canonical working environment for Isabelle/Isar, both for getting
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    30
acquainted (e.g.\ by replaying existing Isar documents) and real production
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    31
work.
7175
wenzelm
parents: 7167
diff changeset
    32
wenzelm
parents: 7167
diff changeset
    33
\medskip
7167
wenzelm
parents: 7046
diff changeset
    34
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7297
diff changeset
    35
The easiest way to use Proof~General is to make it the default Isabelle user
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    36
interface.  Just put something like this into your Isabelle settings file (see
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    37
also \cite{isabelle-sys}):
7175
wenzelm
parents: 7167
diff changeset
    38
\begin{ttbox}
wenzelm
parents: 7167
diff changeset
    39
ISABELLE_INTERFACE=\$ISABELLE_HOME/contrib/ProofGeneral/isar/interface
7875
1baf422ec16a PROOFGENERAL_OPTIONS="-u false";
wenzelm
parents: 7836
diff changeset
    40
PROOFGENERAL_OPTIONS="-u false"
7175
wenzelm
parents: 7167
diff changeset
    41
\end{ttbox}
wenzelm
parents: 7167
diff changeset
    42
You may have to change \texttt{\$ISABELLE_HOME/contrib/ProofGeneral} to the
7335
abba35b98892 draft release;
wenzelm
parents: 7315
diff changeset
    43
actual installation directory of Proof~General.  From now on, the capital
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7297
diff changeset
    44
\texttt{Isabelle} executable refers to the \texttt{ProofGeneral/isar}
7335
abba35b98892 draft release;
wenzelm
parents: 7315
diff changeset
    45
interface.  Its usage is as follows:
7175
wenzelm
parents: 7167
diff changeset
    46
\begin{ttbox}
wenzelm
parents: 7167
diff changeset
    47
Usage: interface [OPTIONS] [FILES ...]
wenzelm
parents: 7167
diff changeset
    48
7460
wenzelm
parents: 7335
diff changeset
    49
  Options are:
wenzelm
parents: 7335
diff changeset
    50
    -l NAME      logic image name (default $ISABELLE_LOGIC=HOL)
wenzelm
parents: 7335
diff changeset
    51
    -p NAME      Emacs program name (default xemacs)
wenzelm
parents: 7335
diff changeset
    52
    -u BOOL      use .emacs file (default true)
wenzelm
parents: 7335
diff changeset
    53
    -w BOOL      use window system (default true)
7175
wenzelm
parents: 7167
diff changeset
    54
7460
wenzelm
parents: 7335
diff changeset
    55
  Starts Proof General for Isabelle/Isar with proof documents FILES
wenzelm
parents: 7335
diff changeset
    56
  (default Scratch.thy).
wenzelm
parents: 7335
diff changeset
    57
wenzelm
parents: 7335
diff changeset
    58
  PROOFGENERAL_OPTIONS=
7508
wenzelm
parents: 7466
diff changeset
    59
\end{ttbox} %$
7335
abba35b98892 draft release;
wenzelm
parents: 7315
diff changeset
    60
Apart from the command line, the defaults for these options may be overridden
abba35b98892 draft release;
wenzelm
parents: 7315
diff changeset
    61
via the \texttt{PROOFGENERAL_OPTIONS} setting as well.  For example, plain GNU
7460
wenzelm
parents: 7335
diff changeset
    62
Emacs may be configured as follows:
7175
wenzelm
parents: 7167
diff changeset
    63
\begin{ttbox}
7460
wenzelm
parents: 7335
diff changeset
    64
PROOFGENERAL_OPTIONS="-p emacs"
7175
wenzelm
parents: 7167
diff changeset
    65
\end{ttbox}
wenzelm
parents: 7167
diff changeset
    66
wenzelm
parents: 7167
diff changeset
    67
With the proper Isabelle interface setup, Isar documents may now be edited by
wenzelm
parents: 7167
diff changeset
    68
visiting appropriate theory files, e.g.\ 
wenzelm
parents: 7167
diff changeset
    69
\begin{ttbox}
wenzelm
parents: 7167
diff changeset
    70
Isabelle \({\langle}isabellehome{\rangle}\)/src/HOL/Isar_examples/BasicLogic.thy
wenzelm
parents: 7167
diff changeset
    71
\end{ttbox}
7315
76a39a3784b5 checkpoint;
wenzelm
parents: 7297
diff changeset
    72
Users of XEmacs may note the tool bar for navigating forward and backward
7297
wenzelm
parents: 7175
diff changeset
    73
through the text.  Consult the Proof~General documentation \cite{proofgeneral}
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    74
for further basic command sequences, like ``\texttt{c-c return}'' or
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    75
``\texttt{c-c u}''.
7175
wenzelm
parents: 7167
diff changeset
    76
7460
wenzelm
parents: 7335
diff changeset
    77
\medskip
wenzelm
parents: 7335
diff changeset
    78
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    79
Occasionally, a user's \texttt{.emacs} file contains material that is
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    80
incompatible with the version of (X)Emacs that Proof~General prefers.  Then
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    81
proper startup may be still achieved by using the \texttt{-u false}
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    82
option.\footnote{Any Emacs lisp file \texttt{proofgeneral-settings.el}
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    83
  occurring in \texttt{\$ISABELLE_HOME/etc} or
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    84
  \texttt{\$ISABELLE_HOME_USER/etc} is automatically loaded by the
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    85
  Proof~General interface script as well.}
7167
wenzelm
parents: 7046
diff changeset
    86
wenzelm
parents: 7046
diff changeset
    87
\section{How to write Isar proofs anyway?}
wenzelm
parents: 7046
diff changeset
    88
7297
wenzelm
parents: 7175
diff changeset
    89
This is one of the key questions, of course.  Isar offers a rather different
wenzelm
parents: 7175
diff changeset
    90
approach to formal proof documents than plain old tactic scripts.  Experienced
wenzelm
parents: 7175
diff changeset
    91
users of existing interactive theorem proving systems may have to learn
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    92
thinking differently in order to make effective use of Isabelle/Isar.  On the
7297
wenzelm
parents: 7175
diff changeset
    93
other hand, Isabelle/Isar comes much closer to existing mathematical practice
wenzelm
parents: 7175
diff changeset
    94
of formal proof, so users with less experience in old-style tactical proving,
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
    95
but a good understanding of mathematical proof, might cope with Isar even
7297
wenzelm
parents: 7175
diff changeset
    96
better.
wenzelm
parents: 7175
diff changeset
    97
7836
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
    98
This document really is a \emph{reference manual}.  Nevertheless, we will give
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
    99
some discussions of the general principles underlying Isar in
7297
wenzelm
parents: 7175
diff changeset
   100
chapter~\ref{ch:basics}, and provide some clues of how these may be put into
wenzelm
parents: 7175
diff changeset
   101
practice.  Some more background information on Isar is given in
7836
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   102
\cite{Wenzel:1999:TPHOL}.  While there is no proper tutorial on Isabelle/Isar
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   103
available yet, there are several examples distributed with Isabelle.  See
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   104
\texttt{HOL/Isar_examples} and \texttt{HOL/HOL-Real/HahnBanach} in the
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   105
Isabelle library:
7175
wenzelm
parents: 7167
diff changeset
   106
7836
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   107
\begin{center}\small
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   108
  \begin{tabular}{l}
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   109
    \url{http://www.cl.cam.ac.uk/Research/HVG/Isabelle/library/} \\
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   110
    \url{http://isabelle.in.tum.de/library/} \\
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   111
  \end{tabular}
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   112
\end{center}
7a9270282fd3 a4paper;
wenzelm
parents: 7532
diff changeset
   113
7895
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
   114
Apart from browsable HTML sources, both Isabelle/Isar sessions also provide
7c492d8bc8e3 updated;
wenzelm
parents: 7875
diff changeset
   115
actual documents (in PDF).
7167
wenzelm
parents: 7046
diff changeset
   116
7046
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   117
%%% Local Variables: 
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   118
%%% mode: latex
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   119
%%% TeX-master: "isar-ref"
9f755ff43cff skeleton only;
wenzelm
parents:
diff changeset
   120
%%% End: