4 \chapter{The Isabelle system environment}
6 This manual describes Isabelle together with related tools and user interfaces
7 as seen from an outside (system oriented) view. See also the \emph{Isabelle
8 Reference Manual}~\cite{isabelle-ref} and the \emph{Isabelle Isar Reference
9 Manual}~\cite{isabelle-isar-ref} for the actual Isabelle commands and
12 \medskip The Isabelle system environment is based on a few general elements:
14 \item The \emph{Isabelle settings mechanism}, which provides environment
15 variables to all Isabelle programs (including tools and user interfaces).
16 \item \emph{Isabelle proper} (\ttindex{isabelle}), which invokes logic
17 sessions, both interactively or in batch mode. In particular,
18 \texttt{isabelle} abstracts over the invocation of the actual {\ML} system
20 \item The \emph{Isabelle tools wrapper} (\ttindex{isatool}), which provides a
21 generic startup platform for Isabelle related utilities. Thus tools
22 automatically benefit from the settings mechanism.
23 \item The \emph{Isabelle interface wrapper} (\ttindex{Isabelle}\footnote{Note
24 the capital \texttt{I}!}), which provides some abstraction over the actual
25 user interface to be used.
28 \medskip The beginning user would probably just run one of the interfaces (by
29 invoking the capital \texttt{Isabelle}), and maybe some basic tools like
30 \texttt{doc} (see \S\ref{sec:tool-doc}). This assumes that the system has
31 already been installed, of course.\footnote{In case you have to do this
32 yourself, see the \ttindex{INSTALL} file in the top-level directory of the
33 distribution of how to proceed. Some binary packages are available as
37 \section{Isabelle settings} \label{sec:settings}
39 The Isabelle system heavily depends on the \emph{settings
40 mechanism}\indexbold{settings}. Basically, this is a statically scoped
41 collection of environment variables, such as \texttt{ISABELLE_HOME},
42 \texttt{ML_SYSTEM}, \texttt{ML_HOME}. These variables are \emph{not} intended
43 to be set directly from the shell, though. Isabelle employs a somewhat more
44 sophisticated scheme of \emph{settings files} --- one for site-wide defaults,
45 another for additional user-specific modifications. With all configuration
46 variables in at most two places, this scheme is more maintainable and
47 user-friendly than plain shell environment variables.
49 In particular, we avoid the typical situation where prospective users of a
50 software package are told to put several things into their shell startup
51 scripts, before being able to actually run the program. Isabelle requires none
52 such administrative chores of its end-users --- the executables can be invoked
53 straight away.\footnote{Occasionally, users would still want to put the
54 Isabelle \texttt{bin} directory into their shell's search path, but this is
58 \subsection{Building the environment}
60 Whenever any of the Isabelle executables is run, their settings environment is
64 \item The special variable \settdx{ISABELLE_HOME} is determined automatically
65 from the location of the binary that has been run.
67 You should not try to set \texttt{ISABELLE_HOME} manually. Also note that
68 the Isabelle executables either have to be run from their original location
69 in the distribution directory, or via the executable objects created by the
70 \texttt{install} utility (see \S\ref{sec:tool-install}). Just doing a plain
71 copy of the \texttt{bin} files will not work!
73 \item The file \texttt{\$ISABELLE_HOME/etc/settings} ist run as a shell script
74 with the auto-export option for variables enabled.
76 This file typically contains a rather long list of shell variable
77 assigments, thus providing the site-wide default settings. The Isabelle
78 distribution already contains a global settings file with sensible defaults
79 for most variables. When installing the system, only a few of these have to
80 be adapted (most likely \texttt{ML_SYSTEM} etc.).
82 \item The file \texttt{\$ISABELLE_HOME_USER/etc/settings} (if it exists) is
83 run in the same way as the site default settings. Note that the variable
84 \texttt{ISABELLE_HOME_USER} has already been set before --- usually to
85 \texttt{\~\relax/isabelle}.
87 Thus individual users may override the site-wide defaults. See also file
88 \texttt{etc/user-settings.sample} in the distribution. Typically, a user
89 settings file would contain only a few lines, just the assigments that are
90 really changed. One should definitely \emph{not} start with a full copy the
91 basic \texttt{\$ISABELLE_HOME/etc/settings}. This could cause very annoying
92 maintainance problems later, when the Isabelle installation is updated or
97 Note that settings files are actually full GNU bash scripts. So one may use
98 complex shell commands, such as \texttt{if} or \texttt{case} statements to set
99 variables depending on the system architecture or other environment variables.
100 Such advanced features should be added only with great care, though. In
101 particular, external environment references should be kept at a minimum.
103 \medskip A few variables are somewhat special:
105 \item \settdx{ISABELLE} and \settdx{ISATOOL} are set automatically to
106 the absolute path names of the \texttt{isabelle} and
107 \texttt{isatool} executables, respectively.
109 \item \settdx{ISABELLE_OUTPUT} will has the {\ML} system identifier (according
110 to \texttt{ML_IDENTIFIER}) automatically appended to its value.
113 \medskip The Isabelle settings scheme is basically simple, but non-trivial.
114 For debugging purposes, the resulting environment may be inspected with the
115 \texttt{getenv} utility, see \S\ref{sec:tool-getenv}.
118 \subsection{Common variables}
120 This is a reference of common Isabelle settings variables. Note that the list
121 is somewhat open-ended. Third-party utilities or interfaces may add their own
122 selection. Variables that are special in some sense are marked with *.
125 \item[\settdx{ISABELLE_HOME}*] is the location of the top-level Isabelle
126 distribution directory. This is automatically determined from the Isabelle
127 executable that has been invoked. Do not try to set \texttt{ISABELLE_HOME}
128 yourself from the shell.
130 \item[\settdx{ISABELLE_HOME_USER}] is the user-specific counterpart of
131 \texttt{ISABELLE_HOME}. The default value is \texttt{\~\relax/isabelle},
132 under rare circumstances this may be changed in the global setting file.
133 Typically, the \texttt{ISABELLE_HOME_USER} directory mimics
134 \texttt{ISABELLE_HOME} to some extend. In particular, site-wide defaults may
135 be overridden by a private \texttt{etc/settings}.
137 \item[\settdx{ISABELLE}*, \settdx{ISATOOL}*] are automatically set to the full
138 path names of the \texttt{isabelle} and \texttt{isatool} executables,
139 respectively. Thus other tools and scripts need not assume that the
140 Isabelle \texttt{bin} directory is on the current search path of the shell.
142 \item[\settdx{ML_SYSTEM}, \settdx{ML_HOME}, \settdx{ML_OPTIONS},
143 \settdx{ML_PLATFORM}, \settdx{ML_IDENTIFIER}*] specify the underlying {\ML}
144 system to be used for Isabelle. There is only a fixed set of admissable
145 \texttt{ML_SYSTEM} names (see the \texttt{etc/settings} file of the
148 The actual compiler binary will be run from the directory \texttt{ML_HOME},
149 with \texttt{ML_OPTIONS} as first arguments on the command line. The
150 optional \texttt{ML_PLATFORM} may specify the binary format of ML heap
151 images, which is useful for cross-platform installations. The value of
152 \texttt{ML_IDENTIFIER} is automatically obtained by composing the
153 \texttt{ML_SYSTEM} and \texttt{ML_PLATFORM} values.
155 \item[\settdx{ISABELLE_PATH}] is a list of directories (separated by colons)
156 where Isabelle logic images may reside. When looking up heaps files, the
157 value of \texttt{ML_IDENTIFIER} is appended to each component internally.
159 \item[\settdx{ISABELLE_OUTPUT}*] is a directory where output heap files should
160 be stored by default. The \texttt{ML_SYSTEM} identifier is appended here,
163 \item[\settdx{ISABELLE_BROWSER_INFO}] is the directory where theory browser
164 information (HTML text, graph data, and printable documents) is stored (see
165 also \S\ref{sec:info}). The default value is
166 \texttt{\$ISABELLE_HOME_USER/browser_info}.
168 \item[\settdx{ISABELLE_LOGIC}] specifies the default logic to load if none is
169 given explicitely by the user. The default value is \texttt{HOL}.
171 \item[\settdx{ISABELLE_USEDIR_OPTIONS}] is implicitly prefixed to the command
172 line of any \texttt{isatool usedir} invocation (see also
173 \S\ref{sec:tool-usedir}). This typically contains compilation options for
174 object-logics --- \texttt{usedir} is the basic utility for managing logic
175 sessions (cf.\ the \texttt{IsaMakefile}s in the distribution).
177 \item[\settdx{ISABELLE_LATEX}, \settdx{ISABELLE_PDFLATEX},
178 \settdx{ISABELLE_BIBTEX}, \settdx{ISABELLE_DVIPS}] refer to {\LaTeX} related
179 tools for Isabelle document preparation (see also \S\ref{sec:tool-latex}).
181 \item[\settdx{ISABELLE_TOOLS}] is a colon separated list of directories that
182 are scanned by \texttt{isatool} for external utility programs (see also
183 \S\ref{sec:isatool}).
185 \item[\settdx{ISABELLE_DOCS}] is a colon separated list of directories with
188 \item[\settdx{DVI_VIEWER}] specifies the command to be used for displaying
191 \item[\settdx{ISABELLE_INSTALL_FONTS}] determines the way that the Isabelle
192 symbol fonts are installed into your currently running X11 display server.
193 X11 fonts are a subtle issue, see \S\ref{sec:tool-installfonts} for more
196 \item[\settdx{ISABELLE_TMP_PREFIX}] is the prefix from which any running
197 \texttt{isabelle} process derives an individual directory for temporary
198 files. The default is somewhere in \texttt{/tmp}.
200 \item[\settdx{ISABELLE_INTERFACE}] is an identifier that specifies the actual
201 user interface that the capital \texttt{Isabelle} should invoke. See
202 \S\ref{sec:interface} for more details.
207 \section{Isabelle proper --- \texttt{isabelle}}
209 The \ttindex{isabelle} executable runs bare-bones logic sessions --- either
210 interactively or in batch mode. It provides an abstraction over the underlying
211 {\ML} system, and over the actual heap file locations. Its usage is:
213 Usage: isabelle [OPTIONS] [INPUT] [OUTPUT]
216 -C tell ML system to copy output image
217 -I startup Isar interaction mode
218 -P startup Proof General interaction mode
219 -c tell ML system to compress output image
220 -e MLTEXT pass MLTEXT to the ML session
221 -m MODE add print mode for output
222 -q non-interactive session
223 -r open heap file read-only
224 -u pass 'use"ROOT.ML";' to the ML session
225 -w reset write permissions on OUTPUT
227 INPUT (default "\$ISABELLE_LOGIC") and OUTPUT specify in/out heaps.
228 These are either names to be searched in the Isabelle path, or
229 actual file names (containing at least one /).
230 If INPUT is "RAW_ML_SYSTEM", just start the bare bones ML system.
232 Input files without path specifications are looked up in the
233 \texttt{ISABELLE_PATH} setting, which may consist of multiple components
234 separated by colons --- these are tried in the given order with the value of
235 \texttt{ML_IDENTIFIER} appended internally. In a similar way, base names are
236 relative to the directory specified by \texttt{ISABELLE_OUTPUT}. In any case,
237 actual file locations may also be given by including at least one slash
238 (\texttt{/}) in the name (hint: use \texttt{./} to refer to the current
242 \subsection*{Options}
244 If the input heap file does not have write permission bits set, or the
245 \texttt{-r} option is given explicitely, then the session started will be
246 read-only. That is, the {\ML} world cannot be committed back into the logic
247 image. Otherwise, a writable session enables commits into either the input
248 file, or into an alternative output heap file (in case that is given as the
249 second argument on the command line).
251 The read-write state of sessions is determined at startup only, it cannot be
252 changed intermediately. Also note that heap images may require considerable
253 amounts of disk space. Users are responsible themselves to dispose their heap
254 files when they are no longer needed.
256 \medskip The \texttt{-w} option makes the output heap file read-only after
257 terminating. Thus subsequent invocations cause the logic image to be
258 read-only automatically.
260 \medskip The \texttt{-c} option tells the underlying ML system to compress the
261 output heap (fully transparently). On Poly/ML for example, the image is
262 garbage collected and all values maximally shared, resulting in up to 50\%
263 less disk space consumption.
265 \medskip The \texttt{-C} option tells the ML system to produce a completely
266 self-contained output image, probably including a copy of the ML runtime
269 \medskip Using the \texttt{-e} option, arbitrary {\ML} code may be passed to
270 the Isabelle session from the command line. Multiple \texttt{-e}'s are
271 evaluated in the given order. Strange things may happen when errorneous {\ML}
272 code is provided. Also make sure that the {\ML} commands are terminated
273 properly by semicolon.
275 \medskip The \texttt{-u} option is a shortcut for \texttt{-e}, passing
276 ``\texttt{use"ROOT.ML";}'' to the {\ML} session.
278 \medskip The \texttt{-m} option adds identifiers of print modes to be made
279 active for this session. Typically, this is used by some user interface, e.g.\
280 to enable output of mathematical symbols from a special screen font.
282 \medskip Isabelle normally enters an interactive top-level loop (after
283 processing the \texttt{-e} texts). The \texttt{-q} option inhibits
284 interaction, thus providing a pure batch mode facility.
286 \medskip The \texttt{-I} option makes Isabelle enter Isar interaction mode on
287 startup, instead of the primitive {\ML} top-level. The \texttt{-P} option
288 configures the top-level loop for interaction with the Proof~General user
289 interface; do not enable this in ordinary sessions.
292 \subsection*{Examples}
294 Run an interactive session of the default object-logic (as specified
295 by the \texttt{ISABELLE_LOGIC} setting) like this:
299 Usually \texttt{ISABELLE_LOGIC} refers to one of the standard logic
300 images, which are read-only by default. A writable session --- based
301 on \texttt{FOL}, but output to \texttt{Foo} (in the directory
302 specified by the \texttt{ISABELLE_OUTPUT} setting) --- may be invoked
307 Ending this session normally (e.g.\ by typing control-D) dumps the
308 whole {\ML} system state into \texttt{Foo}. Be prepared for several
311 The \texttt{Foo} session may be continued later (still in writable
316 A read-only \texttt{Foo} session may be started by:
321 \medskip Note that manual session management like this does \emph{not} provide
322 proper setup for theory presentation. This would require the \texttt{usedir}
323 utility, see \S\ref{sec:tool-usedir}.
325 \bigskip The next example demonstrates batch execution of Isabelle. We print a
326 certain theorem of \texttt{FOL}:
328 isabelle -e "prth allE;" -q -r FOL
330 Note that the output text will be interspersed with additional junk messages
331 by the {\ML} runtime environment.
334 \section{The Isabelle tools wrapper --- \texttt{isatool}} \label{sec:isatool}
336 All Isabelle related utilities are called via a common wrapper ---
339 Usage: isatool TOOL [ARGS ...]
341 Start Isabelle utility program TOOL with ARGS. Pass "-?" to TOOL
342 for more specific help.
346 browser - Isabelle graph browser
347 doc - view Isabelle documentation
350 Basically, Isabelle tools are ordinary executable scripts. These are run
351 within the same Isabelle settings environment, see \S\ref{sec:settings}. The
352 set of available tools is collected by \texttt{isatool} from the directories
353 listed in the \texttt{ISABELLE_TOOLS} setting. Do not try to call the scripts
354 directly. Neither should you add the tool directories to your shell's search
358 \section{The Isabelle interface wrapper --- \texttt{Isabelle}} \label{sec:interface}
360 Isabelle is a generic theorem prover, even w.r.t.\ its user interface. The
361 \ttindex{Isabelle} command (note the capital \texttt{I}) provides a uniform
362 way for end-users to invoke a certain interface; which one to start actually
363 is determined by the \settdx{ISABELLE_INTERFACE} setting variable. Also note
364 that the \texttt{install} utility provides some options to install desktop
365 environment icons as well (see \S\ref{sec:tool-install}).
367 An interface may be specified either by giving an identifier that the Isabelle
368 distribution knows about, or by specifying an actual path name (containing a
369 slash ``\texttt{/}'') of some executable. Currently, the following interfaces
373 \item \texttt{none} is just a pass-through to plain \texttt{isabelle}. Thus
374 \texttt{Isabelle} basically becomes an alias for \texttt{isabelle}.
376 \item \texttt{xterm} refers to a simple \textsl{xterm} based interface which
377 is part of the Isabelle distribution.
379 \item \texttt{emacs} refers to David Aspinall's \emph{Isamode}\index{user
380 interface!Isamode} for emacs. Isabelle just provides a wrapper for this,
381 the actual Isamode distribution is available elsewhere \cite{isamode}.
383 \item Proof~General~\cite{proofgeneral}\index{user interface!Proof General} is
384 distributed with separate interface wrapper scripts for Isabelle. See below
388 The factory default for \texttt{ISABELLE_INTERFACE} is \texttt{xterm}. This
389 interface runs \texttt{isabelle} within its own \textsl{xterm} window.
390 Usually, display of mathematical symbols from the Isabelle font is enabled as
391 well (see \S\ref{sec:tool-installfonts} for X11 font configuration issues).
392 Furthermore, different kinds of identifiers in logical terms are highlighted
393 appropriately, e.g.\ free variables in bold and bound variables underlined.
394 There are some more options available, just pass ``\texttt{-?}'' to get the
397 \medskip Proof~General\index{user interface!Proof General} is a much more
398 advanced interface. It supports both classic Isabelle (as
399 \texttt{ProofGeneral/isa}) and Isabelle/Isar (as \texttt{ProofGeneral/isar}).
400 Note that the latter is inherently more robust.
402 Using the Isabelle interface wrapper scripts as provided by Proof~General, a
403 typical setup for Isabelle/Isar would be like this:
405 ISABELLE_INTERFACE=\$ISABELLE_HOME/contrib/ProofGeneral/isar/interface
406 PROOFGENERAL_OPTIONS="-u false"
408 Thus \texttt{Isabelle} would automatically invoke Emacs with proper setup of
409 the Proof~General Lisp packages. There are some options available, such as
410 \texttt{-l} for passing the logic image to be used.
412 \medskip Note that the world may be also seen the other way round: Emacs may
413 be started first (with proper setup of Proof~General mode), and
414 \texttt{isabelle} run from within. This requires further Emacs Lisp
415 configuration, see the Proof~General documentation \cite{proofgeneral} for
420 %%% TeX-master: "system"