doc-src/Ref/introduction.tex
author lcp
Tue, 12 Jul 1994 18:05:03 +0200
changeset 467 92868dab2939
parent 332 01b87a921967
child 508 d8b6999ca364
permissions -rw-r--r--
new cardinal arithmetic developments
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     1
%% $Id$
286
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
     2
\chapter{Basic Use of Isabelle}\index{sessions|(} 
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
     3
The Reference Manual is a comprehensive description of Isabelle, including
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
     4
all commands, functions and packages.  It really is intended for reference,
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
     5
perhaps for browsing, but not for reading through.  It is not a tutorial,
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
     6
but assumes familiarity with the basic concepts of Isabelle.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     7
286
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
     8
When you are looking for a way of performing some task, scan the Table of
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
     9
Contents for a relevant heading.  Functions are organized by their purpose,
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
    10
by their operands (subgoals, tactics, theorems), and by their usefulness.
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
    11
In each section, basic functions appear first, then advanced functions, and
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    12
finally esoteric functions.  Use the Index when you are looking for the
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    13
definition of a particular Isabelle function.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    14
286
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
    15
A few examples are presented.  Many examples files are distributed with
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
    16
Isabelle, however; please experiment interactively.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    17
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    18
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    19
\section{Basic interaction with Isabelle}
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    20
\index{saving your work|bold}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    21
Isabelle provides no means of storing theorems or proofs on files.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    22
Theorems are simply part of the \ML{} state and are named by \ML{}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    23
identifiers.  To save your work between sessions, you must save a copy of
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    24
the \ML{} image.  The procedure for doing so is compiler-dependent:
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    25
\begin{itemize}\index{Poly/{\ML} compiler}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    26
\item At the end of a session, Poly/\ML{} saves the state, provided you
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    27
  have created a database for your own use.  You can create a database by
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    28
  copying an existing one, or by calling the Poly/\ML{} function {\tt
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    29
    make_database}; the latter course uses much less disc space.  A
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    30
  Poly/\ML{} database {\em does not\/} save the contents of references,
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    31
  such as the current state of a backward proof.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    32
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    33
\item With New Jersey \ML{} you must save the state explicitly before
149
caa7a52ff46f corrected trivial typo;
wenzelm
parents: 141
diff changeset
    34
ending the session.  While a Poly/\ML{} database can be small, a New Jersey
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    35
image occupies several megabytes.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    36
\end{itemize}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    37
See your \ML{} compiler's documentation for full instructions on saving the
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    38
state.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    39
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    40
Saving the state is not enough.  Record, on a file, the top-level commands
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    41
that generate your theories and proofs.  Such a record allows you to replay
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    42
the proofs whenever required, for instance after making minor changes to
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    43
the axioms.  Ideally, your record will be intelligible to others as a
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    44
formal description of your work.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    45
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    46
Since Isabelle's user interface is the \ML{} top level, some kind of window
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    47
support is essential.  One window displays the Isabelle session, while the
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    48
other displays a file --- your proof record --- being edited.  The Emacs
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    49
editor supports windows and can manage interactive sessions.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    50
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    51
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    52
\section{Ending a session}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    53
\begin{ttbox} 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    54
quit     : unit -> unit
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    55
commit   : unit -> unit \hfill{\bf Poly/ML only}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    56
exportML : string -> bool \hfill{\bf New Jersey ML only}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    57
\end{ttbox}
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    58
\begin{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    59
\item[\ttindexbold{quit}();]  
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    60
aborts the Isabelle session, without saving the state.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    61
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    62
\item[\ttindexbold{commit}();] 
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    63
  saves the current state in your Poly/\ML{} database without ending the
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    64
  session.  The contents of references are lost, so never do this during an
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    65
  interactive proof!\index{Poly/{\ML} compiler}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    66
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    67
\item[\ttindexbold{exportML} "{\it file}";]  saves an
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    68
image of your session to the given {\it file}.
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    69
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    70
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    71
\begin{warn}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    72
Typing control-D also finishes the session, but its effect is
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    73
compiler-dependent.  Poly/\ML{} will then save the state, if you have a
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    74
private database.  New Jersey \ML{} will discard the state!
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    75
\end{warn}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    76
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    77
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    78
\section{Reading ML files}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    79
\index{files!reading}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    80
\begin{ttbox} 
138
9ba8bff1addc added chapter "Defining Theories" and made changes for new Readthy functions
clasohm
parents: 104
diff changeset
    81
cd              : string -> unit
9ba8bff1addc added chapter "Defining Theories" and made changes for new Readthy functions
clasohm
parents: 104
diff changeset
    82
use             : string -> unit
9ba8bff1addc added chapter "Defining Theories" and made changes for new Readthy functions
clasohm
parents: 104
diff changeset
    83
time_use        : string -> unit
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    84
\end{ttbox}
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    85
Section~\ref{LoadingTheories} describes commands for loading theory files.
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    86
\begin{ttdescription}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    87
\item[\ttindexbold{cd} "{\it dir}";]
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    88
  changes the current directory to {\it dir}.  This is the default directory
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    89
  for reading files and for writing temporary files.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    90
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    91
\item[\ttindexbold{use} "$file$";]  
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    92
reads the given {\it file} as input to the \ML{} session.  Reading a file
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    93
of Isabelle commands is the usual way of replaying a proof.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    94
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    95
\item[\ttindexbold{time_use} "$file$";]  
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    96
performs {\tt use~"$file$"} and prints the total execution time.
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
    97
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    98
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    99
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   100
\section{Printing of terms and theorems}
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   101
\index{printing control|(}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   102
Isabelle's pretty printer is controlled by a number of parameters.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   103
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   104
\subsection{Printing limits}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   105
\begin{ttbox} 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   106
Pretty.setdepth  : int -> unit
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   107
Pretty.setmargin : int -> unit
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   108
print_depth      : int -> unit
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   109
\end{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   110
These set limits for terminal output.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   111
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   112
\begin{ttdescription}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   113
\item[\ttindexbold{Pretty.setdepth} \(d\);]  
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   114
  tells Isabelle's pretty printer to limit the printing depth to~$d$.  This
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   115
  affects Isabelle's display of theorems and terms.  The default value
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   116
  is~0, which permits printing to an arbitrary depth.  Useful values for
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   117
  $d$ are~10 and~20.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   118
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   119
\item[\ttindexbold{Pretty.setmargin} \(m\);]  
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   120
  tells Isabelle's pretty printer to assume a right margin (page width)
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   121
  of~$m$.  The initial margin is~80.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   122
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   123
\item[\ttindexbold{print_depth} \(n\);]  
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   124
  limits the printing depth of complex \ML{} values, such as theorems and
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   125
  terms.  This command affects the \ML{} top level and its effect is
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   126
  compiler-dependent.  Typically $n$ should be less than~10.
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   127
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   128
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   129
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   130
\subsection{Printing of hypotheses, types and sorts}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   131
\index{meta-assumptions!printing of}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   132
\index{types!printing of}\index{sorts!printing of}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   133
\begin{ttbox} 
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   134
show_hyps  : bool ref \hfill{\bf initially true}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   135
show_types : bool ref \hfill{\bf initially false}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   136
show_sorts : bool ref \hfill{\bf initially false}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   137
\end{ttbox}
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   138
These flags allow you to control how much information is displayed for
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   139
terms and theorems.  The hypotheses are normally shown; types and sorts are
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   140
not.  Displaying types and sorts may explain why a polymorphic inference
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   141
rule fails to resolve with some goal.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   142
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   143
\begin{ttdescription}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   144
\item[\ttindexbold{show_hyps} := false;]   
332
01b87a921967 final Springer copy
lcp
parents: 322
diff changeset
   145
makes Isabelle show each meta-level hypothesis as a dot.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   146
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   147
\item[\ttindexbold{show_types} := true;]
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   148
makes Isabelle show types when printing a term or theorem.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   149
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   150
\item[\ttindexbold{show_sorts} := true;]
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   151
makes Isabelle show the sorts of type variables.  It has no effect unless
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   152
{\tt show_types} is~{\tt true}. 
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   153
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   154
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   155
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   156
\subsection{$\eta$-contraction before printing}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   157
\begin{ttbox} 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   158
eta_contract: bool ref \hfill{\bf initially false}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   159
\end{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   160
The {\bf $\eta$-contraction law} asserts $(\lambda x.f(x))\equiv f$,
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   161
provided $x$ is not free in ~$f$.  It asserts {\bf extensionality} of
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   162
functions: $f\equiv g$ if $f(x)\equiv g(x)$ for all~$x$.  Higher-order
332
01b87a921967 final Springer copy
lcp
parents: 322
diff changeset
   163
unification frequently puts terms into a fully $\eta$-expanded form.  For
158
c2fcb6c07689 Correction to eta-contraction; thanks to Markus W.
lcp
parents: 149
diff changeset
   164
example, if $F$ has type $(\tau\To\tau)\To\tau$ then its expanded form is
c2fcb6c07689 Correction to eta-contraction; thanks to Markus W.
lcp
parents: 149
diff changeset
   165
$\lambda h.F(\lambda x.h(x))$.  By default, the user sees this expanded
c2fcb6c07689 Correction to eta-contraction; thanks to Markus W.
lcp
parents: 149
diff changeset
   166
form.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   167
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   168
\begin{ttdescription}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   169
\item[\ttindexbold{eta_contract} := true;]
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   170
makes Isabelle perform $\eta$-contractions before printing, so that
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   171
$\lambda h.F(\lambda x.h(x))$ appears simply as~$F$.  The
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   172
distinction between a term and its $\eta$-expanded form occasionally
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   173
matters.
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   174
\end{ttdescription}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   175
\index{printing control|)}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   176
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   177
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   178
\section{Displaying exceptions as error messages}
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   179
\index{exceptions!printing of}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   180
\begin{ttbox} 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   181
print_exn: exn -> 'a
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   182
\end{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   183
Certain Isabelle primitives, such as the forward proof functions {\tt RS}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   184
and {\tt RSN}, are called both interactively and from programs.  They
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   185
indicate errors not by printing messages, but by raising exceptions.  For
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   186
interactive use, \ML's reporting of an uncaught exception is 
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   187
uninformative.  The Poly/ML function {\tt exception_trace} can generate a
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   188
backtrace.\index{Poly/{\ML} compiler}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   189
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   190
\begin{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   191
\item[\ttindexbold{print_exn} $e$] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   192
displays the exception~$e$ in a readable manner, and then re-raises~$e$.
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   193
Typical usage is~\hbox{\tt $EXP$ handle e => print_exn e;}, where
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   194
$EXP$ is an expression that may raise an exception.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   195
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   196
{\tt print_exn} can display the following common exceptions, which concern
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   197
types, terms, theorems and theories, respectively.  Each carries a message
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   198
and related information.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   199
\begin{ttbox} 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   200
exception TYPE   of string * typ list * term list
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   201
exception TERM   of string * term list
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   202
exception THM    of string * int * thm list
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   203
exception THEORY of string * theory list
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   204
\end{ttbox}
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   205
\end{ttdescription}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   206
\begin{warn}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   207
  {\tt print_exn} prints terms by calling \ttindex{prin}, which obtains
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   208
  pretty printing information from the proof state last stored in the
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   209
  subgoal module.  The appearance of the output thus depends upon the
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   210
  theory used in the last interactive proof.
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   211
\end{warn}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   212
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   213
\section{Shell scripts}
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   214
\index{shell scripts|bold} The following files are distributed with
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   215
Isabelle, and work under Unix$^{\rm TM}$.  They can be executed as commands
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   216
to the Unix shell.  Some of them depend upon shell environment variables.
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   217
\begin{ttdescription}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   218
\item[make-all $switches$] \index{*make-all shell script}
286
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
   219
  compiles the Isabelle system, when executed on the source directory.
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
   220
  Environment variables specify which \ML{} compiler to use.  These
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
   221
  variables, and the {\it switches}, are documented on the file itself.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   222
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   223
\item[teeinput $program$] \index{*teeinput shell script}
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   224
  executes the {\it program}, while piping the standard input to a log file
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   225
  designated by the \verb|$LISTEN| environment variable.  Normally the
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   226
  program is Isabelle, and the log file receives a copy of all the Isabelle
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   227
  commands.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   228
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   229
\item[xlisten $program$] \index{*xlisten shell script}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   230
  is a trivial `user interface' for the X Window System.  It creates two
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   231
  windows using {\tt xterm}.  One executes an interactive session via
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   232
  \hbox{\tt teeinput $program$}, while the other displays the log file.  To
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   233
  make a proof record, simply paste lines from the log file into an editor
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   234
  window.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   235
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   236
\item[expandshort $files$]  \index{*expandshort shell script}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   237
  reads the {\it files\/} and replaces all occurrences of the shorthand
286
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
   238
  commands {\tt br}, {\tt be}, {\tt brs}, {\tt bes}, etc., with the
e7efbf03562b first draft of Springer book
lcp
parents: 159
diff changeset
   239
  corresponding full commands.  Shorthand commands should appear one
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   240
  per line.  The old versions of the files
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   241
  are renamed to have the suffix~\verb'~~'.
322
bacfaeeea007 penultimate Springer draft
lcp
parents: 286
diff changeset
   242
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   243
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   244
\index{sessions|)}