doc-src/IsarImplementation/Thy/document/Integration.tex
author bulwahn
Tue, 08 May 2012 14:31:03 +0200
changeset 47893 4cf901b1089a
parent 40406 313a24b66a8d
permissions -rw-r--r--
specialised fact in the Record theory should not be appear in proofs discovered by sledgehammer
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
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
    32
  integrated into a single read-eval-print loop of Isar commands,
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
    33
  which also incorporates the underlying ML compiler.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    34
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    35
  Isabelle/Isar departs from the original ``LCF system architecture''
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
    36
  where ML was really The Meta Language for defining theories and
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
    37
  conducting proofs.  Instead, ML now only serves as the
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    38
  implementation language for the system (and user extensions), while
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    39
  the specific Isar toplevel supports the concepts of theory and proof
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    40
  development natively.  This includes the graph structure of theories
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    41
  and the block structure of proofs, support for unlimited undo,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    42
  facilities for tracing, debugging, timing, profiling etc.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    43
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    44
  \medskip The toplevel maintains an implicit state, which is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    45
  transformed by a sequence of transitions -- either interactively or
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    46
  in batch-mode.  In interactive mode, Isar state transitions are
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    47
  encapsulated as safe transactions, such that both failure and undo
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    48
  are handled conveniently without destroying the underlying draft
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    49
  theory (cf.~\secref{sec:context-theory}).  In batch mode,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    50
  transitions operate in a linear (destructive) fashion, such that
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    51
  error conditions abort the present attempt to construct a theory or
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    52
  proof altogether.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    53
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    54
  The toplevel state is a disjoint sum of empty \isa{toplevel}, or
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    55
  \isa{theory}, or \isa{proof}.  On entering the main Isar loop we
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    56
  start with an empty toplevel.  A theory is commenced by giving a
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39885
diff changeset
    57
  \isa{{\isaliteral{5C3C5448454F52593E}{\isasymTHEORY}}} header; within a theory we may issue theory
313a24b66a8d updated generated files;
wenzelm
parents: 39885
diff changeset
    58
  commands such as \isa{{\isaliteral{5C3C444546494E4954494F4E3E}{\isasymDEFINITION}}}, or state a \isa{{\isaliteral{5C3C5448454F52454D3E}{\isasymTHEOREM}}} to be proven.  Now we are within a proof state, with a
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    59
  rich collection of Isar proof commands for structured proof
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    60
  composition, or unstructured proof scripts.  When the proof is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    61
  concluded we get back to the theory, which is then updated by
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    62
  storing the resulting fact.  Further theory declarations or theorem
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    63
  statements with proofs may follow, until we eventually conclude the
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39885
diff changeset
    64
  theory development by issuing \isa{{\isaliteral{5C3C454E443E}{\isasymEND}}}.  The resulting theory
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    65
  is then stored within the theory database and we are back to the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    66
  empty toplevel.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    67
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    68
  In addition to these proper state transformations, there are also
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    69
  some diagnostic commands for peeking at the toplevel state without
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    70
  modifying it (e.g.\ \isakeyword{thm}, \isakeyword{term},
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    71
  \isakeyword{print-cases}).%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    72
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    73
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    74
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    75
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    76
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    77
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    78
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    79
\isatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    80
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    81
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    82
\begin{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    83
  \indexdef{}{ML type}{Toplevel.state}\verb|type Toplevel.state| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    84
  \indexdef{}{ML}{Toplevel.UNDEF}\verb|Toplevel.UNDEF: exn| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    85
  \indexdef{}{ML}{Toplevel.is\_toplevel}\verb|Toplevel.is_toplevel: Toplevel.state -> bool| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    86
  \indexdef{}{ML}{Toplevel.theory\_of}\verb|Toplevel.theory_of: Toplevel.state -> theory| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    87
  \indexdef{}{ML}{Toplevel.proof\_of}\verb|Toplevel.proof_of: Toplevel.state -> Proof.state| \\
32836
4c6e3e7ac2bf updated generated files;
wenzelm
parents: 32189
diff changeset
    88
  \indexdef{}{ML}{Toplevel.debug}\verb|Toplevel.debug: bool Unsynchronized.ref| \\
4c6e3e7ac2bf updated generated files;
wenzelm
parents: 32189
diff changeset
    89
  \indexdef{}{ML}{Toplevel.timing}\verb|Toplevel.timing: bool Unsynchronized.ref| \\
4c6e3e7ac2bf updated generated files;
wenzelm
parents: 32189
diff changeset
    90
  \indexdef{}{ML}{Toplevel.profiling}\verb|Toplevel.profiling: int Unsynchronized.ref| \\
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    91
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    92
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    93
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
    94
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
    95
  \item Type \verb|Toplevel.state| represents Isar toplevel
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
    96
  states, which are normally manipulated through the concept of
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
    97
  toplevel transitions only (\secref{sec:toplevel-transition}).  Also
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
    98
  note that a raw toplevel state is subject to the same linearity
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
    99
  restrictions as a theory context (cf.~\secref{sec:context-theory}).
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   100
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   101
  \item \verb|Toplevel.UNDEF| is raised for undefined toplevel
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   102
  operations.  Many operations work only partially for certain cases,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   103
  since \verb|Toplevel.state| is a sum type.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   104
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   105
  \item \verb|Toplevel.is_toplevel|~\isa{state} checks for an empty
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   106
  toplevel state.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   107
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   108
  \item \verb|Toplevel.theory_of|~\isa{state} selects the
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   109
  background theory of \isa{state}, raises \verb|Toplevel.UNDEF|
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   110
  for an empty toplevel state.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   111
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   112
  \item \verb|Toplevel.proof_of|~\isa{state} selects the Isar proof
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   113
  state if available, otherwise raises \verb|Toplevel.UNDEF|.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   114
32836
4c6e3e7ac2bf updated generated files;
wenzelm
parents: 32189
diff changeset
   115
  \item \verb|Toplevel.debug := true| makes the toplevel print further
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   116
  details about internal error conditions, exceptions being raised
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   117
  etc.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   118
32836
4c6e3e7ac2bf updated generated files;
wenzelm
parents: 32189
diff changeset
   119
  \item \verb|Toplevel.timing := true| makes the toplevel print timing
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   120
  information for each Isar command being executed.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   121
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   122
  \item \verb|Toplevel.profiling|~\verb|:=|~\isa{n} controls
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   123
  low-level profiling of the underlying ML runtime system.  For
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39885
diff changeset
   124
  Poly/ML, \isa{n\ {\isaliteral{3D}{\isacharequal}}\ {\isadigit{1}}} means time and \isa{n\ {\isaliteral{3D}{\isacharequal}}\ {\isadigit{2}}} space
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   125
  profiling.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   126
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   127
  \end{description}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   128
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   129
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   130
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   131
\endisatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   132
{\isafoldmlref}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   133
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   134
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   135
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   136
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   137
%
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   138
\isadelimmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   139
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   140
\endisadelimmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   141
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   142
\isatagmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   143
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   144
\begin{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   145
\begin{matharray}{rcl}
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39885
diff changeset
   146
  \indexdef{}{ML antiquotation}{Isar.state}\hypertarget{ML antiquotation.Isar.state}{\hyperlink{ML antiquotation.Isar.state}{\mbox{\isa{Isar{\isaliteral{2E}{\isachardot}}state}}}} & : & \isa{ML{\isaliteral{5F}{\isacharunderscore}}antiquotation} \\
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   147
  \end{matharray}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   148
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   149
  \begin{description}
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   150
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39885
diff changeset
   151
  \item \isa{{\isaliteral{40}{\isacharat}}{\isaliteral{7B}{\isacharbraceleft}}Isar{\isaliteral{2E}{\isachardot}}state{\isaliteral{7D}{\isacharbraceright}}} refers to Isar toplevel state at that
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   152
  point --- as abstract value.
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   153
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39885
diff changeset
   154
  This only works for diagnostic ML commands, such as \hyperlink{command.ML-val}{\mbox{\isa{\isacommand{ML{\isaliteral{5F}{\isacharunderscore}}val}}}} or \hyperlink{command.ML-command}{\mbox{\isa{\isacommand{ML{\isaliteral{5F}{\isacharunderscore}}command}}}}.
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   155
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   156
  \end{description}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   157
\end{isamarkuptext}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   158
\isamarkuptrue%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   159
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   160
\endisatagmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   161
{\isafoldmlantiq}%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   162
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   163
\isadelimmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   164
%
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   165
\endisadelimmlantiq
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   166
%
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   167
\isamarkupsubsection{Toplevel transitions \label{sec:toplevel-transition}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   168
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   169
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   170
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   171
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   172
An Isar toplevel transition consists of a partial function on the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   173
  toplevel state, with additional information for diagnostics and
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   174
  error reporting: there are fields for command name, source position,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   175
  optional source text, as well as flags for interactive-only commands
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   176
  (which issue a warning in batch-mode), printing of result state,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   177
  etc.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   178
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   179
  The operational part is represented as the sequential union of a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   180
  list of partial functions, which are tried in turn until the first
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   181
  one succeeds.  This acts like an outer case-expression for various
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   182
  alternative state transitions.  For example, \isakeyword{qed} works
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   183
  differently for a local proofs vs.\ the global ending of the main
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   184
  proof.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   185
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   186
  Toplevel transitions are composed via transition transformers.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   187
  Internally, Isar commands are put together from an empty transition
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   188
  extended by name and source position.  It is then left to the
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   189
  individual command parser to turn the given concrete syntax into a
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   190
  suitable transition transformer that adjoins actual operations on a
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   191
  theory or proof state etc.%
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   192
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   193
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   194
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   195
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   196
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   197
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   198
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   199
\isatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   200
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   201
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   202
\begin{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   203
  \indexdef{}{ML}{Toplevel.print}\verb|Toplevel.print: Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   204
  \indexdef{}{ML}{Toplevel.no\_timing}\verb|Toplevel.no_timing: Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   205
  \indexdef{}{ML}{Toplevel.keep}\verb|Toplevel.keep: (Toplevel.state -> unit) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   206
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   207
  \indexdef{}{ML}{Toplevel.theory}\verb|Toplevel.theory: (theory -> theory) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   208
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   209
  \indexdef{}{ML}{Toplevel.theory\_to\_proof}\verb|Toplevel.theory_to_proof: (theory -> Proof.state) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   210
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   211
  \indexdef{}{ML}{Toplevel.proof}\verb|Toplevel.proof: (Proof.state -> Proof.state) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   212
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   213
  \indexdef{}{ML}{Toplevel.proofs}\verb|Toplevel.proofs: (Proof.state -> Proof.state Seq.seq) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   214
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   215
  \indexdef{}{ML}{Toplevel.end\_proof}\verb|Toplevel.end_proof: (bool -> Proof.state -> Proof.context) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   216
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   217
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   218
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   219
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   220
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   221
  \item \verb|Toplevel.print|~\isa{tr} sets the print flag, which
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   222
  causes the toplevel loop to echo the result state (in interactive
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   223
  mode).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   224
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   225
  \item \verb|Toplevel.no_timing|~\isa{tr} indicates that the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   226
  transition should never show timing information, e.g.\ because it is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   227
  a diagnostic command.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   228
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   229
  \item \verb|Toplevel.keep|~\isa{tr} adjoins a diagnostic
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   230
  function.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   231
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   232
  \item \verb|Toplevel.theory|~\isa{tr} adjoins a theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   233
  transformer.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   234
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   235
  \item \verb|Toplevel.theory_to_proof|~\isa{tr} adjoins a global
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   236
  goal function, which turns a theory into a proof state.  The theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   237
  may be changed before entering the proof; the generic Isar goal
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   238
  setup includes an argument that specifies how to apply the proven
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   239
  result to the theory, when the proof is finished.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   240
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   241
  \item \verb|Toplevel.proof|~\isa{tr} adjoins a deterministic
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   242
  proof command, with a singleton result.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   243
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   244
  \item \verb|Toplevel.proofs|~\isa{tr} adjoins a general proof
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   245
  command, with zero or more result states (represented as a lazy
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   246
  list).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   247
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   248
  \item \verb|Toplevel.end_proof|~\isa{tr} adjoins a concluding
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   249
  proof command, that returns the resulting theory, after storing the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   250
  resulting facts in the context etc.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   251
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   252
  \end{description}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   253
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   254
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   255
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   256
\endisatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   257
{\isafoldmlref}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   258
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   259
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   260
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   261
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   262
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   263
\isamarkupsection{Theory database \label{sec:theory-database}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   264
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   265
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   266
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   267
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   268
The theory database maintains a collection of theories, together
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   269
  with some administrative information about their original sources,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   270
  which are held in an external store (i.e.\ some directory within the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   271
  regular file system).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   272
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   273
  The theory database is organized as a directed acyclic graph;
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   274
  entries are referenced by theory name.  Although some additional
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   275
  interfaces allow to include a directory specification as well, this
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   276
  is only a hint to the underlying theory loader.  The internal theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   277
  name space is flat!
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   278
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   279
  Theory \isa{A} is associated with the main theory file \isa{A}\verb,.thy,, which needs to be accessible through the theory
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   280
  loader path.  Any number of additional ML source files may be
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   281
  associated with each theory, by declaring these dependencies in the
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39885
diff changeset
   282
  theory header as \isa{{\isaliteral{5C3C555345533E}{\isasymUSES}}}, and loading them consecutively
39885
6a3f7941c3a0 cumulative update of generated files (since bf164c153d10);
wenzelm
parents: 37982
diff changeset
   283
  within the theory context.  The system keeps track of incoming ML
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   284
  sources and associates them with the current theory.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   285
37982
111ce9651564 updated manual concerning theory loader;
wenzelm
parents: 37864
diff changeset
   286
  The basic internal actions of the theory database are \isa{update} and \isa{remove}:
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   287
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   288
  \begin{itemize}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   289
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   290
  \item \isa{update\ A} introduces a link of \isa{A} with a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   291
  \isa{theory} value of the same name; it asserts that the theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   292
  sources are now consistent with that value;
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   293
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   294
  \item \isa{remove\ A} deletes entry \isa{A} from the theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   295
  database.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   296
  
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   297
  \end{itemize}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   298
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   299
  These actions are propagated to sub- or super-graphs of a theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   300
  entry as expected, in order to preserve global consistency of the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   301
  state of all loaded theories with the sources of the external store.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   302
  This implies certain causalities between actions: \isa{update}
37982
111ce9651564 updated manual concerning theory loader;
wenzelm
parents: 37864
diff changeset
   303
  or \isa{remove} of an entry will \isa{remove} all
111ce9651564 updated manual concerning theory loader;
wenzelm
parents: 37864
diff changeset
   304
  descendants.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   305
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   306
  \medskip There are separate user-level interfaces to operate on the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   307
  theory database directly or indirectly.  The primitive actions then
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   308
  just happen automatically while working with the system.  In
40406
313a24b66a8d updated generated files;
wenzelm
parents: 39885
diff changeset
   309
  particular, processing a theory header \isa{{\isaliteral{5C3C5448454F52593E}{\isasymTHEORY}}\ A\ {\isaliteral{5C3C494D504F5254533E}{\isasymIMPORTS}}\ B\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ B\isaliteral{5C3C5E7375623E}{}\isactrlsub n\ {\isaliteral{5C3C424547494E3E}{\isasymBEGIN}}} ensures that the
313a24b66a8d updated generated files;
wenzelm
parents: 39885
diff changeset
   310
  sub-graph of the collective imports \isa{B\isaliteral{5C3C5E7375623E}{}\isactrlsub {\isadigit{1}}\ {\isaliteral{5C3C646F74733E}{\isasymdots}}\ B\isaliteral{5C3C5E7375623E}{}\isactrlsub n}
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   311
  is up-to-date, too.  Earlier theories are reloaded as required, with
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   312
  \isa{update} actions proceeding in topological order according to
37982
111ce9651564 updated manual concerning theory loader;
wenzelm
parents: 37864
diff changeset
   313
  theory dependencies.  There may be also a wave of implied \isa{remove} actions for derived theory nodes until a stable situation
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   314
  is achieved eventually.%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   315
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   316
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   317
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   318
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   319
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   320
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   321
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   322
\isatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   323
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   324
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   325
\begin{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   326
  \indexdef{}{ML}{use\_thy}\verb|use_thy: string -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   327
  \indexdef{}{ML}{use\_thys}\verb|use_thys: string list -> unit| \\
37864
814b1bca7f35 qualified Thy_Info.get_theory;
wenzelm
parents: 37306
diff changeset
   328
  \indexdef{}{ML}{Thy\_Info.get\_theory}\verb|Thy_Info.get_theory: string -> theory| \\
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   329
  \indexdef{}{ML}{Thy\_Info.remove\_thy}\verb|Thy_Info.remove_thy: string -> unit| \\[1ex]
37982
111ce9651564 updated manual concerning theory loader;
wenzelm
parents: 37864
diff changeset
   330
  \indexdef{}{ML}{Thy\_Info.register\_thy}\verb|Thy_Info.register_thy: theory -> unit| \\[1ex]
111ce9651564 updated manual concerning theory loader;
wenzelm
parents: 37864
diff changeset
   331
  \verb|datatype action = Update |\verb,|,\verb| Remove| \\
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   332
  \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
   333
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   334
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   335
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   336
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   337
  \item \verb|use_thy|~\isa{A} ensures that theory \isa{A} is fully
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   338
  up-to-date wrt.\ the external file store, reloading outdated
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   339
  ancestors as required.  In batch mode, the simultaneous \verb|use_thys| should be used exclusively.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   340
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   341
  \item \verb|use_thys| is similar to \verb|use_thy|, but handles
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   342
  several theories simultaneously.  Thus it acts like processing the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   343
  import header of a theory, without performing the merge of the
35001
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   344
  result.  By loading a whole sub-graph of theories like that, the
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   345
  intrinsic parallelism can be exploited by the system, to speedup
31f8d9eaceff updated generated files;
wenzelm
parents: 33293
diff changeset
   346
  loading.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   347
37864
814b1bca7f35 qualified Thy_Info.get_theory;
wenzelm
parents: 37306
diff changeset
   348
  \item \verb|Thy_Info.get_theory|~\isa{A} retrieves the theory value
814b1bca7f35 qualified Thy_Info.get_theory;
wenzelm
parents: 37306
diff changeset
   349
  presently associated with name \isa{A}.  Note that the result
814b1bca7f35 qualified Thy_Info.get_theory;
wenzelm
parents: 37306
diff changeset
   350
  might be outdated.
814b1bca7f35 qualified Thy_Info.get_theory;
wenzelm
parents: 37306
diff changeset
   351
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   352
  \item \verb|Thy_Info.remove_thy|~\isa{A} deletes theory \isa{A} and all
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   353
  descendants from the theory database.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   354
37982
111ce9651564 updated manual concerning theory loader;
wenzelm
parents: 37864
diff changeset
   355
  \item \verb|Thy_Info.register_thy|~\isa{text\ thy} registers an
111ce9651564 updated manual concerning theory loader;
wenzelm
parents: 37864
diff changeset
   356
  existing theory value with the theory loader database and updates
111ce9651564 updated manual concerning theory loader;
wenzelm
parents: 37864
diff changeset
   357
  source version information according to the current file-system
111ce9651564 updated manual concerning theory loader;
wenzelm
parents: 37864
diff changeset
   358
  state.
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   359
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 35001
diff changeset
   360
  \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
   361
  invoked with the action and theory name being involved; thus derived
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   362
  actions may be performed in associated system components, e.g.\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   363
  maintaining the state of an editor for the theory sources.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   364
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   365
  The kind and order of actions occurring in practice depends both on
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   366
  user interactions and the internal process of resolving theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   367
  imports.  Hooks should not rely on a particular policy here!  Any
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   368
  exceptions raised by the hook are ignored.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   369
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   370
  \end{description}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   371
\end{isamarkuptext}%
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
\endisatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   375
{\isafoldmlref}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   376
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   377
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   378
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   379
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   380
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   381
\isadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   382
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   383
\endisadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   384
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   385
\isatagtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   386
\isacommand{end}\isamarkupfalse%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   387
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   388
\endisatagtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   389
{\isafoldtheory}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   390
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   391
\isadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   392
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   393
\endisadelimtheory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   394
\isanewline
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   395
\end{isabellebody}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   396
%%% Local Variables:
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   397
%%% mode: latex
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   398
%%% TeX-master: "root"
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   399
%%% End: