src/Doc/Implementation/Integration.thy
author wenzelm
Thu, 19 Jun 2014 12:01:26 +0200
changeset 57341 d6393137b161
parent 56895 f058120aaad4
child 57343 e0f573aca42f
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
57341
wenzelm
parents: 56895
diff changeset
     1
(*:wrap=hard:maxLineLen=78:*)
wenzelm
parents: 56895
diff changeset
     2
29755
d66b34e46bdf observe usual theory naming conventions;
wenzelm
parents: 27597
diff changeset
     3
theory Integration
d66b34e46bdf observe usual theory naming conventions;
wenzelm
parents: 27597
diff changeset
     4
imports Base
d66b34e46bdf observe usual theory naming conventions;
wenzelm
parents: 27597
diff changeset
     5
begin
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     6
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     7
chapter {* System integration *}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     8
20447
5b75f1c4d7d6 more on contexts;
wenzelm
parents: 20064
diff changeset
     9
section {* Isar toplevel \label{sec:isar-toplevel} *}
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    10
48974
8882fc8005ad Typo fixed.
webertj
parents: 48938
diff changeset
    11
text {* The Isar toplevel may be considered the central hub of the
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    12
  Isabelle/Isar system, where all key components and sub-systems are
39825
f9066b94bf07 eliminated fancy \ML logo for the sake of simpler source text (less dependence on LaTeX);
wenzelm
parents: 37982
diff changeset
    13
  integrated into a single read-eval-print loop of Isar commands,
f9066b94bf07 eliminated fancy \ML logo for the sake of simpler source text (less dependence on LaTeX);
wenzelm
parents: 37982
diff changeset
    14
  which also incorporates the underlying ML compiler.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    15
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    16
  Isabelle/Isar departs from the original ``LCF system architecture''
39825
f9066b94bf07 eliminated fancy \ML logo for the sake of simpler source text (less dependence on LaTeX);
wenzelm
parents: 37982
diff changeset
    17
  where ML was really The Meta Language for defining theories and
f9066b94bf07 eliminated fancy \ML logo for the sake of simpler source text (less dependence on LaTeX);
wenzelm
parents: 37982
diff changeset
    18
  conducting proofs.  Instead, ML now only serves as the
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    19
  implementation language for the system (and user extensions), while
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    20
  the specific Isar toplevel supports the concepts of theory and proof
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    21
  development natively.  This includes the graph structure of theories
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    22
  and the block structure of proofs, support for unlimited undo,
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    23
  facilities for tracing, debugging, timing, profiling etc.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    24
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    25
  \medskip The toplevel maintains an implicit state, which is
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    26
  transformed by a sequence of transitions -- either interactively or
52788
da1fdbfebd39 type theory is purely value-oriented;
wenzelm
parents: 51659
diff changeset
    27
  in batch-mode.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    28
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    29
  The toplevel state is a disjoint sum of empty @{text toplevel}, or
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    30
  @{text theory}, or @{text proof}.  On entering the main Isar loop we
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    31
  start with an empty toplevel.  A theory is commenced by giving a
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    32
  @{text \<THEORY>} header; within a theory we may issue theory
20025
95aeaa3ef35d Isar.context ();
wenzelm
parents: 18590
diff changeset
    33
  commands such as @{text \<DEFINITION>}, or state a @{text
95aeaa3ef35d Isar.context ();
wenzelm
parents: 18590
diff changeset
    34
  \<THEOREM>} to be proven.  Now we are within a proof state, with a
95aeaa3ef35d Isar.context ();
wenzelm
parents: 18590
diff changeset
    35
  rich collection of Isar proof commands for structured proof
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    36
  composition, or unstructured proof scripts.  When the proof is
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    37
  concluded we get back to the theory, which is then updated by
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    38
  storing the resulting fact.  Further theory declarations or theorem
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    39
  statements with proofs may follow, until we eventually conclude the
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    40
  theory development by issuing @{text \<END>}.  The resulting theory
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    41
  is then stored within the theory database and we are back to the
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    42
  empty toplevel.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    43
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    44
  In addition to these proper state transformations, there are also
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    45
  some diagnostic commands for peeking at the toplevel state without
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    46
  modifying it (e.g.\ \isakeyword{thm}, \isakeyword{term},
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    47
  \isakeyword{print-cases}).
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    48
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    49
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    50
text %mlref {*
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    51
  \begin{mldecls}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    52
  @{index_ML_type Toplevel.state} \\
55838
e120a15b0ee6 more antiquotations;
wenzelm
parents: 53709
diff changeset
    53
  @{index_ML_exception Toplevel.UNDEF} \\
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    54
  @{index_ML Toplevel.is_toplevel: "Toplevel.state -> bool"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    55
  @{index_ML Toplevel.theory_of: "Toplevel.state -> theory"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    56
  @{index_ML Toplevel.proof_of: "Toplevel.state -> Proof.state"} \\
32833
f3716d1a2e48 explicitly Unsynchronized;
wenzelm
parents: 32189
diff changeset
    57
  @{index_ML Toplevel.timing: "bool Unsynchronized.ref"} \\
f3716d1a2e48 explicitly Unsynchronized;
wenzelm
parents: 32189
diff changeset
    58
  @{index_ML Toplevel.profiling: "int Unsynchronized.ref"} \\
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    59
  \end{mldecls}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    60
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    61
  \begin{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    62
39864
wenzelm
parents: 39826
diff changeset
    63
  \item Type @{ML_type Toplevel.state} represents Isar toplevel
wenzelm
parents: 39826
diff changeset
    64
  states, which are normally manipulated through the concept of
wenzelm
parents: 39826
diff changeset
    65
  toplevel transitions only (\secref{sec:toplevel-transition}).  Also
wenzelm
parents: 39826
diff changeset
    66
  note that a raw toplevel state is subject to the same linearity
wenzelm
parents: 39826
diff changeset
    67
  restrictions as a theory context (cf.~\secref{sec:context-theory}).
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    68
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    69
  \item @{ML Toplevel.UNDEF} is raised for undefined toplevel
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    70
  operations.  Many operations work only partially for certain cases,
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    71
  since @{ML_type Toplevel.state} is a sum type.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    72
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    73
  \item @{ML Toplevel.is_toplevel}~@{text "state"} checks for an empty
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    74
  toplevel state.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    75
34931
fd90fb0903c0 minimal tuning of this slightly dated material;
wenzelm
parents: 34921
diff changeset
    76
  \item @{ML Toplevel.theory_of}~@{text "state"} selects the
fd90fb0903c0 minimal tuning of this slightly dated material;
wenzelm
parents: 34921
diff changeset
    77
  background theory of @{text "state"}, raises @{ML Toplevel.UNDEF}
fd90fb0903c0 minimal tuning of this slightly dated material;
wenzelm
parents: 34921
diff changeset
    78
  for an empty toplevel state.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    79
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    80
  \item @{ML Toplevel.proof_of}~@{text "state"} selects the Isar proof
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    81
  state if available, otherwise raises @{ML Toplevel.UNDEF}.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    82
32833
f3716d1a2e48 explicitly Unsynchronized;
wenzelm
parents: 32189
diff changeset
    83
  \item @{ML "Toplevel.timing := true"} makes the toplevel print timing
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    84
  information for each Isar command being executed.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    85
40149
4c35be108990 proper markup of uninterpreted ML text as @{ML_text}, not @{verbatim};
wenzelm
parents: 39882
diff changeset
    86
  \item @{ML Toplevel.profiling}~@{ML_text ":="}~@{text "n"} controls
39825
f9066b94bf07 eliminated fancy \ML logo for the sake of simpler source text (less dependence on LaTeX);
wenzelm
parents: 37982
diff changeset
    87
  low-level profiling of the underlying ML runtime system.  For
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    88
  Poly/ML, @{text "n = 1"} means time and @{text "n = 2"} space
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
    89
  profiling.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    90
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    91
  \end{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    92
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    93
39882
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
    94
text %mlantiq {*
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
    95
  \begin{matharray}{rcl}
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
    96
  @{ML_antiquotation_def "Isar.state"} & : & @{text ML_antiquotation} \\
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
    97
  \end{matharray}
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
    98
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
    99
  \begin{description}
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
   100
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
   101
  \item @{text "@{Isar.state}"} refers to Isar toplevel state at that
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
   102
  point --- as abstract value.
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
   103
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
   104
  This only works for diagnostic ML commands, such as @{command
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
   105
  ML_val} or @{command ML_command}.
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
   106
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
   107
  \end{description}
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
   108
*}
ab0afd03a042 cover @{Isar.state};
wenzelm
parents: 39864
diff changeset
   109
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   110
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   111
subsection {* Toplevel transitions \label{sec:toplevel-transition} *}
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   112
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   113
text {*
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   114
  An Isar toplevel transition consists of a partial function on the
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   115
  toplevel state, with additional information for diagnostics and
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   116
  error reporting: there are fields for command name, source position,
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   117
  optional source text, as well as flags for interactive-only commands
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   118
  (which issue a warning in batch-mode), printing of result state,
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   119
  etc.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   120
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   121
  The operational part is represented as the sequential union of a
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   122
  list of partial functions, which are tried in turn until the first
20475
wenzelm
parents: 20451
diff changeset
   123
  one succeeds.  This acts like an outer case-expression for various
34931
fd90fb0903c0 minimal tuning of this slightly dated material;
wenzelm
parents: 34921
diff changeset
   124
  alternative state transitions.  For example, \isakeyword{qed} works
20475
wenzelm
parents: 20451
diff changeset
   125
  differently for a local proofs vs.\ the global ending of the main
wenzelm
parents: 20451
diff changeset
   126
  proof.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   127
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   128
  Toplevel transitions are composed via transition transformers.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   129
  Internally, Isar commands are put together from an empty transition
34931
fd90fb0903c0 minimal tuning of this slightly dated material;
wenzelm
parents: 34921
diff changeset
   130
  extended by name and source position.  It is then left to the
fd90fb0903c0 minimal tuning of this slightly dated material;
wenzelm
parents: 34921
diff changeset
   131
  individual command parser to turn the given concrete syntax into a
fd90fb0903c0 minimal tuning of this slightly dated material;
wenzelm
parents: 34921
diff changeset
   132
  suitable transition transformer that adjoins actual operations on a
fd90fb0903c0 minimal tuning of this slightly dated material;
wenzelm
parents: 34921
diff changeset
   133
  theory or proof state etc.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   134
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   135
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   136
text %mlref {*
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   137
  \begin{mldecls}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   138
  @{index_ML Toplevel.keep: "(Toplevel.state -> unit) ->
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   139
  Toplevel.transition -> Toplevel.transition"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   140
  @{index_ML Toplevel.theory: "(theory -> theory) ->
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   141
  Toplevel.transition -> Toplevel.transition"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   142
  @{index_ML Toplevel.theory_to_proof: "(theory -> Proof.state) ->
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   143
  Toplevel.transition -> Toplevel.transition"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   144
  @{index_ML Toplevel.proof: "(Proof.state -> Proof.state) ->
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   145
  Toplevel.transition -> Toplevel.transition"} \\
49864
34437e7245cc updated Toplevel.proofs;
wenzelm
parents: 48985
diff changeset
   146
  @{index_ML Toplevel.proofs: "(Proof.state -> Proof.state Seq.result Seq.seq) ->
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   147
  Toplevel.transition -> Toplevel.transition"} \\
21168
0f869edd6cc1 replaced Toplevel.proof_to_theory by Toplevel.end_proof;
wenzelm
parents: 20491
diff changeset
   148
  @{index_ML Toplevel.end_proof: "(bool -> Proof.state -> Proof.context) ->
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   149
  Toplevel.transition -> Toplevel.transition"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   150
  \end{mldecls}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   151
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   152
  \begin{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   153
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   154
  \item @{ML Toplevel.keep}~@{text "tr"} adjoins a diagnostic
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   155
  function.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   156
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   157
  \item @{ML Toplevel.theory}~@{text "tr"} adjoins a theory
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   158
  transformer.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   159
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   160
  \item @{ML Toplevel.theory_to_proof}~@{text "tr"} adjoins a global
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   161
  goal function, which turns a theory into a proof state.  The theory
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   162
  may be changed before entering the proof; the generic Isar goal
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   163
  setup includes an argument that specifies how to apply the proven
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   164
  result to the theory, when the proof is finished.
18558
48d5419fd191 more stuff;
wenzelm
parents: 18554
diff changeset
   165
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   166
  \item @{ML Toplevel.proof}~@{text "tr"} adjoins a deterministic
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   167
  proof command, with a singleton result.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   168
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   169
  \item @{ML Toplevel.proofs}~@{text "tr"} adjoins a general proof
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   170
  command, with zero or more result states (represented as a lazy
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   171
  list).
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   172
21168
0f869edd6cc1 replaced Toplevel.proof_to_theory by Toplevel.end_proof;
wenzelm
parents: 20491
diff changeset
   173
  \item @{ML Toplevel.end_proof}~@{text "tr"} adjoins a concluding
0f869edd6cc1 replaced Toplevel.proof_to_theory by Toplevel.end_proof;
wenzelm
parents: 20491
diff changeset
   174
  proof command, that returns the resulting theory, after storing the
0f869edd6cc1 replaced Toplevel.proof_to_theory by Toplevel.end_proof;
wenzelm
parents: 20491
diff changeset
   175
  resulting facts in the context etc.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   176
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   177
  \end{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   178
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   179
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   180
57341
wenzelm
parents: 56895
diff changeset
   181
section {* Theory loader database *}
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   182
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20447
diff changeset
   183
text {*
57341
wenzelm
parents: 56895
diff changeset
   184
  In batch mode and within dumped logic images, the theory database maintains
wenzelm
parents: 56895
diff changeset
   185
  a collection of theories as a directed acyclic graph. A theory may refer to
wenzelm
parents: 56895
diff changeset
   186
  other theories as @{keyword "imports"}, or to auxiliary files via special
wenzelm
parents: 56895
diff changeset
   187
  \emph{load commands} (e.g.\ @{command ML_file}). For each theory, the base
wenzelm
parents: 56895
diff changeset
   188
  directory of its own theory file is called \emph{master directory}: this is
wenzelm
parents: 56895
diff changeset
   189
  used as the relative location to refer to other files from that theory.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   190
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   191
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   192
text %mlref {*
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   193
  \begin{mldecls}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   194
  @{index_ML use_thy: "string -> unit"} \\
24173
4ba00a972eb8 theory loader: added use_thys, removed obsolete update_thy;
wenzelm
parents: 22095
diff changeset
   195
  @{index_ML use_thys: "string list -> unit"} \\
37864
814b1bca7f35 qualified Thy_Info.get_theory;
wenzelm
parents: 37306
diff changeset
   196
  @{index_ML Thy_Info.get_theory: "string -> theory"} \\
57341
wenzelm
parents: 56895
diff changeset
   197
  @{index_ML Thy_Info.remove_thy: "string -> unit"} \\
wenzelm
parents: 56895
diff changeset
   198
  @{index_ML Thy_Info.register_thy: "theory -> unit"} \\
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   199
  \end{mldecls}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   200
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   201
  \begin{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   202
24173
4ba00a972eb8 theory loader: added use_thys, removed obsolete update_thy;
wenzelm
parents: 22095
diff changeset
   203
  \item @{ML use_thy}~@{text A} ensures that theory @{text A} is fully
57341
wenzelm
parents: 56895
diff changeset
   204
  up-to-date wrt.\ the external file store, reloading outdated ancestors as
wenzelm
parents: 56895
diff changeset
   205
  required.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   206
57341
wenzelm
parents: 56895
diff changeset
   207
  \item @{ML use_thys} is similar to @{ML use_thy}, but handles several
wenzelm
parents: 56895
diff changeset
   208
  theories simultaneously. Thus it acts like processing the import header of a
wenzelm
parents: 56895
diff changeset
   209
  theory, without performing the merge of the result. By loading a whole
wenzelm
parents: 56895
diff changeset
   210
  sub-graph of theories, the intrinsic parallelism can be exploited by the
wenzelm
parents: 56895
diff changeset
   211
  system to speedup loading.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   212
37864
814b1bca7f35 qualified Thy_Info.get_theory;
wenzelm
parents: 37306
diff changeset
   213
  \item @{ML Thy_Info.get_theory}~@{text A} retrieves the theory value
57341
wenzelm
parents: 56895
diff changeset
   214
  presently associated with name @{text A}. Note that the result might be
wenzelm
parents: 56895
diff changeset
   215
  outdated wrt.\ the file-system content.
37864
814b1bca7f35 qualified Thy_Info.get_theory;
wenzelm
parents: 37306
diff changeset
   216
37216
3165bc303f66 modernized some structure names, keeping a few legacy aliases;
wenzelm
parents: 34931
diff changeset
   217
  \item @{ML Thy_Info.remove_thy}~@{text A} deletes theory @{text A} and all
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   218
  descendants from the theory database.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   219
57341
wenzelm
parents: 56895
diff changeset
   220
  \item @{ML Thy_Info.register_thy}~@{text "text thy"} registers an existing
wenzelm
parents: 56895
diff changeset
   221
  theory value with the theory loader database and updates source version
wenzelm
parents: 56895
diff changeset
   222
  information according to the current file-system state.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   223
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   224
  \end{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   225
*}
30272
2d612824e642 regenerated document;
wenzelm
parents: 30270
diff changeset
   226
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   227
end