3 \def\isabellecontext{Basics}%
12 \isacommand{theory}\isamarkupfalse%
14 \isakeyword{imports}\ Pure\isanewline
23 \isamarkupchapter{The Isabelle system environment%
27 \begin{isamarkuptext}%
28 This manual describes Isabelle together with related tools and user
29 interfaces as seen from an outside (system oriented) view. See also
30 the \emph{Isabelle/Isar Reference Manual}~\cite{isabelle-isar-ref}
31 and the \emph{Isabelle Reference Manual}~\cite{isabelle-ref} for the
32 actual Isabelle commands and related functions.
34 \medskip The Isabelle system environment emerges from a few general
39 \item The \emph{Isabelle settings} mechanism provides environment
40 variables to all Isabelle programs (including tools and user
43 \item The \emph{raw Isabelle process} (\indexref{}{executable}{isabelle-process}\hyperlink{executable.isabelle-process}{\mbox{\isa{\isatt{isabelle{\isacharminus}process}}}}) runs logic sessions either interactively or in
44 batch mode. In particular, this view abstracts over the invocation
45 of the actual ML system to be used. Regular users rarely need to
46 care about the low-level process.
48 \item The \emph{Isabelle tools wrapper} (\indexref{}{executable}{isabelle}\hyperlink{executable.isabelle}{\mbox{\isa{\isatt{isabelle}}}})
49 provides a generic startup environment Isabelle related utilities,
50 user interfaces etc. Such tools automatically benefit from the
53 \item The \emph{Isabelle interface wrapper} (\indexref{}{executable}{isabelle-interface}\hyperlink{executable.isabelle-interface}{\mbox{\isa{\isatt{isabelle{\isacharminus}interface}}}}) provides some abstraction over the actual
54 user interface to be used. The de-facto standard interface for
55 Isabelle is Proof~General \cite{proofgeneral}.
61 \isamarkupsection{Isabelle settings \label{sec:settings}%
65 \begin{isamarkuptext}%
66 The Isabelle system heavily depends on the \emph{settings
67 mechanism}\indexbold{settings}. Essentially, this is a statically
68 scoped collection of environment variables, such as \hyperlink{setting.ISABELLE-HOME}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME}}}}, \hyperlink{setting.ML-SYSTEM}{\mbox{\isa{\isatt{ML{\isacharunderscore}SYSTEM}}}}, \hyperlink{setting.ML-HOME}{\mbox{\isa{\isatt{ML{\isacharunderscore}HOME}}}}. These
69 variables are \emph{not} intended to be set directly from the shell,
70 though. Isabelle employs a somewhat more sophisticated scheme of
71 \emph{settings files} --- one for site-wide defaults, another for
72 additional user-specific modifications. With all configuration
73 variables in at most two places, this scheme is more maintainable
74 and user-friendly than global shell environment variables.
76 In particular, we avoid the typical situation where prospective
77 users of a software package are told to put several things into
78 their shell startup scripts, before being able to actually run the
79 program. Isabelle requires none such administrative chores of its
80 end-users --- the executables can be invoked straight away.
81 Occasionally, users would still want to put the \hyperlink{file.$ISABELLE-HOME/bin}{\mbox{\isa{\isatt{{\isachardollar}ISABELLE{\isacharunderscore}HOME{\isacharslash}bin}}}} directory into their shell's search path, but
82 this is not required.%
86 \isamarkupsubsection{Building the environment%
90 \begin{isamarkuptext}%
91 Whenever any of the Isabelle executables is run, their settings
92 environment is put together as follows.
96 \item The special variable \indexdef{}{setting}{ISABELLE\_HOME}\hypertarget{setting.ISABELLE-HOME}{\hyperlink{setting.ISABELLE-HOME}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME}}}}} is
97 determined automatically from the location of the binary that has
100 You should not try to set \hyperlink{setting.ISABELLE-HOME}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME}}}} manually. Also
101 note that the Isabelle executables either have to be run from their
102 original location in the distribution directory, or via the
103 executable objects created by the \hyperlink{tool.install}{\mbox{\isa{\isatt{install}}}} utility. Symbolic
104 links are admissible, but a plain copy of the \hyperlink{file.$ISABELLE-HOME/bin}{\mbox{\isa{\isatt{{\isachardollar}ISABELLE{\isacharunderscore}HOME{\isacharslash}bin}}}} files will not work!
106 \item The file \hyperlink{file.$ISABELLE-HOME/etc/settings}{\mbox{\isa{\isatt{{\isachardollar}ISABELLE{\isacharunderscore}HOME{\isacharslash}etc{\isacharslash}settings}}}} ist run as a
107 \indexref{}{executable}{bash}\hyperlink{executable.bash}{\mbox{\isa{\isatt{bash}}}} shell script with the auto-export option for
110 This file holds a rather long list of shell variable assigments,
111 thus providing the site-wide default settings. The Isabelle
112 distribution already contains a global settings file with sensible
113 defaults for most variables. When installing the system, only a few
114 of these may have to be adapted (probably \hyperlink{setting.ML-SYSTEM}{\mbox{\isa{\isatt{ML{\isacharunderscore}SYSTEM}}}}
117 \item The file \verb|$ISABELLE_HOME_USER/etc/settings| (if it
118 exists) is run in the same way as the site default settings. Note
119 that the variable \hyperlink{setting.ISABELLE-HOME-USER}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME{\isacharunderscore}USER}}}} has already been set
120 before --- usually to \verb|~/isabelle|.
122 Thus individual users may override the site-wide defaults. See also
123 file \hyperlink{file.$ISABELLE-HOME/etc/user-settings.sample}{\mbox{\isa{\isatt{{\isachardollar}ISABELLE{\isacharunderscore}HOME{\isacharslash}etc{\isacharslash}user{\isacharminus}settings{\isachardot}sample}}}} in the
124 distribution. Typically, a user settings file would contain only a
125 few lines, just the assigments that are really changed. One should
126 definitely \emph{not} start with a full copy the basic \hyperlink{file.$ISABELLE-HOME/etc/settings}{\mbox{\isa{\isatt{{\isachardollar}ISABELLE{\isacharunderscore}HOME{\isacharslash}etc{\isacharslash}settings}}}}. This could cause very annoying
127 maintainance problems later, when the Isabelle installation is
128 updated or changed otherwise.
132 Since settings files are regular GNU \indexdef{}{executable}{bash}\hypertarget{executable.bash}{\hyperlink{executable.bash}{\mbox{\isa{\isatt{bash}}}}} scripts,
133 one may use complex shell commands, such as \verb|if| or
134 \verb|case| statements to set variables depending on the
135 system architecture or other environment variables. Such advanced
136 features should be added only with great care, though. In
137 particular, external environment references should be kept at a
140 \medskip A few variables are somewhat special:
144 \item \indexdef{}{setting}{ISABELLE\_PROCESS}\hypertarget{setting.ISABELLE-PROCESS}{\hyperlink{setting.ISABELLE-PROCESS}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}PROCESS}}}}} and \indexdef{}{setting}{ISABELLE\_TOOL}\hypertarget{setting.ISABELLE-TOOL}{\hyperlink{setting.ISABELLE-TOOL}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}TOOL}}}}} are set
145 automatically to the absolute path names of the \hyperlink{executable.isabelle-process}{\mbox{\isa{\isatt{isabelle{\isacharminus}process}}}} and \hyperlink{executable.isabelle}{\mbox{\isa{\isatt{isabelle}}}} executables,
148 \item \indexref{}{setting}{ISABELLE\_OUTPUT}\hyperlink{setting.ISABELLE-OUTPUT}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}OUTPUT}}}} will have the identifiers of
149 the Isabelle distribution (cf.\ \hyperlink{setting.ISABELLE-IDENTIFIER}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}IDENTIFIER}}}}) and
150 the ML system (cf.\ \hyperlink{setting.ML-IDENTIFIER}{\mbox{\isa{\isatt{ML{\isacharunderscore}IDENTIFIER}}}}) appended automatically
155 \medskip Note that the settings environment may be inspected with
156 the Isabelle tool \hyperlink{tool.getenv}{\mbox{\isa{\isatt{getenv}}}}. This might help to figure out the
157 effect of complex settings scripts.%
161 \isamarkupsubsection{Common variables%
165 \begin{isamarkuptext}%
166 This is a reference of common Isabelle settings variables. Note that
167 the list is somewhat open-ended. Third-party utilities or interfaces
168 may add their own selection. Variables that are special in some
169 sense are marked with \isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}}.
173 \item[\indexdef{}{setting}{ISABELLE\_HOME}\hypertarget{setting.ISABELLE-HOME}{\hyperlink{setting.ISABELLE-HOME}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}}] is the
174 location of the top-level Isabelle distribution directory. This is
175 automatically determined from the Isabelle executable that has been
176 invoked. Do not attempt to set \hyperlink{setting.ISABELLE-HOME}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME}}}} yourself
179 \item[\indexdef{}{setting}{ISABELLE\_HOME\_USER}\hypertarget{setting.ISABELLE-HOME-USER}{\hyperlink{setting.ISABELLE-HOME-USER}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME{\isacharunderscore}USER}}}}}] is the user-specific
180 counterpart of \hyperlink{setting.ISABELLE-HOME}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME}}}}. The default value is
181 \verb|~/isabelle|, under rare circumstances this may be
182 changed in the global setting file. Typically, the \hyperlink{setting.ISABELLE-HOME-USER}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME{\isacharunderscore}USER}}}} directory mimics \hyperlink{setting.ISABELLE-HOME}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}HOME}}}} to
183 some extend. In particular, site-wide defaults may be overridden by
184 a private \verb|$ISABELLE_HOME_USER/etc/settings|.
186 \item[\indexdef{}{setting}{ISABELLE\_PROCESS}\hypertarget{setting.ISABELLE-PROCESS}{\hyperlink{setting.ISABELLE-PROCESS}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}PROCESS}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}}, \hyperlink{setting.ISABELLE-TOOL}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}TOOL}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}}] are automatically set to the full path
187 names of the \hyperlink{executable.isabelle-process}{\mbox{\isa{\isatt{isabelle{\isacharminus}process}}}} and \hyperlink{executable.isabelle}{\mbox{\isa{\isatt{isabelle}}}} executables, respectively. Thus other tools and scripts
188 need not assume that the \hyperlink{file.$ISABELLE-HOME/bin}{\mbox{\isa{\isatt{{\isachardollar}ISABELLE{\isacharunderscore}HOME{\isacharslash}bin}}}} directory is
189 on the current search path of the shell.
191 \item[\indexdef{}{setting}{ISABELLE\_IDENTIFIER}\hypertarget{setting.ISABELLE-IDENTIFIER}{\hyperlink{setting.ISABELLE-IDENTIFIER}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}IDENTIFIER}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}}] refers
192 to the name of this Isabelle distribution, e.g.\ ``\verb|Isabelle2008|''.
194 \item[\indexdef{}{setting}{ML\_SYSTEM}\hypertarget{setting.ML-SYSTEM}{\hyperlink{setting.ML-SYSTEM}{\mbox{\isa{\isatt{ML{\isacharunderscore}SYSTEM}}}}}, \indexdef{}{setting}{ML\_HOME}\hypertarget{setting.ML-HOME}{\hyperlink{setting.ML-HOME}{\mbox{\isa{\isatt{ML{\isacharunderscore}HOME}}}}},
195 \indexdef{}{setting}{ML\_OPTIONS}\hypertarget{setting.ML-OPTIONS}{\hyperlink{setting.ML-OPTIONS}{\mbox{\isa{\isatt{ML{\isacharunderscore}OPTIONS}}}}}, \indexdef{}{setting}{ML\_PLATFORM}\hypertarget{setting.ML-PLATFORM}{\hyperlink{setting.ML-PLATFORM}{\mbox{\isa{\isatt{ML{\isacharunderscore}PLATFORM}}}}}, \indexdef{}{setting}{ML\_IDENTIFIER}\hypertarget{setting.ML-IDENTIFIER}{\hyperlink{setting.ML-IDENTIFIER}{\mbox{\isa{\isatt{ML{\isacharunderscore}IDENTIFIER}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}}] specify the underlying ML system
196 to be used for Isabelle. There is only a fixed set of admissable
197 \hyperlink{setting.ML-SYSTEM}{\mbox{\isa{\isatt{ML{\isacharunderscore}SYSTEM}}}} names (see the \hyperlink{file.$ISABELLE-HOME/etc/settings}{\mbox{\isa{\isatt{{\isachardollar}ISABELLE{\isacharunderscore}HOME{\isacharslash}etc{\isacharslash}settings}}}} file of the distribution).
199 The actual compiler binary will be run from the directory \hyperlink{setting.ML-HOME}{\mbox{\isa{\isatt{ML{\isacharunderscore}HOME}}}}, with \hyperlink{setting.ML-OPTIONS}{\mbox{\isa{\isatt{ML{\isacharunderscore}OPTIONS}}}} as first arguments on the
200 command line. The optional \hyperlink{setting.ML-PLATFORM}{\mbox{\isa{\isatt{ML{\isacharunderscore}PLATFORM}}}} may specify the
201 binary format of ML heap images, which is useful for cross-platform
202 installations. The value of \hyperlink{setting.ML-IDENTIFIER}{\mbox{\isa{\isatt{ML{\isacharunderscore}IDENTIFIER}}}} is
203 automatically obtained by composing the values of \hyperlink{setting.ML-SYSTEM}{\mbox{\isa{\isatt{ML{\isacharunderscore}SYSTEM}}}}, \hyperlink{setting.ML-PLATFORM}{\mbox{\isa{\isatt{ML{\isacharunderscore}PLATFORM}}}} and the Isabelle version values.
205 \item[\indexdef{}{setting}{ISABELLE\_PATH}\hypertarget{setting.ISABELLE-PATH}{\hyperlink{setting.ISABELLE-PATH}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}PATH}}}}}] is a list of directories
206 (separated by colons) where Isabelle logic images may reside. When
207 looking up heaps files, the value of \hyperlink{setting.ML-IDENTIFIER}{\mbox{\isa{\isatt{ML{\isacharunderscore}IDENTIFIER}}}} is
208 appended to each component internally.
210 \item[\indexdef{}{setting}{ISABELLE\_OUTPUT}\hypertarget{setting.ISABELLE-OUTPUT}{\hyperlink{setting.ISABELLE-OUTPUT}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}OUTPUT}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}}] is a
211 directory where output heap files should be stored by default. The
212 ML system and Isabelle version identifier is appended here, too.
214 \item[\indexdef{}{setting}{ISABELLE\_BROWSER\_INFO}\hypertarget{setting.ISABELLE-BROWSER-INFO}{\hyperlink{setting.ISABELLE-BROWSER-INFO}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}BROWSER{\isacharunderscore}INFO}}}}}] is the directory where
215 theory browser information (HTML text, graph data, and printable
216 documents) is stored (see also \secref{sec:info}). The default
217 value is \verb|$ISABELLE_HOME_USER/browser_info|.
219 \item[\indexdef{}{setting}{ISABELLE\_LOGIC}\hypertarget{setting.ISABELLE-LOGIC}{\hyperlink{setting.ISABELLE-LOGIC}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}LOGIC}}}}}] specifies the default logic to
220 load if none is given explicitely by the user. The default value is
223 \item[\indexdef{}{setting}{ISABELLE\_LINE\_EDITOR}\hypertarget{setting.ISABELLE-LINE-EDITOR}{\hyperlink{setting.ISABELLE-LINE-EDITOR}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}LINE{\isacharunderscore}EDITOR}}}}}] specifies the default
224 line editor for the \indexref{}{tool}{tty}\hyperlink{tool.tty}{\mbox{\isa{\isatt{tty}}}} interface.
226 \item[\indexdef{}{setting}{ISABELLE\_USEDIR\_OPTIONS}\hypertarget{setting.ISABELLE-USEDIR-OPTIONS}{\hyperlink{setting.ISABELLE-USEDIR-OPTIONS}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}USEDIR{\isacharunderscore}OPTIONS}}}}}] is implicitly prefixed
227 to the command line of any \indexref{}{tool}{usedir}\hyperlink{tool.usedir}{\mbox{\isa{\isatt{usedir}}}} invocation. This
228 typically contains compilation options for object-logics --- \hyperlink{tool.usedir}{\mbox{\isa{\isatt{usedir}}}} is the basic utility for managing logic sessions (cf.\ the
229 \verb|IsaMakefile|s in the distribution).
231 \item[\indexdef{}{setting}{ISABELLE\_FILE\_IDENT}\hypertarget{setting.ISABELLE-FILE-IDENT}{\hyperlink{setting.ISABELLE-FILE-IDENT}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}FILE{\isacharunderscore}IDENT}}}}}] specifies a shell command
232 for producing a source file identification, based on the actual
233 content instead of the full physical path and date stamp (which is
234 the default). A typical identification would produce a ``digest'' of
235 the text, using a cryptographic hash function like SHA-1, for
238 \item[\indexdef{}{setting}{ISABELLE\_LATEX}\hypertarget{setting.ISABELLE-LATEX}{\hyperlink{setting.ISABELLE-LATEX}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}LATEX}}}}}, \indexdef{}{setting}{ISABELLE\_PDFLATEX}\hypertarget{setting.ISABELLE-PDFLATEX}{\hyperlink{setting.ISABELLE-PDFLATEX}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}PDFLATEX}}}}}, \indexdef{}{setting}{ISABELLE\_BIBTEX}\hypertarget{setting.ISABELLE-BIBTEX}{\hyperlink{setting.ISABELLE-BIBTEX}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}BIBTEX}}}}}, \indexdef{}{setting}{ISABELLE\_DVIPS}\hypertarget{setting.ISABELLE-DVIPS}{\hyperlink{setting.ISABELLE-DVIPS}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}DVIPS}}}}}] refer to {\LaTeX} related tools for Isabelle
239 document preparation (see also \secref{sec:tool-latex}).
241 \item[\indexdef{}{setting}{ISABELLE\_TOOLS}\hypertarget{setting.ISABELLE-TOOLS}{\hyperlink{setting.ISABELLE-TOOLS}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}TOOLS}}}}}] is a colon separated list of
242 directories that are scanned by \hyperlink{executable.isabelle}{\mbox{\isa{\isatt{isabelle}}}} for external
243 utility programs (see also \secref{sec:isabelle-tool}).
245 \item[\indexdef{}{setting}{ISABELLE\_DOCS}\hypertarget{setting.ISABELLE-DOCS}{\hyperlink{setting.ISABELLE-DOCS}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}DOCS}}}}}] is a colon separated list of
246 directories with documentation files.
248 \item[\indexdef{}{setting}{ISABELLE\_DOC\_FORMAT}\hypertarget{setting.ISABELLE-DOC-FORMAT}{\hyperlink{setting.ISABELLE-DOC-FORMAT}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}DOC{\isacharunderscore}FORMAT}}}}}] specifies the preferred
249 document format, typically \verb|dvi| or \verb|pdf|.
251 \item[\indexdef{}{setting}{DVI\_VIEWER}\hypertarget{setting.DVI-VIEWER}{\hyperlink{setting.DVI-VIEWER}{\mbox{\isa{\isatt{DVI{\isacharunderscore}VIEWER}}}}}] specifies the command to be used
252 for displaying \verb|dvi| files.
254 \item[\indexdef{}{setting}{PDF\_VIEWER}\hypertarget{setting.PDF-VIEWER}{\hyperlink{setting.PDF-VIEWER}{\mbox{\isa{\isatt{PDF{\isacharunderscore}VIEWER}}}}}] specifies the command to be used
255 for displaying \verb|pdf| files.
257 \item[\indexdef{}{setting}{PRINT\_COMMAND}\hypertarget{setting.PRINT-COMMAND}{\hyperlink{setting.PRINT-COMMAND}{\mbox{\isa{\isatt{PRINT{\isacharunderscore}COMMAND}}}}}] specifies the standard printer
258 spool command, which is expected to accept \verb|ps| files.
260 \item[\indexdef{}{setting}{ISABELLE\_TMP\_PREFIX}\hypertarget{setting.ISABELLE-TMP-PREFIX}{\hyperlink{setting.ISABELLE-TMP-PREFIX}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}TMP{\isacharunderscore}PREFIX}}}}}\isa{{\isachardoublequote}\isactrlsup {\isacharasterisk}{\isachardoublequote}}] is the
261 prefix from which any running \hyperlink{executable.isabelle-process}{\mbox{\isa{\isatt{isabelle{\isacharminus}process}}}}
262 derives an individual directory for temporary files. The default is
263 somewhere in \verb|/tmp|.
265 \item[\indexdef{}{setting}{ISABELLE\_INTERFACE}\hypertarget{setting.ISABELLE-INTERFACE}{\hyperlink{setting.ISABELLE-INTERFACE}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}INTERFACE}}}}}] is an identifier that
266 specifies the actual user interface that the capital \hyperlink{executable.Isabelle}{\mbox{\isa{\isatt{Isabelle}}}} or \hyperlink{executable.isabelle-interface}{\mbox{\isa{\isatt{isabelle{\isacharminus}interface}}}} should invoke. See
267 \secref{sec:interface} for more details.
273 \isamarkupsection{The raw Isabelle process%
277 \begin{isamarkuptext}%
278 The \indexdef{}{executable}{isabelle-process}\hypertarget{executable.isabelle-process}{\hyperlink{executable.isabelle-process}{\mbox{\isa{\isatt{isabelle{\isacharminus}process}}}}} executable runs bare-bones
279 Isabelle logic sessions --- either interactively or in batch mode.
280 It provides an abstraction over the underlying ML system, and over
281 the actual heap file locations. Its usage is:
284 Usage: isabelle-process [OPTIONS] [INPUT] [OUTPUT]
287 -C tell ML system to copy output image
288 -I startup Isar interaction mode
289 -P startup Proof General interaction mode
290 -S secure mode -- disallow critical operations
291 -W OUTPUT startup process wrapper, with messages going to OUTPUT stream
292 -X startup PGIP interaction mode
293 -c tell ML system to compress output image
294 -e MLTEXT pass MLTEXT to the ML session
295 -f pass 'Session.finish();' to the ML session
296 -m MODE add print mode for output
297 -q non-interactive session
298 -r open heap file read-only
299 -u pass 'use"ROOT.ML";' to the ML session
300 -w reset write permissions on OUTPUT
302 INPUT (default "\$ISABELLE_LOGIC") and OUTPUT specify in/out heaps.
303 These are either names to be searched in the Isabelle path, or
304 actual file names (containing at least one /).
305 If INPUT is "RAW_ML_SYSTEM", just start the bare bones ML system.
308 Input files without path specifications are looked up in the
309 \hyperlink{setting.ISABELLE-PATH}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}PATH}}}} setting, which may consist of multiple
310 components separated by colons --- these are tried in the given
311 order with the value of \hyperlink{setting.ML-IDENTIFIER}{\mbox{\isa{\isatt{ML{\isacharunderscore}IDENTIFIER}}}} appended
312 internally. In a similar way, base names are relative to the
313 directory specified by \hyperlink{setting.ISABELLE-OUTPUT}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}OUTPUT}}}}. In any case,
314 actual file locations may also be given by including at least one
315 slash (\verb|/|) in the name (hint: use \verb|./| to
316 refer to the current directory).%
320 \isamarkupsubsubsection{Options%
324 \begin{isamarkuptext}%
325 If the input heap file does not have write permission bits set, or
326 the \verb|-r| option is given explicitely, then the session
327 started will be read-only. That is, the ML world cannot be
328 committed back into the image file. Otherwise, a writable session
329 enables commits into either the input file, or into another output
330 heap file (if that is given as the second argument on the command
333 The read-write state of sessions is determined at startup only, it
334 cannot be changed intermediately. Also note that heap images may
335 require considerable amounts of disk space (approximately
336 50--200~MB). Users are responsible for themselves to dispose their
337 heap files when they are no longer needed.
339 \medskip The \verb|-w| option makes the output heap file
340 read-only after terminating. Thus subsequent invocations cause the
341 logic image to be read-only automatically.
343 \medskip The \verb|-c| option tells the underlying ML system
344 to compress the output heap (fully transparently). On Poly/ML for
345 example, the image is garbage collected and all stored values are
346 maximally shared, resulting in up to \isa{{\isachardoublequote}{\isadigit{5}}{\isadigit{0}}{\isacharpercent}{\isachardoublequote}} less disk space
349 \medskip The \verb|-C| option tells the ML system to produce
350 a completely self-contained output image, probably including a copy
351 of the ML runtime system itself.
353 \medskip Using the \verb|-e| option, arbitrary ML code may be
354 passed to the Isabelle session from the command line. Multiple
355 \verb|-e|'s are evaluated in the given order. Strange things
356 may happen when errorneous ML code is provided. Also make sure that
357 the ML commands are terminated properly by semicolon.
359 \medskip The \verb|-u| option is a shortcut for \verb|-e| passing ``\verb|use "ROOT.ML";|'' to the ML session.
360 The \verb|-f| option passes ``\verb|Session.finish();|'', which is intended mainly for administrative
363 \medskip The \verb|-m| option adds identifiers of print modes
364 to be made active for this session. Typically, this is used by some
365 user interface, e.g.\ to enable output of proper mathematical
368 \medskip Isabelle normally enters an interactive top-level loop
369 (after processing the \verb|-e| texts). The \verb|-q|
370 option inhibits interaction, thus providing a pure batch mode
373 \medskip The \verb|-I| option makes Isabelle enter Isar
374 interaction mode on startup, instead of the primitive ML top-level.
375 The \verb|-P| option configures the top-level loop for
376 interaction with the Proof General user interface, and the
377 \verb|-X| option enables XML-based PGIP communication. The
378 \verb|-W| option makes Isabelle enter a special process
379 wrapper for interaction via an external program; the protocol is a
380 stripped-down version of Proof General the interaction mode, see
381 also \hyperlink{file.~~/src/Pure/Tools/isabelle-process.ML}{\mbox{\isa{\isatt{{\isachartilde}{\isachartilde}{\isacharslash}src{\isacharslash}Pure{\isacharslash}Tools{\isacharslash}isabelle{\isacharunderscore}process{\isachardot}ML}}}} and \hyperlink{file.~~/src/Pure/Tools/isabelle-process.scala}{\mbox{\isa{\isatt{{\isachartilde}{\isachartilde}{\isacharslash}src{\isacharslash}Pure{\isacharslash}Tools{\isacharslash}isabelle{\isacharunderscore}process{\isachardot}scala}}}}.
383 \medskip The \verb|-S| option makes the Isabelle process more
384 secure by disabling some critical operations, notably runtime
385 compilation and evaluation of ML source code.%
389 \isamarkupsubsubsection{Examples%
393 \begin{isamarkuptext}%
394 Run an interactive session of the default object-logic (as specified
395 by the \hyperlink{setting.ISABELLE-LOGIC}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}LOGIC}}}} setting) like this:
400 Usually \hyperlink{setting.ISABELLE-LOGIC}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}LOGIC}}}} refers to one of the standard
401 logic images, which are read-only by default. A writable session
402 --- based on \verb|FOL|, but output to \verb|Foo| (in the
403 directory specified by the \hyperlink{setting.ISABELLE-OUTPUT}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}OUTPUT}}}} setting) ---
404 may be invoked as follows:
406 isabelle-process FOL Foo
408 Ending this session normally (e.g.\ by typing control-D) dumps the
409 whole ML system state into \verb|Foo|. Be prepared for several
412 The \verb|Foo| session may be continued later (still in
417 A read-only \verb|Foo| session may be started by:
419 isabelle-process -r Foo
422 \medskip Note that manual session management like this does
423 \emph{not} provide proper setup for theory presentation. This would
424 require the \hyperlink{tool.usedir}{\mbox{\isa{\isatt{usedir}}}} utility.
426 \bigskip The next example demonstrates batch execution of Isabelle.
427 We retrieve the \verb|FOL| theory value from the theory loader
430 isabelle-process -e 'theory "FOL";' -q -r FOL
432 Note that the output text will be interspersed with additional junk
433 messages by the ML runtime environment. The \verb|-W| option
434 allows to communicate with the Isabelle process via an external
435 program in a more robust fashion.%
439 \isamarkupsection{The Isabelle tools wrapper \label{sec:isabelle-tool}%
443 \begin{isamarkuptext}%
444 All Isabelle related tools and interfaces are called via a common
445 wrapper --- \hyperlink{executable.isabelle}{\mbox{\isa{\isatt{isabelle}}}}:
448 Usage: isabelle TOOL [ARGS ...]
450 Start Isabelle utility program TOOL with ARGS. Pass "-?" to TOOL
451 for more specific help.
455 browser - Isabelle graph browser
459 In principle, Isabelle tools are ordinary executable scripts that
460 are run within the Isabelle settings environment, see
461 \secref{sec:settings}. The set of available tools is collected by
462 \hyperlink{executable.isabelle}{\mbox{\isa{\isatt{isabelle}}}} from the directories listed in the \hyperlink{setting.ISABELLE-TOOLS}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}TOOLS}}}} setting. Do not try to call the scripts directly
463 from the shell. Neither should you add the tool directories to your
464 shell's search path!%
468 \isamarkupsubsubsection{Examples%
472 \begin{isamarkuptext}%
473 Show the list of available documentation of the current Isabelle
474 installation like this:
480 View a certain document as follows:
482 isabelle doc isar-ref
485 Create an Isabelle session derived from HOL (see also
486 \secref{sec:tool-mkdir} and \secref{sec:tool-make}):
488 isabelle mkdir HOL Test && isabelle make
490 Note that \verb|isabelle mkdir| is usually only invoked once;
491 existing sessions (including document output etc.) are then updated
492 by \verb|isabelle make| alone.%
496 \isamarkupsection{The Isabelle interface wrapper \label{sec:interface}%
500 \begin{isamarkuptext}%
501 Isabelle is a generic theorem prover, even w.r.t.\ its user
502 interface. The \indexdef{}{executable}{Isabelle}\hypertarget{executable.Isabelle}{\hyperlink{executable.Isabelle}{\mbox{\isa{\isatt{Isabelle}}}}} (or \indexdef{}{executable}{isabelle-interface}\hypertarget{executable.isabelle-interface}{\hyperlink{executable.isabelle-interface}{\mbox{\isa{\isatt{isabelle{\isacharminus}interface}}}}}) executable provides a uniform way for
503 end-users to invoke a certain interface; which one to start is
504 determined by the \indexref{}{setting}{ISABELLE\_INTERFACE}\hyperlink{setting.ISABELLE-INTERFACE}{\mbox{\isa{\isatt{ISABELLE{\isacharunderscore}INTERFACE}}}} setting
505 variable, which should give a full path specification to the actual
508 Presently, the most prominent Isabelle interface is Proof
509 General~\cite{proofgeneral}\index{user interface!Proof General}.
510 The Proof General distribution includes an interface wrapper script
511 for the regular Isar toplevel, see \verb|ProofGeneral/isar/interface|. The canonical settings for
512 Isabelle/Isar are as follows:
515 ISABELLE_INTERFACE=\$ISABELLE_HOME/contrib/ProofGeneral/isar/interface
516 PROOFGENERAL_OPTIONS=""
519 Thus \hyperlink{executable.Isabelle}{\mbox{\isa{\isatt{Isabelle}}}} would automatically invoke Emacs with
520 proper setup of the Proof General Lisp packages. There are some
521 options available, such as \verb|-l| for passing the logic
522 image to be used by default, or \verb|-m| to tune the
525 \medskip Note that the world may be also seen the other way round:
526 Emacs may be started first (with proper setup of Proof General
527 mode), and \hyperlink{executable.isabelle-process}{\mbox{\isa{\isatt{isabelle{\isacharminus}process}}}} run from within. This
528 requires further Emacs Lisp configuration, see the Proof General
529 documentation \cite{proofgeneral} for more information.%
538 \isacommand{end}\isamarkupfalse%
549 %%% TeX-master: "root"