doc-src/System/basics.tex
author nipkow
Wed, 11 Oct 2000 13:33:38 +0200
changeset 10191 e77662e9cabd
parent 10108 72a719e997b9
child 10900 7268a5f425f8
permissions -rw-r--r--
*** empty log message ***
     1 
     2 % $Id$
     3 
     4 \chapter{The Isabelle system environment}
     5 
     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
    10 related functions.
    11 
    12 \medskip The Isabelle system environment is based on a few general elements:
    13 \begin{itemize}
    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
    19   to be used.
    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.
    26 \end{itemize}
    27 
    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
    34   well.}
    35 
    36 
    37 \section{Isabelle settings} \label{sec:settings}
    38 
    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.
    48 
    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
    55   not required.}
    56 
    57 
    58 \subsection{Building the environment}
    59 
    60 Whenever any of the Isabelle executables is run, their settings environment is
    61 built as follows.
    62 
    63 \begin{enumerate}
    64 \item The special variable \settdx{ISABELLE_HOME} is determined automatically
    65   from the location of the binary that has been run.
    66   
    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!
    72   
    73 \item The file \texttt{\$ISABELLE_HOME/etc/settings} ist run as a shell script
    74   with the auto-export option for variables enabled.
    75   
    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.).
    81   
    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}.
    86   
    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
    93   changed otherwise.
    94 
    95 \end{enumerate}
    96 
    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.
   102 
   103 \medskip A few variables are somewhat special:
   104 \begin{itemize}
   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.
   108   
   109 \item \settdx{ISABELLE_OUTPUT} will has the {\ML} system identifier (according
   110   to \texttt{ML_IDENTIFIER}) automatically appended to its value.
   111 \end{itemize}
   112 
   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}.
   116 
   117 
   118 \subsection{Common variables}
   119 
   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 *.
   123 
   124 \begin{description}
   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.
   129   
   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}.
   136   
   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.
   141   
   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
   146   distribution).
   147   
   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.
   154   
   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.
   158   
   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,
   161   too.
   162   
   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}.
   167   
   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}.
   170   
   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).
   176   
   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}).
   180   
   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}).
   184   
   185 \item[\settdx{ISABELLE_DOCS}] is a colon separated list of directories with
   186   documentation files.
   187   
   188 \item[\settdx{DVI_VIEWER}] specifies the command to be used for displaying
   189   \texttt{dvi} files.
   190   
   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
   194   information.
   195   
   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}.
   199   
   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.
   203 
   204 \end{description}
   205 
   206 
   207 \section{Isabelle proper --- \texttt{isabelle}}
   208 
   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:
   212 \begin{ttbox}
   213 Usage: isabelle [OPTIONS] [INPUT] [OUTPUT]
   214 
   215   Options are:
   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
   226 
   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.
   231 \end{ttbox}
   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
   239 directory).
   240 
   241 
   242 \subsection*{Options}
   243 
   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).
   250 
   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.
   255 
   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.
   259 
   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.
   264 
   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
   267 system itself.
   268 
   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.
   274 
   275 \medskip The \texttt{-u} option is a shortcut for \texttt{-e}, passing
   276 ``\texttt{use"ROOT.ML";}'' to the {\ML} session.
   277 
   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.
   281 
   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.
   285 
   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.
   290 
   291 
   292 \subsection*{Examples}
   293 
   294 Run an interactive session of the default object-logic (as specified
   295 by the \texttt{ISABELLE_LOGIC} setting) like this:
   296 \begin{ttbox}
   297 isabelle
   298 \end{ttbox}
   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
   303 as follows:
   304 \begin{ttbox}
   305 isabelle FOL Foo
   306 \end{ttbox}
   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
   309 megabytes!
   310 
   311 The \texttt{Foo} session may be continued later (still in writable
   312 state) by:
   313 \begin{ttbox}
   314 isabelle Foo
   315 \end{ttbox}
   316 A read-only \texttt{Foo} session may be started by:
   317 \begin{ttbox}
   318 isabelle -r Foo
   319 \end{ttbox}
   320 
   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}.
   324 
   325 \bigskip The next example demonstrates batch execution of Isabelle. We print a
   326 certain theorem of \texttt{FOL}:
   327 \begin{ttbox}
   328 isabelle -e "prth allE;" -q -r FOL
   329 \end{ttbox}
   330 Note that the output text will be interspersed with additional junk messages
   331 by the {\ML} runtime environment.
   332 
   333 
   334 \section{The Isabelle tools wrapper --- \texttt{isatool}} \label{sec:isatool}
   335 
   336 All Isabelle related utilities are called via a common wrapper ---
   337 \ttindex{isatool}:
   338 \begin{ttbox}
   339 Usage: isatool TOOL [ARGS ...]
   340 
   341   Start Isabelle utility program TOOL with ARGS. Pass "-?" to TOOL
   342   for more specific help.
   343 
   344   Available tools are:
   345 
   346     browser - Isabelle graph browser
   347     doc - view Isabelle documentation
   348     \dots
   349 \end{ttbox}
   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
   355 path.
   356 
   357 
   358 \section{The Isabelle interface wrapper --- \texttt{Isabelle}} \label{sec:interface}
   359 
   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}).
   366 
   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
   370 are available:
   371 
   372 \begin{itemize}
   373 \item \texttt{none} is just a pass-through to plain \texttt{isabelle}. Thus
   374   \texttt{Isabelle} basically becomes an alias for \texttt{isabelle}.
   375   
   376 \item \texttt{xterm} refers to a simple \textsl{xterm} based interface which
   377   is part of the Isabelle distribution.
   378   
   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}.
   382   
   383 \item Proof~General~\cite{proofgeneral}\index{user interface!Proof General} is
   384   distributed with separate interface wrapper scripts for Isabelle.  See below
   385   for more details.
   386 \end{itemize}
   387 
   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
   395 usage printed.
   396 
   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.
   401 
   402 Using the Isabelle interface wrapper scripts as provided by Proof~General, a
   403 typical setup for Isabelle/Isar would be like this:
   404 \begin{ttbox}
   405 ISABELLE_INTERFACE=\$ISABELLE_HOME/contrib/ProofGeneral/isar/interface
   406 PROOFGENERAL_OPTIONS="-u false"
   407 \end{ttbox}
   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.
   411 
   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
   416 more information.
   417 
   418 %%% Local Variables:
   419 %%% mode: latex
   420 %%% TeX-master: "system"
   421 %%% End: