doc-src/IsarImplementation/Thy/document/Integration.tex
author wenzelm
Thu, 03 Jun 2010 22:31:59 +0200
changeset 37306 2bde06a2a706
parent 37216 3165bc303f66
child 37864 814b1bca7f35
permissions -rw-r--r--
discontinued obsolete Isar.context() -- long superseded by @{context};
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     1
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     2
\begin{isabellebody}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     3
\def\isabellecontext{Integration}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     4
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     5
\isadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     6
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     7
\endisadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     8
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
     9
\isatagtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    10
\isacommand{theory}\isamarkupfalse%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    11
\ Integration\isanewline
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    12
\isakeyword{imports}\ Base\isanewline
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    13
\isakeyword{begin}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    14
\endisatagtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    15
{\isafoldtheory}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    16
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    17
\isadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    18
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    19
\endisadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    20
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    21
\isamarkupchapter{System integration%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    22
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    23
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    24
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    25
\isamarkupsection{Isar toplevel \label{sec:isar-toplevel}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    26
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    27
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    28
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    29
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    30
The Isar toplevel may be considered the centeral hub of the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    31
  Isabelle/Isar system, where all key components and sub-systems are
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    32
  integrated into a single read-eval-print loop of Isar commands.  We
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    33
  shall even incorporate the existing {\ML} toplevel of the compiler
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    34
  and run-time system (cf.\ \secref{sec:ML-toplevel}).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    35
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    36
  Isabelle/Isar departs from the original ``LCF system architecture''
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    37
  where {\ML} was really The Meta Language for defining theories and
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    38
  conducting proofs.  Instead, {\ML} now only serves as the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    39
  implementation language for the system (and user extensions), while
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    40
  the specific Isar toplevel supports the concepts of theory and proof
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    41
  development natively.  This includes the graph structure of theories
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    42
  and the block structure of proofs, support for unlimited undo,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    43
  facilities for tracing, debugging, timing, profiling etc.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    44
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    45
  \medskip The toplevel maintains an implicit state, which is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    46
  transformed by a sequence of transitions -- either interactively or
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    47
  in batch-mode.  In interactive mode, Isar state transitions are
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    48
  encapsulated as safe transactions, such that both failure and undo
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    49
  are handled conveniently without destroying the underlying draft
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    50
  theory (cf.~\secref{sec:context-theory}).  In batch mode,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    51
  transitions operate in a linear (destructive) fashion, such that
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    52
  error conditions abort the present attempt to construct a theory or
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    53
  proof altogether.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    54
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    55
  The toplevel state is a disjoint sum of empty \isa{toplevel}, or
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    56
  \isa{theory}, or \isa{proof}.  On entering the main Isar loop we
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    57
  start with an empty toplevel.  A theory is commenced by giving a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    58
  \isa{{\isasymTHEORY}} header; within a theory we may issue theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    59
  commands such as \isa{{\isasymDEFINITION}}, or state a \isa{{\isasymTHEOREM}} to be proven.  Now we are within a proof state, with a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    60
  rich collection of Isar proof commands for structured proof
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    61
  composition, or unstructured proof scripts.  When the proof is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    62
  concluded we get back to the theory, which is then updated by
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    63
  storing the resulting fact.  Further theory declarations or theorem
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    64
  statements with proofs may follow, until we eventually conclude the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    65
  theory development by issuing \isa{{\isasymEND}}.  The resulting theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    66
  is then stored within the theory database and we are back to the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    67
  empty toplevel.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    68
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    69
  In addition to these proper state transformations, there are also
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    70
  some diagnostic commands for peeking at the toplevel state without
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    71
  modifying it (e.g.\ \isakeyword{thm}, \isakeyword{term},
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    72
  \isakeyword{print-cases}).%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    73
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    74
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    75
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    76
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    77
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    78
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    79
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    80
\isatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    81
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    82
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    83
\begin{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    84
  \indexdef{}{ML type}{Toplevel.state}\verb|type Toplevel.state| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    85
  \indexdef{}{ML}{Toplevel.UNDEF}\verb|Toplevel.UNDEF: exn| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    86
  \indexdef{}{ML}{Toplevel.is\_toplevel}\verb|Toplevel.is_toplevel: Toplevel.state -> bool| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    87
  \indexdef{}{ML}{Toplevel.theory\_of}\verb|Toplevel.theory_of: Toplevel.state -> theory| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    88
  \indexdef{}{ML}{Toplevel.proof\_of}\verb|Toplevel.proof_of: Toplevel.state -> Proof.state| \\
32836
4c6e3e7ac2bf updated generated files;
wenzelm
parents: 32189
diff changeset
    89
  \indexdef{}{ML}{Toplevel.debug}\verb|Toplevel.debug: bool Unsynchronized.ref| \\
4c6e3e7ac2bf updated generated files;
wenzelm
parents: 32189
diff changeset
    90
  \indexdef{}{ML}{Toplevel.timing}\verb|Toplevel.timing: bool Unsynchronized.ref| \\
4c6e3e7ac2bf updated generated files;
wenzelm
parents: 32189
diff changeset
    91
  \indexdef{}{ML}{Toplevel.profiling}\verb|Toplevel.profiling: int Unsynchronized.ref| \\
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    92
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    93
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    94
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    95
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    96
  \item \verb|Toplevel.state| represents Isar toplevel states,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    97
  which are normally manipulated through the concept of toplevel
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    98
  transitions only (\secref{sec:toplevel-transition}).  Also note that
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    99
  a raw toplevel state is subject to the same linearity restrictions
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   100
  as a theory context (cf.~\secref{sec:context-theory}).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   101
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   102
  \item \verb|Toplevel.UNDEF| is raised for undefined toplevel
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   103
  operations.  Many operations work only partially for certain cases,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   104
  since \verb|Toplevel.state| is a sum type.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   105
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   106
  \item \verb|Toplevel.is_toplevel|~\isa{state} checks for an empty
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   107
  toplevel state.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   108
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   109
  \item \verb|Toplevel.theory_of|~\isa{state} selects the
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   110
  background theory of \isa{state}, raises \verb|Toplevel.UNDEF|
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   111
  for an empty toplevel state.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   112
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   113
  \item \verb|Toplevel.proof_of|~\isa{state} selects the Isar proof
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   114
  state if available, otherwise raises \verb|Toplevel.UNDEF|.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   115
32836
4c6e3e7ac2bf updated generated files;
wenzelm
parents: 32189
diff changeset
   116
  \item \verb|Toplevel.debug := true| makes the toplevel print further
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   117
  details about internal error conditions, exceptions being raised
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   118
  etc.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   119
32836
4c6e3e7ac2bf updated generated files;
wenzelm
parents: 32189
diff changeset
   120
  \item \verb|Toplevel.timing := true| makes the toplevel print timing
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   121
  information for each Isar command being executed.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   122
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   123
  \item \verb|Toplevel.profiling|~\verb|:=|~\isa{n} controls
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   124
  low-level profiling of the underlying {\ML} runtime system.  For
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   125
  Poly/ML, \isa{n\ {\isacharequal}\ {\isadigit{1}}} means time and \isa{n\ {\isacharequal}\ {\isadigit{2}}} space
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   126
  profiling.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   127
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   128
  \end{description}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   129
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   130
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   131
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   132
\endisatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   133
{\isafoldmlref}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   134
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   135
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   136
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   137
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   138
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   139
\isamarkupsubsection{Toplevel transitions \label{sec:toplevel-transition}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   140
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   141
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   142
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   143
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   144
An Isar toplevel transition consists of a partial function on the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   145
  toplevel state, with additional information for diagnostics and
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   146
  error reporting: there are fields for command name, source position,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   147
  optional source text, as well as flags for interactive-only commands
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   148
  (which issue a warning in batch-mode), printing of result state,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   149
  etc.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   150
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   151
  The operational part is represented as the sequential union of a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   152
  list of partial functions, which are tried in turn until the first
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   153
  one succeeds.  This acts like an outer case-expression for various
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   154
  alternative state transitions.  For example, \isakeyword{qed} works
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   155
  differently for a local proofs vs.\ the global ending of the main
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   156
  proof.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   157
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   158
  Toplevel transitions are composed via transition transformers.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   159
  Internally, Isar commands are put together from an empty transition
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   160
  extended by name and source position.  It is then left to the
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   161
  individual command parser to turn the given concrete syntax into a
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   162
  suitable transition transformer that adjoins actual operations on a
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   163
  theory or proof state etc.%
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   164
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   165
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   166
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   167
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   168
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   169
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   170
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   171
\isatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   172
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   173
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   174
\begin{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   175
  \indexdef{}{ML}{Toplevel.print}\verb|Toplevel.print: Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   176
  \indexdef{}{ML}{Toplevel.no\_timing}\verb|Toplevel.no_timing: Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   177
  \indexdef{}{ML}{Toplevel.keep}\verb|Toplevel.keep: (Toplevel.state -> unit) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   178
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   179
  \indexdef{}{ML}{Toplevel.theory}\verb|Toplevel.theory: (theory -> theory) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   180
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   181
  \indexdef{}{ML}{Toplevel.theory\_to\_proof}\verb|Toplevel.theory_to_proof: (theory -> Proof.state) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   182
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   183
  \indexdef{}{ML}{Toplevel.proof}\verb|Toplevel.proof: (Proof.state -> Proof.state) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   184
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   185
  \indexdef{}{ML}{Toplevel.proofs}\verb|Toplevel.proofs: (Proof.state -> Proof.state Seq.seq) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   186
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   187
  \indexdef{}{ML}{Toplevel.end\_proof}\verb|Toplevel.end_proof: (bool -> Proof.state -> Proof.context) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   188
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   189
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   190
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   191
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   192
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   193
  \item \verb|Toplevel.print|~\isa{tr} sets the print flag, which
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   194
  causes the toplevel loop to echo the result state (in interactive
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   195
  mode).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   196
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   197
  \item \verb|Toplevel.no_timing|~\isa{tr} indicates that the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   198
  transition should never show timing information, e.g.\ because it is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   199
  a diagnostic command.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   200
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   201
  \item \verb|Toplevel.keep|~\isa{tr} adjoins a diagnostic
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   202
  function.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   203
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   204
  \item \verb|Toplevel.theory|~\isa{tr} adjoins a theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   205
  transformer.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   206
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   207
  \item \verb|Toplevel.theory_to_proof|~\isa{tr} adjoins a global
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   208
  goal function, which turns a theory into a proof state.  The theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   209
  may be changed before entering the proof; the generic Isar goal
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   210
  setup includes an argument that specifies how to apply the proven
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   211
  result to the theory, when the proof is finished.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   212
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   213
  \item \verb|Toplevel.proof|~\isa{tr} adjoins a deterministic
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   214
  proof command, with a singleton result.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   215
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   216
  \item \verb|Toplevel.proofs|~\isa{tr} adjoins a general proof
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   217
  command, with zero or more result states (represented as a lazy
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   218
  list).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   219
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   220
  \item \verb|Toplevel.end_proof|~\isa{tr} adjoins a concluding
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   221
  proof command, that returns the resulting theory, after storing the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   222
  resulting facts in the context etc.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   223
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   224
  \end{description}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   225
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   226
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   227
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   228
\endisatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   229
{\isafoldmlref}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   230
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   231
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   232
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   233
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   234
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   235
\isamarkupsubsection{Toplevel control%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   236
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   237
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   238
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   239
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   240
There are a few special control commands that modify the behavior
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   241
  the toplevel itself, and only make sense in interactive mode.  Under
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   242
  normal circumstances, the user encounters these only implicitly as
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   243
  part of the protocol between the Isabelle/Isar system and a
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   244
  user-interface such as Proof~General.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   245
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   246
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   247
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   248
  \item \isacommand{undo} follows the three-level hierarchy of empty
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   249
  toplevel vs.\ theory vs.\ proof: undo within a proof reverts to the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   250
  previous proof context, undo after a proof reverts to the theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   251
  before the initial goal statement, undo of a theory command reverts
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   252
  to the previous theory value, undo of a theory header discontinues
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   253
  the current theory development and removes it from the theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   254
  database (\secref{sec:theory-database}).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   255
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   256
  \item \isacommand{kill} aborts the current level of development:
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   257
  kill in a proof context reverts to the theory before the initial
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   258
  goal statement, kill in a theory context aborts the current theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   259
  development, removing it from the database.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   260
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   261
  \item \isacommand{exit} drops out of the Isar toplevel into the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   262
  underlying {\ML} toplevel (\secref{sec:ML-toplevel}).  The Isar
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   263
  toplevel state is preserved and may be continued later.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   264
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   265
  \item \isacommand{quit} terminates the Isabelle/Isar process without
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   266
  saving.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   267
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   268
  \end{description}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   269
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   270
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   271
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   272
\isamarkupsection{ML toplevel \label{sec:ML-toplevel}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   273
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   274
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   275
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   276
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   277
The {\ML} toplevel provides a read-compile-eval-print loop for {\ML}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   278
  values, types, structures, and functors.  {\ML} declarations operate
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   279
  on the global system state, which consists of the compiler
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   280
  environment plus the values of {\ML} reference variables.  There is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   281
  no clean way to undo {\ML} declarations, except for reverting to a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   282
  previously saved state of the whole Isabelle process.  {\ML} input
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   283
  is either read interactively from a TTY, or from a string (usually
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   284
  within a theory text), or from a source file (usually loaded from a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   285
  theory).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   286
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   287
  Whenever the {\ML} toplevel is active, the current Isabelle theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   288
  context is passed as an internal reference variable.  Thus {\ML}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   289
  code may access the theory context during compilation, it may even
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   290
  change the value of a theory being under construction --- while
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   291
  observing the usual linearity restrictions
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   292
  (cf.~\secref{sec:context-theory}).%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   293
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   294
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   295
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   296
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   297
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   298
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   299
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   300
\isatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   301
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   302
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   303
\begin{mldecls}
32189
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   304
  \indexdef{}{ML}{ML\_Context.the\_generic\_context}\verb|ML_Context.the_generic_context: unit -> Context.generic| \\
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   305
  \indexdef{}{ML}{Context.$>$$>$ }\verb|Context.>> : (Context.generic -> Context.generic) -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   306
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   307
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   308
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   309
32189
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   310
  \item \verb|ML_Context.the_generic_context ()| refers to the theory
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   311
  context of the {\ML} toplevel --- at compile time!  {\ML} code needs
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   312
  to take care to refer to \verb|ML_Context.the_generic_context ()|
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   313
  correctly.  Recall that evaluation of a function body is delayed
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   314
  until actual runtime.  Moreover, persistent {\ML} toplevel bindings
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   315
  to an unfinished theory should be avoided: code should either
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   316
  project out the desired information immediately, or produce an
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   317
  explicit \verb|theory_ref| (cf.\ \secref{sec:context-theory}).
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   318
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   319
  \item \verb|Context.>>|~\isa{f} applies context transformation
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   320
  \isa{f} to the implicit context of the {\ML} toplevel.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   321
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   322
  \end{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   323
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   324
  It is very important to note that the above functions are really
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   325
  restricted to the compile time, even though the {\ML} compiler is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   326
  invoked at runtime!  The majority of {\ML} code uses explicit
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   327
  functional arguments of a theory or proof context instead.  Thus it
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   328
  may be invoked for an arbitrary context later on, without having to
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   329
  worry about any operational details.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   330
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   331
  \bigskip
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   332
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   333
  \begin{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   334
  \indexdef{}{ML}{Isar.main}\verb|Isar.main: unit -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   335
  \indexdef{}{ML}{Isar.loop}\verb|Isar.loop: unit -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   336
  \indexdef{}{ML}{Isar.state}\verb|Isar.state: unit -> Toplevel.state| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   337
  \indexdef{}{ML}{Isar.exn}\verb|Isar.exn: unit -> (exn * string) option| \\
33293
4645818f0fbd updated Isar.goal;
wenzelm
parents: 32836
diff changeset
   338
  \indexdef{}{ML}{Isar.goal}\verb|Isar.goal: unit ->|\isasep\isanewline%
4645818f0fbd updated Isar.goal;
wenzelm
parents: 32836
diff changeset
   339
\verb|  {context: Proof.context, facts: thm list, goal: thm}| \\
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   340
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   341
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   342
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   343
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   344
  \item \verb|Isar.main ()| invokes the Isar toplevel from {\ML},
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   345
  initializing an empty toplevel state.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   346
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   347
  \item \verb|Isar.loop ()| continues the Isar toplevel with the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   348
  current state, after having dropped out of the Isar toplevel loop.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   349
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   350
  \item \verb|Isar.state ()| and \verb|Isar.exn ()| get current
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   351
  toplevel state and error condition, respectively.  This only works
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   352
  after having dropped out of the Isar toplevel loop.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   353
33293
4645818f0fbd updated Isar.goal;
wenzelm
parents: 32836
diff changeset
   354
  \item \verb|Isar.goal ()| produces the full Isar goal state,
4645818f0fbd updated Isar.goal;
wenzelm
parents: 32836
diff changeset
   355
  consisting of proof context, facts that have been indicated for
4645818f0fbd updated Isar.goal;
wenzelm
parents: 32836
diff changeset
   356
  immediate use, and the tactical goal according to
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   357
  \secref{sec:tactical-goals}.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   358
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   359
  \end{description}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   360
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   361
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   362
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   363
\endisatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   364
{\isafoldmlref}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   365
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   366
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   367
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   368
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   369
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   370
\isamarkupsection{Theory database \label{sec:theory-database}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   371
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   372
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   373
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   374
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   375
The theory database maintains a collection of theories, together
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   376
  with some administrative information about their original sources,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   377
  which are held in an external store (i.e.\ some directory within the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   378
  regular file system).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   379
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   380
  The theory database is organized as a directed acyclic graph;
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   381
  entries are referenced by theory name.  Although some additional
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   382
  interfaces allow to include a directory specification as well, this
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   383
  is only a hint to the underlying theory loader.  The internal theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   384
  name space is flat!
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   385
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   386
  Theory \isa{A} is associated with the main theory file \isa{A}\verb,.thy,, which needs to be accessible through the theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   387
  loader path.  Any number of additional {\ML} source files may be
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   388
  associated with each theory, by declaring these dependencies in the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   389
  theory header as \isa{{\isasymUSES}}, and loading them consecutively
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   390
  within the theory context.  The system keeps track of incoming {\ML}
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   391
  sources and associates them with the current theory.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   392
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   393
  The basic internal actions of the theory database are \isa{update}, \isa{outdate}, and \isa{remove}:
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   394
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   395
  \begin{itemize}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   396
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   397
  \item \isa{update\ A} introduces a link of \isa{A} with a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   398
  \isa{theory} value of the same name; it asserts that the theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   399
  sources are now consistent with that value;
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   400
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   401
  \item \isa{outdate\ A} invalidates the link of a theory database
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   402
  entry to its sources, but retains the present theory value;
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   403
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   404
  \item \isa{remove\ A} deletes entry \isa{A} from the theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   405
  database.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   406
  
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   407
  \end{itemize}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   408
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   409
  These actions are propagated to sub- or super-graphs of a theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   410
  entry as expected, in order to preserve global consistency of the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   411
  state of all loaded theories with the sources of the external store.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   412
  This implies certain causalities between actions: \isa{update}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   413
  or \isa{outdate} of an entry will \isa{outdate} all
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   414
  descendants; \isa{remove} will \isa{remove} all descendants.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   415
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   416
  \medskip There are separate user-level interfaces to operate on the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   417
  theory database directly or indirectly.  The primitive actions then
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   418
  just happen automatically while working with the system.  In
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   419
  particular, processing a theory header \isa{{\isasymTHEORY}\ A\ {\isasymIMPORTS}\ B\isactrlsub {\isadigit{1}}\ {\isasymdots}\ B\isactrlsub n\ {\isasymBEGIN}} ensures that the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   420
  sub-graph of the collective imports \isa{B\isactrlsub {\isadigit{1}}\ {\isasymdots}\ B\isactrlsub n}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   421
  is up-to-date, too.  Earlier theories are reloaded as required, with
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   422
  \isa{update} actions proceeding in topological order according to
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   423
  theory dependencies.  There may be also a wave of implied \isa{outdate} actions for derived theory nodes until a stable situation
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   424
  is achieved eventually.%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   425
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   426
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   427
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   428
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   429
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   430
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   431
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   432
\isatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   433
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   434
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   435
\begin{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   436
  \indexdef{}{ML}{theory}\verb|theory: string -> theory| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   437
  \indexdef{}{ML}{use\_thy}\verb|use_thy: string -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   438
  \indexdef{}{ML}{use\_thys}\verb|use_thys: string list -> unit| \\
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   439
  \indexdef{}{ML}{Thy\_Info.touch\_thy}\verb|Thy_Info.touch_thy: string -> unit| \\
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   440
  \indexdef{}{ML}{Thy\_Info.remove\_thy}\verb|Thy_Info.remove_thy: string -> unit| \\[1ex]
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   441
  \indexdef{}{ML}{Thy\_Info.begin\_theory}\verb|Thy_Info.begin_theory|\verb|: ... -> bool -> theory| \\
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   442
  \indexdef{}{ML}{Thy\_Info.end\_theory}\verb|Thy_Info.end_theory: theory -> unit| \\
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   443
  \indexdef{}{ML}{Thy\_Info.register\_theory}\verb|Thy_Info.register_theory: theory -> unit| \\[1ex]
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   444
  \verb|datatype action = Update |\verb,|,\verb| Outdate |\verb,|,\verb| Remove| \\
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   445
  \indexdef{}{ML}{Thy\_Info.add\_hook}\verb|Thy_Info.add_hook: (Thy_Info.action -> string -> unit) -> unit| \\
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   446
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   447
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   448
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   449
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   450
  \item \verb|theory|~\isa{A} retrieves the theory value presently
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   451
  associated with name \isa{A}.  Note that the result might be
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   452
  outdated.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   453
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   454
  \item \verb|use_thy|~\isa{A} ensures that theory \isa{A} is fully
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   455
  up-to-date wrt.\ the external file store, reloading outdated
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   456
  ancestors as required.  In batch mode, the simultaneous \verb|use_thys| should be used exclusively.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   457
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   458
  \item \verb|use_thys| is similar to \verb|use_thy|, but handles
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   459
  several theories simultaneously.  Thus it acts like processing the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   460
  import header of a theory, without performing the merge of the
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   461
  result.  By loading a whole sub-graph of theories like that, the
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   462
  intrinsic parallelism can be exploited by the system, to speedup
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   463
  loading.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   464
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   465
  \item \verb|Thy_Info.touch_thy|~\isa{A} performs and \isa{outdate} action
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   466
  on theory \isa{A} and all descendants.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   467
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   468
  \item \verb|Thy_Info.remove_thy|~\isa{A} deletes theory \isa{A} and all
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   469
  descendants from the theory database.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   470
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   471
  \item \verb|Thy_Info.begin_theory| is the basic operation behind a
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   472
  \isa{{\isasymTHEORY}} header declaration.  This {\ML} function is
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   473
  normally not invoked directly.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   474
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   475
  \item \verb|Thy_Info.end_theory| concludes the loading of a theory
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   476
  proper and stores the result in the theory database.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   477
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   478
  \item \verb|Thy_Info.register_theory|~\isa{text\ thy} registers an
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   479
  existing theory value with the theory loader database.  There is no
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   480
  management of associated sources.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   481
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   482
  \item \verb|Thy_Info.add_hook|~\isa{f} registers function \isa{f} as a hook for theory database actions.  The function will be
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   483
  invoked with the action and theory name being involved; thus derived
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   484
  actions may be performed in associated system components, e.g.\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   485
  maintaining the state of an editor for the theory sources.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   486
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   487
  The kind and order of actions occurring in practice depends both on
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   488
  user interactions and the internal process of resolving theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   489
  imports.  Hooks should not rely on a particular policy here!  Any
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   490
  exceptions raised by the hook are ignored.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   491
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   492
  \end{description}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   493
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   494
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   495
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   496
\endisatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   497
{\isafoldmlref}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   498
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   499
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   500
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   501
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   502
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   503
\isadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   504
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   505
\endisadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   506
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   507
\isatagtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   508
\isacommand{end}\isamarkupfalse%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   509
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   510
\endisatagtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   511
{\isafoldtheory}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   512
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   513
\isadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   514
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   515
\endisadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   516
\isanewline
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   517
\end{isabellebody}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   518
%%% Local Variables:
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   519
%%% mode: latex
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   520
%%% TeX-master: "root"
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   521
%%% End: