doc-src/IsarImplementation/Thy/document/Integration.tex
author wenzelm
Thu, 01 Oct 2009 20:20:45 +0200
changeset 32836 4c6e3e7ac2bf
parent 32189 4086cdd8dd70
child 33293 4645818f0fbd
permissions -rw-r--r--
updated generated files;
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
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   109
  \item \verb|Toplevel.theory_of|~\isa{state} selects the theory of
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   110
  a theory or proof (!), otherwise raises \verb|Toplevel.UNDEF|.
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
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   123
  low-level profiling of the underlying {\ML} runtime system.  For
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   124
  Poly/ML, \isa{n\ {\isacharequal}\ {\isadigit{1}}} means time and \isa{n\ {\isacharequal}\ {\isadigit{2}}} space
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
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   138
\isamarkupsubsection{Toplevel transitions \label{sec:toplevel-transition}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   139
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   140
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   141
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   142
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   143
An Isar toplevel transition consists of a partial function on the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   144
  toplevel state, with additional information for diagnostics and
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   145
  error reporting: there are fields for command name, source position,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   146
  optional source text, as well as flags for interactive-only commands
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   147
  (which issue a warning in batch-mode), printing of result state,
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   148
  etc.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   149
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   150
  The operational part is represented as the sequential union of a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   151
  list of partial functions, which are tried in turn until the first
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   152
  one succeeds.  This acts like an outer case-expression for various
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   153
  alternative state transitions.  For example, \isakeyword{qed} acts
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   154
  differently for a local proofs vs.\ the global ending of the main
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   155
  proof.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   156
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   157
  Toplevel transitions are composed via transition transformers.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   158
  Internally, Isar commands are put together from an empty transition
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   159
  extended by name and source position (and optional source text).  It
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   160
  is then left to the individual command parser to turn the given
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   161
  concrete syntax into a suitable transition transformer that adjoins
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   162
  actual operations on a theory or proof state etc.%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   163
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   164
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   165
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   166
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   167
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   168
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   169
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   170
\isatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   171
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   172
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   173
\begin{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   174
  \indexdef{}{ML}{Toplevel.print}\verb|Toplevel.print: Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   175
  \indexdef{}{ML}{Toplevel.no\_timing}\verb|Toplevel.no_timing: Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   176
  \indexdef{}{ML}{Toplevel.keep}\verb|Toplevel.keep: (Toplevel.state -> unit) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   177
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   178
  \indexdef{}{ML}{Toplevel.theory}\verb|Toplevel.theory: (theory -> theory) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   179
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   180
  \indexdef{}{ML}{Toplevel.theory\_to\_proof}\verb|Toplevel.theory_to_proof: (theory -> Proof.state) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   181
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   182
  \indexdef{}{ML}{Toplevel.proof}\verb|Toplevel.proof: (Proof.state -> Proof.state) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   183
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   184
  \indexdef{}{ML}{Toplevel.proofs}\verb|Toplevel.proofs: (Proof.state -> Proof.state Seq.seq) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   185
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   186
  \indexdef{}{ML}{Toplevel.end\_proof}\verb|Toplevel.end_proof: (bool -> Proof.state -> Proof.context) ->|\isasep\isanewline%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   187
\verb|  Toplevel.transition -> Toplevel.transition| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   188
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   189
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   190
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   191
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   192
  \item \verb|Toplevel.print|~\isa{tr} sets the print flag, which
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   193
  causes the toplevel loop to echo the result state (in interactive
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   194
  mode).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   195
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   196
  \item \verb|Toplevel.no_timing|~\isa{tr} indicates that the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   197
  transition should never show timing information, e.g.\ because it is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   198
  a diagnostic command.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   199
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   200
  \item \verb|Toplevel.keep|~\isa{tr} adjoins a diagnostic
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   201
  function.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   202
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   203
  \item \verb|Toplevel.theory|~\isa{tr} adjoins a theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   204
  transformer.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   205
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   206
  \item \verb|Toplevel.theory_to_proof|~\isa{tr} adjoins a global
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   207
  goal function, which turns a theory into a proof state.  The theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   208
  may be changed before entering the proof; the generic Isar goal
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   209
  setup includes an argument that specifies how to apply the proven
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   210
  result to the theory, when the proof is finished.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   211
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   212
  \item \verb|Toplevel.proof|~\isa{tr} adjoins a deterministic
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   213
  proof command, with a singleton result.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   214
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   215
  \item \verb|Toplevel.proofs|~\isa{tr} adjoins a general proof
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   216
  command, with zero or more result states (represented as a lazy
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   217
  list).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   218
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   219
  \item \verb|Toplevel.end_proof|~\isa{tr} adjoins a concluding
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   220
  proof command, that returns the resulting theory, after storing the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   221
  resulting facts in the context etc.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   222
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   223
  \end{description}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   224
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   225
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   226
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   227
\endisatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   228
{\isafoldmlref}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   229
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   230
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   231
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   232
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   233
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   234
\isamarkupsubsection{Toplevel control%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   235
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   236
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   237
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   238
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   239
There are a few special control commands that modify the behavior
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   240
  the toplevel itself, and only make sense in interactive mode.  Under
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   241
  normal circumstances, the user encounters these only implicitly as
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   242
  part of the protocol between the Isabelle/Isar system and a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   243
  user-interface such as ProofGeneral.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   244
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   245
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   246
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   247
  \item \isacommand{undo} follows the three-level hierarchy of empty
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   248
  toplevel vs.\ theory vs.\ proof: undo within a proof reverts to the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   249
  previous proof context, undo after a proof reverts to the theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   250
  before the initial goal statement, undo of a theory command reverts
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   251
  to the previous theory value, undo of a theory header discontinues
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   252
  the current theory development and removes it from the theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   253
  database (\secref{sec:theory-database}).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   254
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   255
  \item \isacommand{kill} aborts the current level of development:
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   256
  kill in a proof context reverts to the theory before the initial
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   257
  goal statement, kill in a theory context aborts the current theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   258
  development, removing it from the database.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   259
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   260
  \item \isacommand{exit} drops out of the Isar toplevel into the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   261
  underlying {\ML} toplevel (\secref{sec:ML-toplevel}).  The Isar
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   262
  toplevel state is preserved and may be continued later.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   263
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   264
  \item \isacommand{quit} terminates the Isabelle/Isar process without
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   265
  saving.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   266
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   267
  \end{description}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   268
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   269
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   270
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   271
\isamarkupsection{ML toplevel \label{sec:ML-toplevel}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   272
}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   273
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   274
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   275
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   276
The {\ML} toplevel provides a read-compile-eval-print loop for {\ML}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   277
  values, types, structures, and functors.  {\ML} declarations operate
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   278
  on the global system state, which consists of the compiler
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   279
  environment plus the values of {\ML} reference variables.  There is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   280
  no clean way to undo {\ML} declarations, except for reverting to a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   281
  previously saved state of the whole Isabelle process.  {\ML} input
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   282
  is either read interactively from a TTY, or from a string (usually
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   283
  within a theory text), or from a source file (usually loaded from a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   284
  theory).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   285
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   286
  Whenever the {\ML} toplevel is active, the current Isabelle theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   287
  context is passed as an internal reference variable.  Thus {\ML}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   288
  code may access the theory context during compilation, it may even
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   289
  change the value of a theory being under construction --- while
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   290
  observing the usual linearity restrictions
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   291
  (cf.~\secref{sec:context-theory}).%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   292
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   293
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   294
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   295
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   296
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   297
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   298
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   299
\isatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   300
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   301
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   302
\begin{mldecls}
32189
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   303
  \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
   304
  \indexdef{}{ML}{Context.$>$$>$ }\verb|Context.>> : (Context.generic -> Context.generic) -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   305
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   306
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   307
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   308
32189
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   309
  \item \verb|ML_Context.the_generic_context ()| refers to the theory
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   310
  context of the {\ML} toplevel --- at compile time!  {\ML} code needs
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   311
  to take care to refer to \verb|ML_Context.the_generic_context ()|
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   312
  correctly.  Recall that evaluation of a function body is delayed
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   313
  until actual runtime.  Moreover, persistent {\ML} toplevel bindings
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   314
  to an unfinished theory should be avoided: code should either
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   315
  project out the desired information immediately, or produce an
4086cdd8dd70 ML_Context.the_generic_context;
wenzelm
parents: 30296
diff changeset
   316
  explicit \verb|theory_ref| (cf.\ \secref{sec:context-theory}).
30296
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   317
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   318
  \item \verb|Context.>>|~\isa{f} applies context transformation
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   319
  \isa{f} to the implicit context of the {\ML} toplevel.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   320
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   321
  \end{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   322
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   323
  It is very important to note that the above functions are really
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   324
  restricted to the compile time, even though the {\ML} compiler is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   325
  invoked at runtime!  The majority of {\ML} code uses explicit
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   326
  functional arguments of a theory or proof context instead.  Thus it
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   327
  may be invoked for an arbitrary context later on, without having to
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   328
  worry about any operational details.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   329
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   330
  \bigskip
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   331
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   332
  \begin{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   333
  \indexdef{}{ML}{Isar.main}\verb|Isar.main: unit -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   334
  \indexdef{}{ML}{Isar.loop}\verb|Isar.loop: unit -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   335
  \indexdef{}{ML}{Isar.state}\verb|Isar.state: unit -> Toplevel.state| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   336
  \indexdef{}{ML}{Isar.exn}\verb|Isar.exn: unit -> (exn * string) option| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   337
  \indexdef{}{ML}{Isar.context}\verb|Isar.context: unit -> Proof.context| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   338
  \indexdef{}{ML}{Isar.goal}\verb|Isar.goal: unit -> thm| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   339
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   340
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   341
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   342
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   343
  \item \verb|Isar.main ()| invokes the Isar toplevel from {\ML},
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   344
  initializing an empty toplevel state.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   345
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   346
  \item \verb|Isar.loop ()| continues the Isar toplevel with the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   347
  current state, after having dropped out of the Isar toplevel loop.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   348
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   349
  \item \verb|Isar.state ()| and \verb|Isar.exn ()| get current
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   350
  toplevel state and error condition, respectively.  This only works
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   351
  after having dropped out of the Isar toplevel loop.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   352
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   353
  \item \verb|Isar.context ()| produces the proof context from \verb|Isar.state ()|, analogous to \verb|Context.proof_of|
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   354
  (\secref{sec:generic-context}).
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   355
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   356
  \item \verb|Isar.goal ()| picks the tactical goal from \verb|Isar.state ()|, represented as a theorem according to
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}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   391
  sources and associates them with the current theory.  The file
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   392
  \isa{A}\verb,.ML, is loaded after a theory has been concluded, in
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   393
  order to support legacy proof {\ML} proof scripts.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   394
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   395
  The basic internal actions of the theory database are \isa{update}, \isa{outdate}, and \isa{remove}:
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   396
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   397
  \begin{itemize}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   398
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   399
  \item \isa{update\ A} introduces a link of \isa{A} with a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   400
  \isa{theory} value of the same name; it asserts that the theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   401
  sources are now consistent with that value;
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   402
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   403
  \item \isa{outdate\ A} invalidates the link of a theory database
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   404
  entry to its sources, but retains the present theory value;
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   405
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   406
  \item \isa{remove\ A} deletes entry \isa{A} from the theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   407
  database.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   408
  
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   409
  \end{itemize}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   410
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   411
  These actions are propagated to sub- or super-graphs of a theory
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   412
  entry as expected, in order to preserve global consistency of the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   413
  state of all loaded theories with the sources of the external store.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   414
  This implies certain causalities between actions: \isa{update}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   415
  or \isa{outdate} of an entry will \isa{outdate} all
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   416
  descendants; \isa{remove} will \isa{remove} all descendants.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   417
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   418
  \medskip There are separate user-level interfaces to operate on the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   419
  theory database directly or indirectly.  The primitive actions then
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   420
  just happen automatically while working with the system.  In
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   421
  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
   422
  sub-graph of the collective imports \isa{B\isactrlsub {\isadigit{1}}\ {\isasymdots}\ B\isactrlsub n}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   423
  is up-to-date, too.  Earlier theories are reloaded as required, with
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   424
  \isa{update} actions proceeding in topological order according to
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   425
  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
   426
  is achieved eventually.%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   427
\end{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   428
\isamarkuptrue%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   429
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   430
\isadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   431
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   432
\endisadelimmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   433
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   434
\isatagmlref
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   435
%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   436
\begin{isamarkuptext}%
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   437
\begin{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   438
  \indexdef{}{ML}{theory}\verb|theory: string -> theory| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   439
  \indexdef{}{ML}{use\_thy}\verb|use_thy: string -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   440
  \indexdef{}{ML}{use\_thys}\verb|use_thys: string list -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   441
  \indexdef{}{ML}{ThyInfo.touch\_thy}\verb|ThyInfo.touch_thy: string -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   442
  \indexdef{}{ML}{ThyInfo.remove\_thy}\verb|ThyInfo.remove_thy: string -> unit| \\[1ex]
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   443
  \indexdef{}{ML}{ThyInfo.begin\_theory}\verb|ThyInfo.begin_theory|\verb|: ... -> bool -> theory| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   444
  \indexdef{}{ML}{ThyInfo.end\_theory}\verb|ThyInfo.end_theory: theory -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   445
  \indexdef{}{ML}{ThyInfo.register\_theory}\verb|ThyInfo.register_theory: theory -> unit| \\[1ex]
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   446
  \verb|datatype action = Update |\verb,|,\verb| Outdate |\verb,|,\verb| Remove| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   447
  \indexdef{}{ML}{ThyInfo.add\_hook}\verb|ThyInfo.add_hook: (ThyInfo.action -> string -> unit) -> unit| \\
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   448
  \end{mldecls}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   449
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   450
  \begin{description}
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   451
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   452
  \item \verb|theory|~\isa{A} retrieves the theory value presently
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   453
  associated with name \isa{A}.  Note that the result might be
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   454
  outdated.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   455
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   456
  \item \verb|use_thy|~\isa{A} ensures that theory \isa{A} is fully
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   457
  up-to-date wrt.\ the external file store, reloading outdated
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   458
  ancestors as required.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   459
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   460
  \item \verb|use_thys| is similar to \verb|use_thy|, but handles
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   461
  several theories simultaneously.  Thus it acts like processing the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   462
  import header of a theory, without performing the merge of the
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   463
  result, though.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   464
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   465
  \item \verb|ThyInfo.touch_thy|~\isa{A} performs and \isa{outdate} action
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
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   468
  \item \verb|ThyInfo.remove_thy|~\isa{A} deletes theory \isa{A} and all
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   469
  descendants from the theory database.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   470
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   471
  \item \verb|ThyInfo.begin_theory| is the basic operation behind a
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   472
  \isa{{\isasymTHEORY}} header declaration.  This is {\ML} functions is
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   473
  normally not invoked directly.
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   474
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   475
  \item \verb|ThyInfo.end_theory| concludes the loading of a theory
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
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   478
  \item \verb|ThyInfo.register_theory|~\isa{text\ thy} registers an
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
25eb9a499966 recovered generated files;
wenzelm
parents:
diff changeset
   482
  \item \verb|ThyInfo.add_hook|~\isa{f} registers function \isa{f} as a hook for theory database actions.  The function will be
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: