doc-src/System/Thy/Misc.thy
author haftmann
Tue, 07 Oct 2008 16:07:50 +0200
changeset 28524 644b62cf678f
parent 28504 7ad7d7d6df47
child 28916 0a802cdda340
permissions -rw-r--r--
arbitrary is undefined
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
28224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
     1
(* $Id$ *)
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
     2
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
     3
theory Misc
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
     4
imports Pure
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
     5
begin
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
     6
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
     7
chapter {* Miscellaneous tools \label{ch:tools} *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
     8
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
     9
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    10
  Subsequently we describe various Isabelle related utilities, given
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    11
  in alphabetical order.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    12
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    13
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    14
28248
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    15
section {* The Proof General / Emacs interface *}
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    16
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    17
text {*
28253
wenzelm
parents: 28248
diff changeset
    18
  The @{tool_def emacs} tool invokes a version of Emacs and Proof
28248
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    19
  General within the regular Isabelle settings environment
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    20
  (\secref{sec:settings}).  This is more robust than starting Emacs
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    21
  separately, loading the Proof General lisp files, and then
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    22
  attempting to start Isabelle with dynamic @{setting PATH} lookup
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    23
  etc.
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    24
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    25
  The actual interface script is part of the Proof General
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    26
  distribution~\cite{proofgeneral}; its usage depends on the
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    27
  particular version.  There are some options available, such as
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    28
  @{verbatim "-l"} for passing the logic image to be used by default,
28253
wenzelm
parents: 28248
diff changeset
    29
  or @{verbatim "-m"} to tune the standard print mode.  The following
wenzelm
parents: 28248
diff changeset
    30
  Isabelle settings are particularly important for Proof General:
28248
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    31
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    32
  \begin{description}
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    33
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    34
  \item[@{setting_def PROOFGENERAL_HOME}] points to the main
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    35
  installation directory of the Proof General distribution.  The
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    36
  default settings try to locate this in a number of standard places,
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    37
  notably @{verbatim "$ISABELLE_HOME/contrib/ProofGeneral"}.
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    38
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    39
  \item[@{setting_def PROOFGENERAL_OPTIONS}] is implicitly prefixed to
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    40
  the command line of any invocation of the Proof General @{verbatim
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    41
  interface} script.
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    42
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    43
  \item[@{setting_def XSYMBOL_INSTALLFONTS}] may contain a small shell
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    44
  script to install the X11 fonts required for the X-Symbols mode of
28253
wenzelm
parents: 28248
diff changeset
    45
  Proof General.  This is only relevant if the X11 display server runs
28248
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    46
  on a different machine than the Emacs application, with a different
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    47
  file-system view on the Proof General installation.  Under most
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    48
  circumstances Proof General is able to refer to the font files that
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    49
  are part of its distribution.
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    50
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    51
  \end{description}
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    52
*}
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    53
b2869ebcf8e3 separate emacs tool for Proof General / Emacs;
wenzelm
parents: 28238
diff changeset
    54
28224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    55
section {* Displaying documents *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    56
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    57
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    58
  The @{tool_def display} utility displays documents in DVI or PDF
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    59
  format:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    60
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    61
Usage: display [OPTIONS] FILE
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    62
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    63
  Options are:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    64
    -c           cleanup -- remove FILE after use
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    65
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    66
  Display document FILE (in DVI format).
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    67
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    68
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    69
  \medskip The @{verbatim "-c"} option causes the input file to be
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    70
  removed after use.  The program for viewing @{verbatim dvi} files is
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    71
  determined by the @{setting DVI_VIEWER} setting.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    72
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    73
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    74
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    75
section {* Viewing documentation \label{sec:tool-doc} *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    76
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    77
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    78
  The @{tool_def doc} utility displays online documentation:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    79
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    80
Usage: doc [DOC]
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    81
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    82
  View Isabelle documentation DOC, or show list of available documents.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    83
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    84
  If called without arguments, it lists all available documents. Each
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    85
  line starts with an identifier, followed by a short description. Any
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    86
  of these identifiers may be specified as the first argument in order
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    87
  to have the corresponding document displayed.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    88
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    89
  \medskip The @{setting ISABELLE_DOCS} setting specifies the list of
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    90
  directories (separated by colons) to be scanned for documentations.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    91
  The program for viewing @{verbatim dvi} files is determined by the
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    92
  @{setting DVI_VIEWER} setting.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    93
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    94
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    95
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    96
section {* Getting logic images *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    97
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    98
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
    99
  The @{tool_def findlogics} utility traverses all directories
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   100
  specified in @{setting ISABELLE_PATH}, looking for Isabelle logic
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   101
  images. Its usage is:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   102
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   103
Usage: findlogics
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   104
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   105
  Collect heap file names from ISABELLE_PATH.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   106
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   107
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   108
  The base names of all files found on the path are printed --- sorted
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   109
  and with duplicates removed. Also note that lookup in @{setting
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   110
  ISABELLE_PATH} includes the current values of @{setting ML_SYSTEM}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   111
  and @{setting ML_PLATFORM}. Thus switching to another ML compiler
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   112
  may change the set of logic images available.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   113
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   114
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   115
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   116
section {* Inspecting the settings environment \label{sec:tool-getenv} *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   117
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   118
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   119
  The Isabelle settings environment --- as provided by the
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   120
  site-default and user-specific settings files --- can be inspected
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   121
  with the @{tool_def getenv} utility:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   122
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   123
Usage: getenv [OPTIONS] [VARNAMES ...]
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   124
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   125
  Options are:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   126
    -a           display complete environment
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   127
    -b           print values only (doesn't work for -a)
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   128
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   129
  Get value of VARNAMES from the Isabelle settings.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   130
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   131
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   132
  With the @{verbatim "-a"} option, one may inspect the full process
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   133
  environment that Isabelle related programs are run in. This usually
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   134
  contains much more variables than are actually Isabelle settings.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   135
  Normally, output is a list of lines of the form @{text
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   136
  name}@{verbatim "="}@{text value}. The @{verbatim "-b"} option
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   137
  causes only the values to be printed.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   138
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   139
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   140
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   141
subsubsection {* Examples *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   142
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   143
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   144
  Get the ML system name and the location where the compiler binaries
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   145
  are supposed to reside as follows:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   146
\begin{ttbox}
28504
7ad7d7d6df47 simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
wenzelm
parents: 28253
diff changeset
   147
isabelle getenv ML_SYSTEM ML_HOME
28224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   148
{\out ML_SYSTEM=polyml}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   149
{\out ML_HOME=/usr/share/polyml/x86-linux}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   150
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   151
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   152
  The next one peeks at the output directory for Isabelle logic
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   153
  images:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   154
\begin{ttbox}
28504
7ad7d7d6df47 simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
wenzelm
parents: 28253
diff changeset
   155
isabelle getenv -b ISABELLE_OUTPUT
28224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   156
{\out /home/me/isabelle/heaps/polyml_x86-linux}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   157
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   158
  Here we have used the @{verbatim "-b"} option to suppress the
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   159
  @{verbatim "ISABELLE_OUTPUT="} prefix.  The value above is what
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   160
  became of the following assignment in the default settings file:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   161
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   162
ISABELLE_OUTPUT="\$ISABELLE_HOME_USER/heaps"
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   163
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   164
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   165
  Note how the @{setting ML_IDENTIFIER} value got appended
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   166
  automatically to each path component. This is a special feature of
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   167
  @{setting ISABELLE_OUTPUT}.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   168
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   169
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   170
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   171
section {* Installing standalone Isabelle executables \label{sec:tool-install} *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   172
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   173
text {*
28504
7ad7d7d6df47 simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
wenzelm
parents: 28253
diff changeset
   174
  By default, the main Isabelle binaries (@{executable "isabelle"}
7ad7d7d6df47 simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
wenzelm
parents: 28253
diff changeset
   175
  etc.)  are just run from their location within the distribution
7ad7d7d6df47 simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
wenzelm
parents: 28253
diff changeset
   176
  directory, probably indirectly by the shell through its @{setting
7ad7d7d6df47 simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
wenzelm
parents: 28253
diff changeset
   177
  PATH}.  Other schemes of installation are supported by the
7ad7d7d6df47 simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
wenzelm
parents: 28253
diff changeset
   178
  @{tool_def install} utility:
28224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   179
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   180
Usage: install [OPTIONS]
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   181
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   182
  Options are:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   183
    -d DISTDIR   use DISTDIR as Isabelle distribution
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   184
                 (default ISABELLE_HOME)
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   185
    -p DIR       install standalone binaries in DIR
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   186
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   187
  Install Isabelle executables with absolute references to the current
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   188
  distribution directory.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   189
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   190
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   191
  The @{verbatim "-d"} option overrides the current Isabelle
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   192
  distribution directory as determined by @{setting ISABELLE_HOME}.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   193
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   194
  The @{verbatim "-p"} option installs executable wrapper scripts for
28504
7ad7d7d6df47 simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
wenzelm
parents: 28253
diff changeset
   195
  @{executable "isabelle-process"}, @{executable isabelle},
28238
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   196
  @{executable Isabelle}, containing proper absolute references to the
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   197
  Isabelle distribution directory.  A typical @{verbatim DIR}
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   198
  specification would be some directory expected to be in the shell's
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   199
  @{setting PATH}, such as @{verbatim "/usr/local/bin"}.  It is
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   200
  important to note that a plain manual copy of the original Isabelle
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   201
  executables does not work, since it disrupts the integrity of the
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   202
  Isabelle distribution.
28224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   203
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   204
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   205
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   206
section {* Creating instances of the Isabelle logo *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   207
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   208
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   209
  The @{tool_def logo} utility creates any instance of the generic
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   210
  Isabelle logo as an Encapsuled Postscript file (EPS):
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   211
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   212
Usage: logo [OPTIONS] NAME
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   213
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   214
  Create instance NAME of the Isabelle logo (as EPS).
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   215
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   216
  Options are:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   217
    -o OUTFILE   set output file (default determined from NAME)
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   218
    -q           quiet mode
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   219
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   220
  You are encouraged to use this to create a derived logo for your
28504
7ad7d7d6df47 simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
wenzelm
parents: 28253
diff changeset
   221
  Isabelle project.  For example, @{verbatim isabelle} @{tool
28238
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   222
  logo}~@{verbatim Bali} creates @{verbatim isabelle_bali.eps}.
28224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   223
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   225
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   226
section {* Isabelle's version of make \label{sec:tool-make} *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   227
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   228
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   229
  The Isabelle @{tool_def make} utility is a very simple wrapper for
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   230
  ordinary Unix @{executable make}:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   231
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   232
Usage: make [ARGS ...]
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   233
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   234
  Compile the logic in current directory using IsaMakefile.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   235
  ARGS are directly passed to the system make program.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   236
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   237
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   238
  Note that the Isabelle settings environment is also active. Thus one
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   239
  may refer to its values within the @{verbatim IsaMakefile}, e.g.\
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   240
  @{verbatim "$(ISABELLE_OUTPUT)"}. Furthermore, programs started from
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   241
  the make file also inherit this environment.  Typically, @{verbatim
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   242
  IsaMakefile}s defer the real work to the @{tool_ref usedir} utility.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   243
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   244
  \medskip The basic @{verbatim IsaMakefile} convention is that the
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   245
  default target builds the actual logic, including its parents if
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   246
  appropriate.  The @{verbatim images} target is intended to build all
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   247
  local logic images, while the @{verbatim test} target shall build
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   248
  all related examples.  The @{verbatim all} target shall do
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   249
  @{verbatim images} and @{verbatim test}.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   250
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   251
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   252
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   253
subsubsection {* Examples *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   254
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   255
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   256
  Refer to the @{verbatim IsaMakefile}s of the Isabelle distribution's
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   257
  object-logics as a model for your own developments.  For example,
28238
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   258
  see @{"file" "~~/src/FOL/IsaMakefile"}.
28224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   259
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   260
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   261
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   262
section {* Make all logics *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   263
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   264
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   265
  The @{tool_def makeall} utility applies Isabelle make to all logic
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   266
  directories of the distribution:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   267
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   268
Usage: makeall [ARGS ...]
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   269
28504
7ad7d7d6df47 simplified main Isabelle executables: removed Isabelle and isabelle (replaced by isabelle-process), renamed isatool to isabelle;
wenzelm
parents: 28253
diff changeset
   270
  Apply isabelle make to all logics (passing ARGS).
28224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   271
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   272
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   273
  The arguments @{verbatim ARGS} are just passed verbatim to each
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   274
  @{tool make} invocation.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   275
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   276
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   277
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   278
section {* Printing documents *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   279
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   280
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   281
  The @{tool_def print} utility prints documents:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   282
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   283
Usage: print [OPTIONS] FILE
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   284
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   285
  Options are:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   286
    -c           cleanup -- remove FILE after use
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   287
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   288
  Print document FILE.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   289
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   290
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   291
  The @{verbatim "-c"} option causes the input file to be removed
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   292
  after use.  The printer spool command is determined by the @{setting
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   293
  PRINT_COMMAND} setting.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   294
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   295
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   296
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   297
section {* Run Isabelle with plain tty interaction \label{sec:tool-tty} *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   298
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   299
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   300
  The @{tool_def tty} utility runs the Isabelle process interactively
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   301
  within a plain terminal session:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   302
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   303
Usage: tty [OPTIONS]
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   304
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   305
  Options are:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   306
    -l NAME      logic image name (default ISABELLE_LOGIC)
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   307
    -m MODE      add print mode for output
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   308
    -p NAME      line editor program name (default ISABELLE_LINE_EDITOR)
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   309
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   310
  Run Isabelle process with plain tty interaction, and optional line editor.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   311
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   312
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   313
  The @{verbatim "-l"} option specifies the logic image.  The
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   314
  @{verbatim "-m"} option specifies additional print modes.  The The
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   315
  @{verbatim "-p"} option specifies an alternative line editor (such
28238
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   316
  as the @{executable_def rlwrap} wrapper for GNU readline); the
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   317
  fall-back is to use raw standard input.
28224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   318
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   319
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   320
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   321
section {* Remove awkward symbol names from theory sources *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   322
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   323
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   324
  The @{tool_def unsymbolize} utility tunes Isabelle theory sources to
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   325
  improve readability for plain ASCII output (e.g.\ in email
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   326
  communication).  Most notably, @{tool unsymbolize} replaces awkward
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   327
  arrow symbols such as @{verbatim "\\"}@{verbatim "<Longrightarrow>"}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   328
  by @{verbatim "==>"}.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   329
\begin{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   330
Usage: unsymbolize [FILES|DIRS...]
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   331
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   332
  Recursively find .thy/.ML files, removing unreadable symbol names.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   333
  Note: this is an ad-hoc script; there is no systematic way to replace
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   334
  symbols independently of the inner syntax of a theory!
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   335
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   336
  Renames old versions of FILES by appending "~~".
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   337
\end{ttbox}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   338
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   339
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   340
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   341
section {* Output the version identifier of the Isabelle distribution *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   342
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   343
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   344
  The @{tool_def version} utility outputs the full version string of
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   345
  the Isabelle distribution being used, e.g.\ ``@{verbatim
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   346
  "Isabelle2008: June 2008"}.  There are no options nor arguments.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   347
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   348
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   349
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   350
section {* Convert XML to YXML *}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   351
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   352
text {*
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   353
  The @{tool_def yxml} tool converts a standard XML document (stdin)
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   354
  to the much simpler and more efficient YXML format of Isabelle
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   355
  (stdout).  The YXML format is defined as follows.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   356
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   357
  \begin{enumerate}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   358
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   359
  \item The encoding is always UTF-8.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   360
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   361
  \item Body text is represented verbatim (no escaping, no special
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   362
  treatment of white space, no named entities, no CDATA chunks, no
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   363
  comments).
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   364
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   365
  \item Markup elements are represented via ASCII control characters
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   366
  @{text "\<^bold>X = 5"} and @{text "\<^bold>Y = 6"} as follows:
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   367
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   368
  \begin{tabular}{ll}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   369
    XML & YXML \\\hline
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   370
    @{verbatim "<"}@{text "name attribute"}@{verbatim "="}@{text "value \<dots>"}@{verbatim ">"} &
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   371
    @{text "\<^bold>X\<^bold>Yname\<^bold>Yattribute"}@{verbatim "="}@{text "value\<dots>\<^bold>X"} \\
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   372
    @{verbatim "</"}@{text name}@{verbatim ">"} & @{text "\<^bold>X\<^bold>Y\<^bold>X"} \\
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   373
  \end{tabular}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   374
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   375
  There is no special case for empty body text, i.e.\ @{verbatim
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   376
  "<foo/>"} is treated like @{verbatim "<foo></foo>"}.  Also note that
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   377
  @{text "\<^bold>X"} and @{text "\<^bold>Y"} may never occur in
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   378
  well-formed XML documents.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   379
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   380
  \end{enumerate}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   381
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   382
  Parsing YXML is pretty straight-forward: split the text into chunks
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   383
  separated by @{text "\<^bold>X"}, then split each chunk into
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   384
  sub-chunks separated by @{text "\<^bold>Y"}.  Markup chunks start
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   385
  with an empty sub-chunk, and a second empty sub-chunk indicates
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   386
  close of an element.  Any other non-empty chunk consists of plain
28238
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   387
  text.  For example, see @{"file" "~~/src/Pure/General/yxml.ML"} or
398bf960d3d4 misc tuning and modernization;
wenzelm
parents: 28224
diff changeset
   388
  @{"file" "~~/src/Pure/General/yxml.scala"}.
28224
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   389
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   390
  YXML documents may be detected quickly by checking that the first
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   391
  two characters are @{text "\<^bold>X\<^bold>Y"}.
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   392
*}
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   393
10487d954a8f converted misc.tex;
wenzelm
parents:
diff changeset
   394
end