doc-src/System/Thy/document/Basics.tex
author wenzelm
Sat, 04 Oct 2008 17:40:58 +0200
changeset 28505 f98751bd715f
parent 28503 a30b7169fdd1
child 28507 325592dad134
permissions -rw-r--r--
updated generated file;
     1 %
     2 \begin{isabellebody}%
     3 \def\isabellecontext{Basics}%
     4 %
     5 \isadelimtheory
     6 \isanewline
     7 \isanewline
     8 %
     9 \endisadelimtheory
    10 %
    11 \isatagtheory
    12 \isacommand{theory}\isamarkupfalse%
    13 \ Basics\isanewline
    14 \isakeyword{imports}\ Pure\isanewline
    15 \isakeyword{begin}%
    16 \endisatagtheory
    17 {\isafoldtheory}%
    18 %
    19 \isadelimtheory
    20 %
    21 \endisadelimtheory
    22 %
    23 \isamarkupchapter{The Isabelle system environment%
    24 }
    25 \isamarkuptrue%
    26 %
    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.
    33 
    34   \medskip The Isabelle system environment emerges from a few general
    35   concepts.
    36 
    37   \begin{enumerate}
    38 
    39   \item The \emph{Isabelle settings} mechanism provides environment
    40   variables to all Isabelle programs (including tools and user
    41   interfaces).
    42 
    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.
    47 
    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
    51   settings mechanism.
    52 
    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}.
    56 
    57   \end{enumerate}%
    58 \end{isamarkuptext}%
    59 \isamarkuptrue%
    60 %
    61 \isamarkupsection{Isabelle settings \label{sec:settings}%
    62 }
    63 \isamarkuptrue%
    64 %
    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.
    75 
    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.%
    83 \end{isamarkuptext}%
    84 \isamarkuptrue%
    85 %
    86 \isamarkupsubsection{Building the environment%
    87 }
    88 \isamarkuptrue%
    89 %
    90 \begin{isamarkuptext}%
    91 Whenever any of the Isabelle executables is run, their settings
    92   environment is put together as follows.
    93 
    94   \begin{enumerate}
    95 
    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
    98   been run.
    99   
   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!
   105 
   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
   108   variables enabled.
   109   
   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}}}}
   115   etc.).
   116   
   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|.
   121   
   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.
   129   
   130   \end{enumerate}
   131 
   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
   138   minimum.
   139 
   140   \medskip A few variables are somewhat special:
   141 
   142   \begin{itemize}
   143 
   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,
   146   respectively.
   147   
   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
   151   to its value.
   152 
   153   \end{itemize}
   154 
   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.%
   158 \end{isamarkuptext}%
   159 \isamarkuptrue%
   160 %
   161 \isamarkupsubsection{Common variables%
   162 }
   163 \isamarkuptrue%
   164 %
   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}}.
   170 
   171   \begin{description}
   172 
   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
   177   from the shell!
   178   
   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|.
   185   
   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.
   190   
   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|''.
   193 
   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).
   198   
   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.
   204   
   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.
   209   
   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.
   213   
   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|.
   218   
   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
   221   \verb|HOL|.
   222   
   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.
   225 
   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).
   230 
   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
   236   example.
   237   
   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}).
   240   
   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}).
   244   
   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.
   247   
   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|.
   250   
   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.
   253   
   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.
   256   
   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.
   259   
   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|.
   264   
   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.
   268 
   269   \end{description}%
   270 \end{isamarkuptext}%
   271 \isamarkuptrue%
   272 %
   273 \isamarkupsection{The raw Isabelle process%
   274 }
   275 \isamarkuptrue%
   276 %
   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:
   282 
   283 \begin{ttbox}
   284 Usage: isabelle-process [OPTIONS] [INPUT] [OUTPUT]
   285 
   286   Options are:
   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
   301 
   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.
   306 \end{ttbox}
   307 
   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).%
   317 \end{isamarkuptext}%
   318 \isamarkuptrue%
   319 %
   320 \isamarkupsubsubsection{Options%
   321 }
   322 \isamarkuptrue%
   323 %
   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
   331   line).
   332 
   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.
   338 
   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.
   342 
   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
   347   consumption.
   348 
   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.
   352 
   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.
   358 
   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
   361   purposes.
   362 
   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
   366   symbols.
   367 
   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
   371   facility.
   372 
   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}}}}.
   382 
   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.%
   386 \end{isamarkuptext}%
   387 \isamarkuptrue%
   388 %
   389 \isamarkupsubsubsection{Examples%
   390 }
   391 \isamarkuptrue%
   392 %
   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:
   396 \begin{ttbox}
   397 isabelle-process
   398 \end{ttbox}
   399 
   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:
   405 \begin{ttbox}
   406 isabelle-process FOL Foo
   407 \end{ttbox}
   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
   410   tens of megabytes.
   411 
   412   The \verb|Foo| session may be continued later (still in
   413   writable state) by:
   414 \begin{ttbox}
   415 isabelle-process Foo
   416 \end{ttbox}
   417   A read-only \verb|Foo| session may be started by:
   418 \begin{ttbox}
   419 isabelle-process -r Foo
   420 \end{ttbox}
   421 
   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.
   425 
   426   \bigskip The next example demonstrates batch execution of Isabelle.
   427   We retrieve the \verb|FOL| theory value from the theory loader
   428   within ML:
   429 \begin{ttbox}
   430 isabelle-process -e 'theory "FOL";' -q -r FOL
   431 \end{ttbox}
   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.%
   436 \end{isamarkuptext}%
   437 \isamarkuptrue%
   438 %
   439 \isamarkupsection{The Isabelle tools wrapper \label{sec:isabelle-tool}%
   440 }
   441 \isamarkuptrue%
   442 %
   443 \begin{isamarkuptext}%
   444 All Isabelle related tools and interfaces are called via a common
   445   wrapper --- \hyperlink{executable.isabelle}{\mbox{\isa{\isatt{isabelle}}}}:
   446 
   447 \begin{ttbox}
   448 Usage: isabelle TOOL [ARGS ...]
   449 
   450   Start Isabelle utility program TOOL with ARGS. Pass "-?" to TOOL
   451   for more specific help.
   452 
   453   Available tools are:
   454 
   455     browser - Isabelle graph browser
   456     \dots
   457 \end{ttbox}
   458 
   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!%
   465 \end{isamarkuptext}%
   466 \isamarkuptrue%
   467 %
   468 \isamarkupsubsubsection{Examples%
   469 }
   470 \isamarkuptrue%
   471 %
   472 \begin{isamarkuptext}%
   473 Show the list of available documentation of the current Isabelle
   474   installation like this:
   475 
   476 \begin{ttbox}
   477   isabelle doc
   478 \end{ttbox}
   479 
   480   View a certain document as follows:
   481 \begin{ttbox}
   482   isabelle doc isar-ref
   483 \end{ttbox}
   484 
   485   Create an Isabelle session derived from HOL (see also
   486   \secref{sec:tool-mkdir} and \secref{sec:tool-make}):
   487 \begin{ttbox}
   488   isabelle mkdir HOL Test && isabelle make
   489 \end{ttbox}
   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.%
   493 \end{isamarkuptext}%
   494 \isamarkuptrue%
   495 %
   496 \isamarkupsection{The Isabelle interface wrapper \label{sec:interface}%
   497 }
   498 \isamarkuptrue%
   499 %
   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
   506   executable.
   507 
   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:
   513 
   514 \begin{ttbox}
   515 ISABELLE_INTERFACE=\$ISABELLE_HOME/contrib/ProofGeneral/isar/interface
   516 PROOFGENERAL_OPTIONS=""
   517 \end{ttbox}
   518 
   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
   523   standard print mode.
   524   
   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.%
   530 \end{isamarkuptext}%
   531 \isamarkuptrue%
   532 %
   533 \isadelimtheory
   534 %
   535 \endisadelimtheory
   536 %
   537 \isatagtheory
   538 \isacommand{end}\isamarkupfalse%
   539 %
   540 \endisatagtheory
   541 {\isafoldtheory}%
   542 %
   543 \isadelimtheory
   544 %
   545 \endisadelimtheory
   546 \end{isabellebody}%
   547 %%% Local Variables:
   548 %%% mode: latex
   549 %%% TeX-master: "root"
   550 %%% End: