src/Doc/System/Basics.thy
author wenzelm
Fri May 17 19:04:52 2013 +0200 (2013-05-17)
changeset 52056 fc458f304f93
parent 52054 eaf17514aabd
child 52061 1a52aa84e411
permissions -rw-r--r--
added isabelle-process option -o;
wenzelm@28215
     1
theory Basics
wenzelm@43564
     2
imports Base
wenzelm@28215
     3
begin
wenzelm@28215
     4
wenzelm@28215
     5
chapter {* The Isabelle system environment *}
wenzelm@28215
     6
wenzelm@47823
     7
text {* This manual describes Isabelle together with related tools and
wenzelm@47823
     8
  user interfaces as seen from a system oriented view.  See also the
wenzelm@28916
     9
  \emph{Isabelle/Isar Reference Manual}~\cite{isabelle-isar-ref} for
wenzelm@47823
    10
  the actual Isabelle input language and related concepts, and
wenzelm@47823
    11
  \emph{The Isabelle/Isar Implementation
wenzelm@47823
    12
  Manual}~\cite{isabelle-implementation} for the main concepts of the
wenzelm@47823
    13
  underlying implementation in Isabelle/ML.
wenzelm@28215
    14
wenzelm@28916
    15
  \medskip The Isabelle system environment provides the following
wenzelm@28916
    16
  basic infrastructure to integrate tools smoothly.
wenzelm@28215
    17
wenzelm@28238
    18
  \begin{enumerate}
wenzelm@28215
    19
wenzelm@28916
    20
  \item The \emph{Isabelle settings} mechanism provides process
wenzelm@28916
    21
  environment variables to all Isabelle executables (including tools
wenzelm@28916
    22
  and user interfaces).
wenzelm@28215
    23
wenzelm@47823
    24
  \item The raw \emph{Isabelle process} (@{executable_ref
wenzelm@28504
    25
  "isabelle-process"}) runs logic sessions either interactively or in
wenzelm@28504
    26
  batch mode.  In particular, this view abstracts over the invocation
wenzelm@28504
    27
  of the actual ML system to be used.  Regular users rarely need to
wenzelm@28504
    28
  care about the low-level process.
wenzelm@28215
    29
wenzelm@48813
    30
  \item The main \emph{Isabelle tool wrapper} (@{executable_ref
wenzelm@47823
    31
  isabelle}) provides a generic startup environment Isabelle related
wenzelm@47823
    32
  utilities, user interfaces etc.  Such tools automatically benefit
wenzelm@47823
    33
  from the settings mechanism.
wenzelm@28215
    34
wenzelm@28238
    35
  \end{enumerate}
wenzelm@28215
    36
*}
wenzelm@28215
    37
wenzelm@28215
    38
wenzelm@28215
    39
section {* Isabelle settings \label{sec:settings} *}
wenzelm@28215
    40
wenzelm@28215
    41
text {*
wenzelm@28215
    42
  The Isabelle system heavily depends on the \emph{settings
wenzelm@28215
    43
  mechanism}\indexbold{settings}.  Essentially, this is a statically
wenzelm@28215
    44
  scoped collection of environment variables, such as @{setting
wenzelm@28215
    45
  ISABELLE_HOME}, @{setting ML_SYSTEM}, @{setting ML_HOME}.  These
wenzelm@28215
    46
  variables are \emph{not} intended to be set directly from the shell,
wenzelm@28215
    47
  though.  Isabelle employs a somewhat more sophisticated scheme of
wenzelm@28215
    48
  \emph{settings files} --- one for site-wide defaults, another for
wenzelm@28215
    49
  additional user-specific modifications.  With all configuration
wenzelm@47823
    50
  variables in clearly defined places, this scheme is more
wenzelm@47823
    51
  maintainable and user-friendly than global shell environment
wenzelm@47823
    52
  variables.
wenzelm@28215
    53
wenzelm@28215
    54
  In particular, we avoid the typical situation where prospective
wenzelm@28215
    55
  users of a software package are told to put several things into
wenzelm@28215
    56
  their shell startup scripts, before being able to actually run the
wenzelm@28215
    57
  program. Isabelle requires none such administrative chores of its
wenzelm@28215
    58
  end-users --- the executables can be invoked straight away.
wenzelm@40800
    59
  Occasionally, users would still want to put the @{file
wenzelm@28238
    60
  "$ISABELLE_HOME/bin"} directory into their shell's search path, but
wenzelm@28238
    61
  this is not required.
wenzelm@28215
    62
*}
wenzelm@28215
    63
wenzelm@28215
    64
wenzelm@32323
    65
subsection {* Bootstrapping the environment \label{sec:boot} *}
wenzelm@28215
    66
wenzelm@32323
    67
text {* Isabelle executables need to be run within a proper settings
wenzelm@32323
    68
  environment.  This is bootstrapped as described below, on the first
wenzelm@32323
    69
  invocation of one of the outer wrapper scripts (such as
wenzelm@32323
    70
  @{executable_ref isabelle}).  This happens only once for each
wenzelm@32323
    71
  process tree, i.e.\ the environment is passed to subprocesses
wenzelm@32323
    72
  according to regular Unix conventions.
wenzelm@28215
    73
wenzelm@28215
    74
  \begin{enumerate}
wenzelm@28215
    75
wenzelm@28215
    76
  \item The special variable @{setting_def ISABELLE_HOME} is
wenzelm@28215
    77
  determined automatically from the location of the binary that has
wenzelm@28215
    78
  been run.
wenzelm@28215
    79
  
wenzelm@28215
    80
  You should not try to set @{setting ISABELLE_HOME} manually. Also
wenzelm@28215
    81
  note that the Isabelle executables either have to be run from their
wenzelm@28215
    82
  original location in the distribution directory, or via the
wenzelm@48602
    83
  executable objects created by the @{tool install} tool.  Symbolic
wenzelm@40800
    84
  links are admissible, but a plain copy of the @{file
wenzelm@28238
    85
  "$ISABELLE_HOME/bin"} files will not work!
wenzelm@28238
    86
wenzelm@40800
    87
  \item The file @{file "$ISABELLE_HOME/etc/settings"} is run as a
wenzelm@28238
    88
  @{executable_ref bash} shell script with the auto-export option for
wenzelm@28238
    89
  variables enabled.
wenzelm@28215
    90
  
wenzelm@28215
    91
  This file holds a rather long list of shell variable assigments,
wenzelm@28215
    92
  thus providing the site-wide default settings.  The Isabelle
wenzelm@28215
    93
  distribution already contains a global settings file with sensible
wenzelm@28215
    94
  defaults for most variables.  When installing the system, only a few
wenzelm@28215
    95
  of these may have to be adapted (probably @{setting ML_SYSTEM}
wenzelm@28215
    96
  etc.).
wenzelm@28215
    97
  
wenzelm@28285
    98
  \item The file @{verbatim "$ISABELLE_HOME_USER/etc/settings"} (if it
wenzelm@28215
    99
  exists) is run in the same way as the site default settings. Note
wenzelm@28215
   100
  that the variable @{setting ISABELLE_HOME_USER} has already been set
wenzelm@40387
   101
  before --- usually to something like @{verbatim
wenzelm@47661
   102
  "$USER_HOME/.isabelle/IsabelleXXXX"}.
wenzelm@28215
   103
  
wenzelm@28215
   104
  Thus individual users may override the site-wide defaults.  See also
wenzelm@40800
   105
  file @{file "$ISABELLE_HOME/etc/user-settings.sample"} in the
wenzelm@28238
   106
  distribution.  Typically, a user settings file would contain only a
wenzelm@28238
   107
  few lines, just the assigments that are really changed.  One should
wenzelm@40800
   108
  definitely \emph{not} start with a full copy the basic @{file
wenzelm@28215
   109
  "$ISABELLE_HOME/etc/settings"}. This could cause very annoying
wenzelm@28215
   110
  maintainance problems later, when the Isabelle installation is
wenzelm@28215
   111
  updated or changed otherwise.
wenzelm@28215
   112
  
wenzelm@28215
   113
  \end{enumerate}
wenzelm@28215
   114
wenzelm@28238
   115
  Since settings files are regular GNU @{executable_def bash} scripts,
wenzelm@28238
   116
  one may use complex shell commands, such as @{verbatim "if"} or
wenzelm@28215
   117
  @{verbatim "case"} statements to set variables depending on the
wenzelm@28215
   118
  system architecture or other environment variables.  Such advanced
wenzelm@28215
   119
  features should be added only with great care, though. In
wenzelm@28215
   120
  particular, external environment references should be kept at a
wenzelm@28215
   121
  minimum.
wenzelm@28215
   122
wenzelm@28215
   123
  \medskip A few variables are somewhat special:
wenzelm@28215
   124
wenzelm@28215
   125
  \begin{itemize}
wenzelm@28215
   126
wenzelm@28502
   127
  \item @{setting_def ISABELLE_PROCESS} and @{setting_def ISABELLE_TOOL} are set
wenzelm@28215
   128
  automatically to the absolute path names of the @{executable
wenzelm@28504
   129
  "isabelle-process"} and @{executable isabelle} executables,
wenzelm@28215
   130
  respectively.
wenzelm@28215
   131
  
wenzelm@28238
   132
  \item @{setting_ref ISABELLE_OUTPUT} will have the identifiers of
wenzelm@28215
   133
  the Isabelle distribution (cf.\ @{setting ISABELLE_IDENTIFIER}) and
wenzelm@28215
   134
  the ML system (cf.\ @{setting ML_IDENTIFIER}) appended automatically
wenzelm@28215
   135
  to its value.
wenzelm@28215
   136
wenzelm@28215
   137
  \end{itemize}
wenzelm@28215
   138
wenzelm@28238
   139
  \medskip Note that the settings environment may be inspected with
wenzelm@48602
   140
  the @{tool getenv} tool.  This might help to figure out the effect
wenzelm@48602
   141
  of complex settings scripts.  *}
wenzelm@28215
   142
wenzelm@28215
   143
wenzelm@48602
   144
subsection {* Common variables *}
wenzelm@28215
   145
wenzelm@28215
   146
text {*
wenzelm@28215
   147
  This is a reference of common Isabelle settings variables. Note that
wenzelm@28215
   148
  the list is somewhat open-ended. Third-party utilities or interfaces
wenzelm@28215
   149
  may add their own selection. Variables that are special in some
wenzelm@28215
   150
  sense are marked with @{text "\<^sup>*"}.
wenzelm@28215
   151
wenzelm@28215
   152
  \begin{description}
wenzelm@28215
   153
wenzelm@47823
   154
  \item[@{setting_def USER_HOME}@{text "\<^sup>*"}] Is the cross-platform
wenzelm@47823
   155
  user home directory.  On Unix systems this is usually the same as
wenzelm@47823
   156
  @{setting HOME}, but on Windows it is the regular home directory of
wenzelm@47823
   157
  the user, not the one of within the Cygwin root
wenzelm@47823
   158
  file-system.\footnote{Cygwin itself offers another choice whether
wenzelm@47823
   159
  its HOME should point to the \texttt{/home} directory tree or the
wenzelm@47823
   160
  Windows user home.}
wenzelm@47661
   161
wenzelm@47661
   162
 \item[@{setting_def ISABELLE_HOME}@{text "\<^sup>*"}] is the location of the
wenzelm@47661
   163
  top-level Isabelle distribution directory. This is automatically
wenzelm@47661
   164
  determined from the Isabelle executable that has been invoked.  Do
wenzelm@47661
   165
  not attempt to set @{setting ISABELLE_HOME} yourself from the shell!
wenzelm@28215
   166
  
wenzelm@28215
   167
  \item[@{setting_def ISABELLE_HOME_USER}] is the user-specific
wenzelm@28215
   168
  counterpart of @{setting ISABELLE_HOME}. The default value is
wenzelm@47661
   169
  relative to @{verbatim "$USER_HOME/.isabelle"}, under rare
wenzelm@47661
   170
  circumstances this may be changed in the global setting file.
wenzelm@47661
   171
  Typically, the @{setting ISABELLE_HOME_USER} directory mimics
wenzelm@47661
   172
  @{setting ISABELLE_HOME} to some extend. In particular, site-wide
wenzelm@47661
   173
  defaults may be overridden by a private @{verbatim
wenzelm@40387
   174
  "$ISABELLE_HOME_USER/etc/settings"}.
wenzelm@50182
   175
wenzelm@50182
   176
  \item[@{setting_def ISABELLE_PLATFORM_FAMILY}@{text "\<^sup>*"}] is
wenzelm@50182
   177
  automatically set to the general platform family: @{verbatim linux},
wenzelm@50182
   178
  @{verbatim macos}, @{verbatim windows}.  Note that
wenzelm@50182
   179
  platform-dependent tools usually need to refer to the more specific
wenzelm@50182
   180
  identification according to @{setting ISABELLE_PLATFORM}, @{setting
wenzelm@50182
   181
  ISABELLE_PLATFORM32}, @{setting ISABELLE_PLATFORM64}.
wenzelm@50182
   182
wenzelm@36196
   183
  \item[@{setting_def ISABELLE_PLATFORM}@{text "\<^sup>*"}] is automatically
wenzelm@36196
   184
  set to a symbolic identifier for the underlying hardware and
wenzelm@36196
   185
  operating system.  The Isabelle platform identification always
wenzelm@36196
   186
  refers to the 32 bit variant, even this is a 64 bit machine.  Note
wenzelm@36196
   187
  that the ML or Java runtime may have a different idea, depending on
wenzelm@36196
   188
  which binaries are actually run.
wenzelm@36196
   189
wenzelm@36196
   190
  \item[@{setting_def ISABELLE_PLATFORM64}@{text "\<^sup>*"}] is similar to
wenzelm@36196
   191
  @{setting ISABELLE_PLATFORM} but refers to the proper 64 bit variant
wenzelm@36196
   192
  on a platform that supports this; the value is empty for 32 bit.
wenzelm@47823
   193
  Note that the following bash expression (including the quotes)
wenzelm@47823
   194
  prefers the 64 bit platform, if that is available:
wenzelm@47823
   195
wenzelm@47823
   196
  @{verbatim [display] "\"${ISABELLE_PLATFORM64:-$ISABELLE_PLATFORM}\""}
wenzelm@36196
   197
wenzelm@28502
   198
  \item[@{setting_def ISABELLE_PROCESS}@{text "\<^sup>*"}, @{setting
wenzelm@28500
   199
  ISABELLE_TOOL}@{text "\<^sup>*"}] are automatically set to the full path
wenzelm@28215
   200
  names of the @{executable "isabelle-process"} and @{executable
wenzelm@28504
   201
  isabelle} executables, respectively.  Thus other tools and scripts
wenzelm@40800
   202
  need not assume that the @{file "$ISABELLE_HOME/bin"} directory is
wenzelm@28238
   203
  on the current search path of the shell.
wenzelm@28215
   204
  
wenzelm@28215
   205
  \item[@{setting_def ISABELLE_IDENTIFIER}@{text "\<^sup>*"}] refers
wenzelm@28215
   206
  to the name of this Isabelle distribution, e.g.\ ``@{verbatim
wenzelm@47823
   207
  Isabelle2012}''.
wenzelm@28215
   208
wenzelm@28215
   209
  \item[@{setting_def ML_SYSTEM}, @{setting_def ML_HOME},
wenzelm@28215
   210
  @{setting_def ML_OPTIONS}, @{setting_def ML_PLATFORM}, @{setting_def
wenzelm@28215
   211
  ML_IDENTIFIER}@{text "\<^sup>*"}] specify the underlying ML system
wenzelm@28215
   212
  to be used for Isabelle.  There is only a fixed set of admissable
wenzelm@40800
   213
  @{setting ML_SYSTEM} names (see the @{file
wenzelm@28238
   214
  "$ISABELLE_HOME/etc/settings"} file of the distribution).
wenzelm@28215
   215
  
wenzelm@28215
   216
  The actual compiler binary will be run from the directory @{setting
wenzelm@28215
   217
  ML_HOME}, with @{setting ML_OPTIONS} as first arguments on the
wenzelm@28215
   218
  command line.  The optional @{setting ML_PLATFORM} may specify the
wenzelm@28215
   219
  binary format of ML heap images, which is useful for cross-platform
wenzelm@28215
   220
  installations.  The value of @{setting ML_IDENTIFIER} is
wenzelm@28215
   221
  automatically obtained by composing the values of @{setting
wenzelm@28215
   222
  ML_SYSTEM}, @{setting ML_PLATFORM} and the Isabelle version values.
wenzelm@47823
   223
wenzelm@51434
   224
  \item[@{setting_def ISABELLE_POLYML}@{text "\<^sup>*"}] is @{verbatim true}
wenzelm@51434
   225
  for @{setting ML_SYSTEM} values derived from Poly/ML, as opposed to
wenzelm@51434
   226
  SML/NJ where it is empty.  This is particularly useful with the
wenzelm@51434
   227
  build option @{system_option condition}
wenzelm@51434
   228
  (\secref{sec:system-options}) to restrict big sessions to something
wenzelm@51434
   229
  that SML/NJ can still handle.
wenzelm@51434
   230
wenzelm@47823
   231
  \item[@{setting_def ISABELLE_JDK_HOME}] needs to point to a full JDK
wenzelm@47823
   232
  (Java Development Kit) installation with @{verbatim javac} and
wenzelm@47823
   233
  @{verbatim jar} executables.  This is essential for Isabelle/Scala
wenzelm@47823
   234
  and other JVM-based tools to work properly.  Note that conventional
wenzelm@47823
   235
  @{verbatim JAVA_HOME} usually points to the JRE (Java Runtime
wenzelm@47823
   236
  Environment), not JDK.
wenzelm@28215
   237
  
wenzelm@28215
   238
  \item[@{setting_def ISABELLE_PATH}] is a list of directories
wenzelm@28215
   239
  (separated by colons) where Isabelle logic images may reside.  When
wenzelm@28215
   240
  looking up heaps files, the value of @{setting ML_IDENTIFIER} is
wenzelm@28215
   241
  appended to each component internally.
wenzelm@28215
   242
  
wenzelm@28215
   243
  \item[@{setting_def ISABELLE_OUTPUT}@{text "\<^sup>*"}] is a
wenzelm@28215
   244
  directory where output heap files should be stored by default. The
wenzelm@28215
   245
  ML system and Isabelle version identifier is appended here, too.
wenzelm@28215
   246
  
wenzelm@28215
   247
  \item[@{setting_def ISABELLE_BROWSER_INFO}] is the directory where
wenzelm@28215
   248
  theory browser information (HTML text, graph data, and printable
wenzelm@28215
   249
  documents) is stored (see also \secref{sec:info}).  The default
wenzelm@28215
   250
  value is @{verbatim "$ISABELLE_HOME_USER/browser_info"}.
wenzelm@28215
   251
  
wenzelm@28215
   252
  \item[@{setting_def ISABELLE_LOGIC}] specifies the default logic to
wenzelm@28215
   253
  load if none is given explicitely by the user.  The default value is
wenzelm@28215
   254
  @{verbatim HOL}.
wenzelm@28215
   255
  
wenzelm@28215
   256
  \item[@{setting_def ISABELLE_LINE_EDITOR}] specifies the default
wenzelm@28238
   257
  line editor for the @{tool_ref tty} interface.
wenzelm@28215
   258
wenzelm@28215
   259
  \item[@{setting_def ISABELLE_LATEX}, @{setting_def
wenzelm@28215
   260
  ISABELLE_PDFLATEX}, @{setting_def ISABELLE_BIBTEX}, @{setting_def
wenzelm@28215
   261
  ISABELLE_DVIPS}] refer to {\LaTeX} related tools for Isabelle
wenzelm@28215
   262
  document preparation (see also \secref{sec:tool-latex}).
wenzelm@28215
   263
  
wenzelm@28215
   264
  \item[@{setting_def ISABELLE_TOOLS}] is a colon separated list of
wenzelm@28504
   265
  directories that are scanned by @{executable isabelle} for external
wenzelm@28504
   266
  utility programs (see also \secref{sec:isabelle-tool}).
wenzelm@28215
   267
  
wenzelm@28215
   268
  \item[@{setting_def ISABELLE_DOCS}] is a colon separated list of
wenzelm@28215
   269
  directories with documentation files.
wenzelm@28215
   270
  
wenzelm@28215
   271
  \item[@{setting_def ISABELLE_DOC_FORMAT}] specifies the preferred
wenzelm@50197
   272
  document format, typically @{verbatim pdf} or @{verbatim dvi}.
wenzelm@50197
   273
wenzelm@50197
   274
  \item[@{setting_def PDF_VIEWER}] specifies the command-line to be
wenzelm@50197
   275
  used for displaying @{verbatim pdf} files.
wenzelm@50197
   276
wenzelm@50197
   277
  \item[@{setting_def DVI_VIEWER}] specifies the command-line to be
wenzelm@50197
   278
  used for displaying @{verbatim dvi} files.
wenzelm@28215
   279
  
wenzelm@28215
   280
  \item[@{setting_def PRINT_COMMAND}] specifies the standard printer
wenzelm@28215
   281
  spool command, which is expected to accept @{verbatim ps} files.
wenzelm@28215
   282
  
wenzelm@28215
   283
  \item[@{setting_def ISABELLE_TMP_PREFIX}@{text "\<^sup>*"}] is the
wenzelm@28238
   284
  prefix from which any running @{executable "isabelle-process"}
wenzelm@28238
   285
  derives an individual directory for temporary files.  The default is
wenzelm@28215
   286
  somewhere in @{verbatim "/tmp"}.
wenzelm@28215
   287
  
wenzelm@28215
   288
  \end{description}
wenzelm@28215
   289
*}
wenzelm@28215
   290
wenzelm@28215
   291
wenzelm@32323
   292
subsection {* Additional components \label{sec:components} *}
wenzelm@32323
   293
wenzelm@32323
   294
text {* Any directory may be registered as an explicit \emph{Isabelle
wenzelm@32323
   295
  component}.  The general layout conventions are that of the main
wenzelm@32323
   296
  Isabelle distribution itself, and the following two files (both
wenzelm@32323
   297
  optional) have a special meaning:
wenzelm@32323
   298
wenzelm@32323
   299
  \begin{itemize}
wenzelm@32323
   300
wenzelm@32323
   301
  \item @{verbatim "etc/settings"} holds additional settings that are
wenzelm@32323
   302
  initialized when bootstrapping the overall Isabelle environment,
wenzelm@32323
   303
  cf.\ \secref{sec:boot}.  As usual, the content is interpreted as a
wenzelm@32323
   304
  @{verbatim bash} script.  It may refer to the component's enclosing
wenzelm@32323
   305
  directory via the @{verbatim "COMPONENT"} shell variable.
wenzelm@32323
   306
wenzelm@32323
   307
  For example, the following setting allows to refer to files within
wenzelm@32323
   308
  the component later on, without having to hardwire absolute paths:
wenzelm@32323
   309
wenzelm@48838
   310
\begin{ttbox}
wenzelm@48838
   311
MY_COMPONENT_HOME="$COMPONENT"
wenzelm@48838
   312
\end{ttbox}
wenzelm@32323
   313
wenzelm@32323
   314
  Components can also add to existing Isabelle settings such as
wenzelm@32323
   315
  @{setting_def ISABELLE_TOOLS}, in order to provide
wenzelm@32323
   316
  component-specific tools that can be invoked by end-users.  For
wenzelm@32323
   317
  example:
wenzelm@32323
   318
wenzelm@48838
   319
\begin{ttbox}
wenzelm@48838
   320
ISABELLE_TOOLS="$ISABELLE_TOOLS:$COMPONENT/lib/Tools"
wenzelm@48838
   321
\end{ttbox}
wenzelm@32323
   322
wenzelm@32323
   323
  \item @{verbatim "etc/components"} holds a list of further
wenzelm@32323
   324
  sub-components of the same structure.  The directory specifications
wenzelm@32323
   325
  given here can be either absolute (with leading @{verbatim "/"}) or
wenzelm@32323
   326
  relative to the component's main directory.
wenzelm@32323
   327
wenzelm@32323
   328
  \end{itemize}
wenzelm@32323
   329
wenzelm@32323
   330
  The root of component initialization is @{setting ISABELLE_HOME}
wenzelm@32323
   331
  itself.  After initializing all of its sub-components recursively,
wenzelm@32323
   332
  @{setting ISABELLE_HOME_USER} is included in the same manner (if
wenzelm@40569
   333
  that directory exists).  This allows to install private components
wenzelm@40569
   334
  via @{verbatim "$ISABELLE_HOME_USER/etc/components"}, although it is
wenzelm@40569
   335
  often more convenient to do that programmatically via the
wenzelm@40569
   336
  \verb,init_component, shell function in the \verb,etc/settings,
wenzelm@40569
   337
  script of \verb,$ISABELLE_HOME_USER, (or any other component
wenzelm@40569
   338
  directory).  For example:
wenzelm@48838
   339
\begin{ttbox}
wenzelm@48838
   340
init_component "$HOME/screwdriver-2.0"
wenzelm@48838
   341
\end{ttbox}
wenzelm@48838
   342
wenzelm@48838
   343
  This is tolerant wrt.\ missing component directories, but might
wenzelm@48838
   344
  produce a warning.
wenzelm@48838
   345
wenzelm@48838
   346
  \medskip More complex situations may be addressed by initializing
wenzelm@48838
   347
  components listed in a given catalog file, relatively to some base
wenzelm@48838
   348
  directory:
wenzelm@48838
   349
wenzelm@48838
   350
\begin{ttbox}
wenzelm@48838
   351
init_components "$HOME/my_component_store" "some_catalog_file"
wenzelm@48838
   352
\end{ttbox}
wenzelm@48838
   353
wenzelm@48838
   354
  The component directories listed in the catalog file are treated as
wenzelm@48838
   355
  relative to the given base directory.
wenzelm@48844
   356
wenzelm@48844
   357
  See also \secref{sec:tool-components} for some tool-support for
wenzelm@48844
   358
  resolving components that are formally initialized but not installed
wenzelm@48844
   359
  yet.
wenzelm@32323
   360
*}
wenzelm@32323
   361
wenzelm@32323
   362
wenzelm@28215
   363
section {* The raw Isabelle process *}
wenzelm@28215
   364
wenzelm@28215
   365
text {*
wenzelm@28504
   366
  The @{executable_def "isabelle-process"} executable runs bare-bones
wenzelm@28504
   367
  Isabelle logic sessions --- either interactively or in batch mode.
wenzelm@28504
   368
  It provides an abstraction over the underlying ML system, and over
wenzelm@28504
   369
  the actual heap file locations.  Its usage is:
wenzelm@28215
   370
wenzelm@28215
   371
\begin{ttbox}
wenzelm@28238
   372
Usage: isabelle-process [OPTIONS] [INPUT] [OUTPUT]
wenzelm@28215
   373
wenzelm@28215
   374
  Options are:
wenzelm@28215
   375
    -I           startup Isar interaction mode
wenzelm@28215
   376
    -P           startup Proof General interaction mode
wenzelm@28215
   377
    -S           secure mode -- disallow critical operations
wenzelm@45028
   378
    -T ADDR      startup process wrapper, with socket address
wenzelm@38253
   379
    -W IN:OUT    startup process wrapper, with input/output fifos
wenzelm@28215
   380
    -e MLTEXT    pass MLTEXT to the ML session
wenzelm@28215
   381
    -m MODE      add print mode for output
wenzelm@52056
   382
    -o OPTION    override Isabelle system OPTION (via NAME=VAL or NAME)
wenzelm@28215
   383
    -q           non-interactive session
wenzelm@28215
   384
    -r           open heap file read-only
wenzelm@28215
   385
    -w           reset write permissions on OUTPUT
wenzelm@28215
   386
wenzelm@28215
   387
  INPUT (default "\$ISABELLE_LOGIC") and OUTPUT specify in/out heaps.
wenzelm@28215
   388
  These are either names to be searched in the Isabelle path, or
wenzelm@28215
   389
  actual file names (containing at least one /).
wenzelm@28215
   390
  If INPUT is "RAW_ML_SYSTEM", just start the bare bones ML system.
wenzelm@28215
   391
\end{ttbox}
wenzelm@28215
   392
wenzelm@28215
   393
  Input files without path specifications are looked up in the
wenzelm@28215
   394
  @{setting ISABELLE_PATH} setting, which may consist of multiple
wenzelm@28215
   395
  components separated by colons --- these are tried in the given
wenzelm@28215
   396
  order with the value of @{setting ML_IDENTIFIER} appended
wenzelm@28215
   397
  internally.  In a similar way, base names are relative to the
wenzelm@28215
   398
  directory specified by @{setting ISABELLE_OUTPUT}.  In any case,
wenzelm@28215
   399
  actual file locations may also be given by including at least one
wenzelm@28215
   400
  slash (@{verbatim "/"}) in the name (hint: use @{verbatim "./"} to
wenzelm@28215
   401
  refer to the current directory).
wenzelm@28215
   402
*}
wenzelm@28215
   403
wenzelm@28215
   404
wenzelm@28223
   405
subsubsection {* Options *}
wenzelm@28215
   406
wenzelm@28215
   407
text {*
wenzelm@28215
   408
  If the input heap file does not have write permission bits set, or
wenzelm@28215
   409
  the @{verbatim "-r"} option is given explicitely, then the session
wenzelm@28215
   410
  started will be read-only.  That is, the ML world cannot be
wenzelm@28215
   411
  committed back into the image file.  Otherwise, a writable session
wenzelm@28215
   412
  enables commits into either the input file, or into another output
wenzelm@28215
   413
  heap file (if that is given as the second argument on the command
wenzelm@28215
   414
  line).
wenzelm@28215
   415
wenzelm@28215
   416
  The read-write state of sessions is determined at startup only, it
wenzelm@28215
   417
  cannot be changed intermediately. Also note that heap images may
wenzelm@28215
   418
  require considerable amounts of disk space (approximately
wenzelm@28215
   419
  50--200~MB). Users are responsible for themselves to dispose their
wenzelm@28215
   420
  heap files when they are no longer needed.
wenzelm@28215
   421
wenzelm@28215
   422
  \medskip The @{verbatim "-w"} option makes the output heap file
wenzelm@28215
   423
  read-only after terminating.  Thus subsequent invocations cause the
wenzelm@28215
   424
  logic image to be read-only automatically.
wenzelm@28215
   425
wenzelm@28215
   426
  \medskip Using the @{verbatim "-e"} option, arbitrary ML code may be
wenzelm@28215
   427
  passed to the Isabelle session from the command line. Multiple
wenzelm@28215
   428
  @{verbatim "-e"}'s are evaluated in the given order. Strange things
wenzelm@28215
   429
  may happen when errorneous ML code is provided. Also make sure that
wenzelm@28215
   430
  the ML commands are terminated properly by semicolon.
wenzelm@28215
   431
wenzelm@28215
   432
  \medskip The @{verbatim "-m"} option adds identifiers of print modes
wenzelm@28215
   433
  to be made active for this session. Typically, this is used by some
wenzelm@28215
   434
  user interface, e.g.\ to enable output of proper mathematical
wenzelm@28215
   435
  symbols.
wenzelm@28215
   436
wenzelm@28215
   437
  \medskip Isabelle normally enters an interactive top-level loop
wenzelm@28215
   438
  (after processing the @{verbatim "-e"} texts). The @{verbatim "-q"}
wenzelm@28215
   439
  option inhibits interaction, thus providing a pure batch mode
wenzelm@28215
   440
  facility.
wenzelm@28215
   441
wenzelm@52056
   442
  \medskip Option @{verbatim "-s"} allows to override Isabelle system
wenzelm@52056
   443
  options for this process, see also \secref{sec:system-options}.
wenzelm@52056
   444
wenzelm@28215
   445
  \medskip The @{verbatim "-I"} option makes Isabelle enter Isar
wenzelm@28215
   446
  interaction mode on startup, instead of the primitive ML top-level.
wenzelm@28215
   447
  The @{verbatim "-P"} option configures the top-level loop for
wenzelm@51932
   448
  interaction with the Proof General user interface.
wenzelm@38253
   449
wenzelm@45028
   450
  \medskip The @{verbatim "-T"} or @{verbatim "-W"} option makes
wenzelm@49173
   451
  Isabelle enter a special process wrapper for interaction via
wenzelm@49173
   452
  Isabelle/Scala, see also @{file
wenzelm@45028
   453
  "~~/src/Pure/System/isabelle_process.scala"}.  The protocol between
wenzelm@45028
   454
  the ML and JVM process is private to the implementation.
wenzelm@28215
   455
wenzelm@28215
   456
  \medskip The @{verbatim "-S"} option makes the Isabelle process more
wenzelm@28215
   457
  secure by disabling some critical operations, notably runtime
wenzelm@28215
   458
  compilation and evaluation of ML source code.
wenzelm@28215
   459
*}
wenzelm@28215
   460
wenzelm@28215
   461
wenzelm@28223
   462
subsubsection {* Examples *}
wenzelm@28215
   463
wenzelm@28215
   464
text {*
wenzelm@28215
   465
  Run an interactive session of the default object-logic (as specified
wenzelm@28215
   466
  by the @{setting ISABELLE_LOGIC} setting) like this:
wenzelm@28215
   467
\begin{ttbox}
wenzelm@28238
   468
isabelle-process
wenzelm@28215
   469
\end{ttbox}
wenzelm@28215
   470
wenzelm@28215
   471
  Usually @{setting ISABELLE_LOGIC} refers to one of the standard
wenzelm@28215
   472
  logic images, which are read-only by default.  A writable session
wenzelm@47823
   473
  --- based on @{verbatim HOL}, but output to @{verbatim Test} (in the
wenzelm@28238
   474
  directory specified by the @{setting ISABELLE_OUTPUT} setting) ---
wenzelm@28215
   475
  may be invoked as follows:
wenzelm@28215
   476
\begin{ttbox}
wenzelm@47823
   477
isabelle-process HOL Test
wenzelm@28215
   478
\end{ttbox}
wenzelm@28215
   479
  Ending this session normally (e.g.\ by typing control-D) dumps the
wenzelm@47823
   480
  whole ML system state into @{verbatim Test} (be prepared for more
wenzelm@47823
   481
  than 100\,MB):
wenzelm@28215
   482
wenzelm@47823
   483
  The @{verbatim Test} session may be continued later (still in
wenzelm@28215
   484
  writable state) by:
wenzelm@28215
   485
\begin{ttbox}
wenzelm@47823
   486
isabelle-process Test
wenzelm@28215
   487
\end{ttbox}
wenzelm@47823
   488
  A read-only @{verbatim Test} session may be started by:
wenzelm@28215
   489
\begin{ttbox}
wenzelm@47823
   490
isabelle-process -r Test
wenzelm@28215
   491
\end{ttbox}
wenzelm@28215
   492
wenzelm@28238
   493
  \bigskip The next example demonstrates batch execution of Isabelle.
wenzelm@47823
   494
  We retrieve the @{verbatim Main} theory value from the theory loader
wenzelm@47823
   495
  within ML (observe the delicate quoting rules for the Bash shell
wenzelm@47823
   496
  vs.\ ML):
wenzelm@28215
   497
\begin{ttbox}
wenzelm@47823
   498
isabelle-process -e 'Thy_Info.get_theory "Main";' -q -r HOL
wenzelm@28215
   499
\end{ttbox}
wenzelm@28215
   500
  Note that the output text will be interspersed with additional junk
wenzelm@28238
   501
  messages by the ML runtime environment.  The @{verbatim "-W"} option
wenzelm@28238
   502
  allows to communicate with the Isabelle process via an external
wenzelm@28238
   503
  program in a more robust fashion.
wenzelm@28238
   504
*}
wenzelm@28238
   505
wenzelm@28238
   506
wenzelm@48813
   507
section {* The Isabelle tool wrapper \label{sec:isabelle-tool} *}
wenzelm@28238
   508
wenzelm@28238
   509
text {*
wenzelm@28238
   510
  All Isabelle related tools and interfaces are called via a common
wenzelm@28504
   511
  wrapper --- @{executable isabelle}:
wenzelm@28238
   512
wenzelm@28238
   513
\begin{ttbox}
wenzelm@28504
   514
Usage: isabelle TOOL [ARGS ...]
wenzelm@28238
   515
wenzelm@28506
   516
  Start Isabelle tool NAME with ARGS; pass "-?" for tool specific help.
wenzelm@28238
   517
wenzelm@48858
   518
Available tools:
wenzelm@48858
   519
  \dots
wenzelm@28238
   520
\end{ttbox}
wenzelm@28238
   521
wenzelm@28238
   522
  In principle, Isabelle tools are ordinary executable scripts that
wenzelm@28238
   523
  are run within the Isabelle settings environment, see
wenzelm@28238
   524
  \secref{sec:settings}.  The set of available tools is collected by
wenzelm@28504
   525
  @{executable isabelle} from the directories listed in the @{setting
wenzelm@28238
   526
  ISABELLE_TOOLS} setting.  Do not try to call the scripts directly
wenzelm@28238
   527
  from the shell.  Neither should you add the tool directories to your
wenzelm@28238
   528
  shell's search path!
wenzelm@28238
   529
*}
wenzelm@28238
   530
wenzelm@28238
   531
wenzelm@28238
   532
subsubsection {* Examples *}
wenzelm@28238
   533
wenzelm@48813
   534
text {* Show the list of available documentation of the Isabelle
wenzelm@48813
   535
  distribution:
wenzelm@28238
   536
wenzelm@28238
   537
\begin{ttbox}
wenzelm@28504
   538
  isabelle doc
wenzelm@28238
   539
\end{ttbox}
wenzelm@28238
   540
wenzelm@28238
   541
  View a certain document as follows:
wenzelm@28238
   542
\begin{ttbox}
wenzelm@47823
   543
  isabelle doc system
wenzelm@28238
   544
\end{ttbox}
wenzelm@28238
   545
wenzelm@48813
   546
  Query the Isabelle settings environment:
wenzelm@28238
   547
\begin{ttbox}
wenzelm@48813
   548
  isabelle getenv ISABELLE_HOME_USER
wenzelm@28238
   549
\end{ttbox}
wenzelm@28215
   550
*}
wenzelm@28215
   551
wenzelm@28223
   552
end