doc-src/IsarImplementation/Thy/tactic.thy
author wenzelm
Thu, 31 Aug 2006 23:01:16 +0200
changeset 20452 6d8b29c7a960
parent 20451 27ea2ba48fa3
child 20472 e993073eda4c
permissions -rw-r--r--
tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     1
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     2
(* $Id$ *)
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     3
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     4
theory tactic imports base begin
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     5
20452
wenzelm
parents: 20451
diff changeset
     6
chapter {* Tactical reasoning *}
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
     7
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
     8
text {*
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
     9
  The basic idea of tactical theorem proving is to refine the initial
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    10
  claim in a backwards fashion, until a solved form is reached.  An
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    11
  intermediate goal consists of several subgoals that need to be
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    12
  solved in order to achieve the main statement; zero subgoals means
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    13
  that the proof may be finished.  A @{text "tactic"} is a refinement
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    14
  operation that maps a goal to a lazy sequence of potential
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    15
  successors.  A @{text "tactical"} is a combinator for composing
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    16
  tactics.
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    17
*}
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    18
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    19
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    20
section {* Goals \label{sec:tactical-goals} *}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    21
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    22
text {*
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    23
  Isabelle/Pure represents a goal\glossary{Tactical goal}{A theorem of
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    24
  \seeglossary{Horn Clause} form stating that a number of subgoals
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    25
  imply the main conclusion, which is marked as a protected
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    26
  proposition.} as a theorem stating that the subgoals imply the main
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    27
  goal: @{text "A\<^sub>1 \<Longrightarrow> \<dots> \<Longrightarrow> A\<^sub>n \<Longrightarrow> C"}.  The outermost goal
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    28
  structure is that of a Horn Clause\glossary{Horn Clause}{An iterated
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    29
  implication @{text "A\<^sub>1 \<Longrightarrow> \<dots> \<Longrightarrow> A\<^sub>n \<Longrightarrow> C"}, without any
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    30
  outermost quantifiers.  Strictly speaking, propositions @{text
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    31
  "A\<^sub>i"} need to be atomic in Horn Clauses, but Isabelle admits
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    32
  arbitrary substructure here (nested @{text "\<Longrightarrow>"} and @{text "\<And>"}
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    33
  connectives).}: i.e.\ an iterated implication without any
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    34
  quantifiers\footnote{Recall that outermost @{text "\<And>x. \<phi>[x]"} is
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    35
  always represented via schematic variables in the body: @{text
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    36
  "\<phi>[?x]"}.  These variables may get instantiated during the course of
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    37
  reasoning.}.  For @{text "n = 0"} a goal is called ``solved''.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    38
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    39
  The structure of each subgoal @{text "A\<^sub>i"} is that of a
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    40
  general Hereditary Harrop Formula @{text "\<And>x\<^sub>1 \<dots>
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    41
  \<And>x\<^sub>k. H\<^sub>1 \<Longrightarrow> \<dots> \<Longrightarrow> H\<^sub>m \<Longrightarrow> B"} according to the normal
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    42
  form where any local @{text \<And>} is pulled before @{text \<Longrightarrow>}.  Here
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    43
  @{text "x\<^sub>1, \<dots>, x\<^sub>k"} are goal parameters, i.e.\
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    44
  arbitrary-but-fixed entities of certain types, and @{text
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    45
  "H\<^sub>1, \<dots>, H\<^sub>m"} are goal hypotheses, i.e.\ facts that may
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    46
  be assumed locally.  Together, this forms the goal context of the
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    47
  conclusion @{text B} to be established.  The goal hypotheses may be
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    48
  again Hereditary Harrop Formulas, although the level of nesting
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    49
  rarely exceeds 1--2 in practice.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    50
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    51
  The main conclusion @{text C} is internally marked as a protected
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    52
  proposition\glossary{Protected proposition}{An arbitrarily
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    53
  structured proposition @{text "C"} which is forced to appear as
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    54
  atomic by wrapping it into a propositional identity operator;
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    55
  notation @{text "#C"}.  Protecting a proposition prevents basic
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    56
  inferences from entering into that structure for the time being.},
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    57
  which is occasionally represented explicitly by the notation @{text
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    58
  "#C"}.  This ensures that the decomposition into subgoals and main
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    59
  conclusion is well-defined for arbitrarily structured claims.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    60
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    61
  \medskip Basic goal management is performed via the following
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    62
  Isabelle/Pure rules:
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    63
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    64
  \[
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    65
  \infer[@{text "(init)"}]{@{text "C \<Longrightarrow> #C"}}{} \qquad
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    66
  \infer[@{text "(finish)"}]{@{text "#C"}}{@{text "C"}}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    67
  \]
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    68
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    69
  \medskip The following low-level variants admit general reasoning
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    70
  with protected propositions:
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    71
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    72
  \[
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    73
  \infer[@{text "(protect)"}]{@{text "#C"}}{@{text "C"}} \qquad
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    74
  \infer[@{text "(conclude)"}]{@{text "A\<^sub>1 \<Longrightarrow> \<dots> \<Longrightarrow> A\<^sub>n \<Longrightarrow> C"}}{@{text "A\<^sub>1 \<Longrightarrow> \<dots> \<Longrightarrow> A\<^sub>n \<Longrightarrow> #C"}}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    75
  \]
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    76
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    77
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    78
text %mlref {*
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    79
  \begin{mldecls}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    80
  @{index_ML Goal.init: "cterm -> thm"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    81
  @{index_ML Goal.finish: "thm -> thm"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    82
  @{index_ML Goal.protect: "thm -> thm"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    83
  @{index_ML Goal.conclude: "thm -> thm"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    84
  \end{mldecls}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    85
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    86
  \begin{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    87
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    88
  \item @{ML "Goal.init"}~@{text "\<phi>"} initializes a tactical goal from
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    89
  the type-checked proposition @{text \<phi>}.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    90
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    91
  \item @{ML "Goal.finish"}~@{text "th"} checks whether theorem @{text
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    92
  "th"} is a solved goal configuration (no subgoals), and concludes
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    93
  the result by removing the goal protection.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    94
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    95
  \item @{ML "Goal.protect"}~@{text "th"} protects the full statement
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    96
  of theorem @{text "th"}.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    97
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    98
  \item @{ML "Goal.conclude"}~@{text "th"} removes the goal protection
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    99
  for any number of pending subgoals.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   100
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   101
  \end{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   102
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   103
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   104
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   105
section {* Tactics *}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   106
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   107
text {*
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   108
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   109
FIXME
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   110
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   111
\glossary{Tactic}{Any function that maps a \seeglossary{tactical goal}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   112
to a lazy sequence of possible sucessors.  This scheme subsumes
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   113
failure (empty result sequence), as well as lazy enumeration of proof
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   114
search results.  Error conditions are usually mapped to an empty
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   115
result, which gives further tactics a chance to try in turn.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   116
Commonly, tactics either take an argument to address a particular
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   117
subgoal, or operate on a certain range of subgoals in a uniform
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   118
fashion.  In any case, the main conclusion is normally left untouched,
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   119
apart from instantiating \seeglossary{schematic variables}.}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   120
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   121
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   122
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   123
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   124
section {* Tacticals *}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   125
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   126
text {*
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   127
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   128
FIXME
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   129
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   130
\glossary{Tactical}{A functional combinator for building up complex
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   131
tactics from simpler ones.  Typical tactical perform sequential
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   132
composition, disjunction (choice), iteration, or goal addressing.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   133
Various search strategies may be expressed via tacticals.}
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
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   137
section {* Programmed proofs *}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   138
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   139
text {*
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   140
  In order to perform a complete tactical proof under program control,
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   141
  one needs to set up an initial goal configuration, apply a tactic,
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   142
  and finish the result, cf.\ the rules given in
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   143
  \secref{sec:tactical-goals}.  Further checks are required to ensure
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   144
  that the result is actually an instance of the original claim --
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   145
  ill-behaved tactics could have destroyed that information.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   146
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   147
  Several simultaneous claims may be handled within a single goal
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
   148
  statement by using meta-level conjunction internally.  The whole
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
   149
  configuration may be considered within a context of
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
   150
  arbitrary-but-fixed parameters and hypotheses, which will be
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
   151
  available as local facts during the proof and discharged into
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   152
  implications in the result.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   153
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   154
  All of these administrative tasks are packaged into a separate
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   155
  operation, such that the user merely needs to provide the statement
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   156
  and tactic to be applied.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   157
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   158
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   159
text %mlref {*
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   160
  \begin{mldecls}
20042
2308529f8e8d updated Goal.prove, Goal.prove_global;
wenzelm
parents: 18537
diff changeset
   161
  @{index_ML Goal.prove: "Proof.context -> string list -> term list -> term ->
20316
99b6e2900c0f updated;
wenzelm
parents: 20065
diff changeset
   162
  ({prems: thm list, context: Proof.context} -> tactic) -> thm"} \\
20042
2308529f8e8d updated Goal.prove, Goal.prove_global;
wenzelm
parents: 18537
diff changeset
   163
  @{index_ML Goal.prove_multi: "Proof.context -> string list -> term list -> term list ->
20316
99b6e2900c0f updated;
wenzelm
parents: 20065
diff changeset
   164
  ({prems: thm list, context: Proof.context} -> tactic) -> thm list"} \\
20042
2308529f8e8d updated Goal.prove, Goal.prove_global;
wenzelm
parents: 18537
diff changeset
   165
  @{index_ML Goal.prove_global: "theory -> string list -> term list -> term ->
2308529f8e8d updated Goal.prove, Goal.prove_global;
wenzelm
parents: 18537
diff changeset
   166
  (thm list -> tactic) -> thm"} \\
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   167
  \end{mldecls}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   168
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   169
  \begin{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   170
20042
2308529f8e8d updated Goal.prove, Goal.prove_global;
wenzelm
parents: 18537
diff changeset
   171
  \item @{ML Goal.prove}~@{text "ctxt xs As C tac"} states goal @{text
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   172
  "C"} in the context of arbitrary-but-fixed parameters @{text "xs"}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   173
  and hypotheses @{text "As"} and applies tactic @{text "tac"} to
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   174
  solve it.  The latter may depend on the local assumptions being
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   175
  presented as facts.  The result is essentially @{text "\<And>xs. As \<Longrightarrow>
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   176
  C"}, but is normalized by pulling @{text "\<And>"} before @{text "\<Longrightarrow>"}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   177
  (the conclusion @{text "C"} itself may be a rule statement), turning
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   178
  the quantifier prefix into schematic variables, and generalizing
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   179
  implicit type-variables.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   180
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   181
  \item @{ML Goal.prove_multi} is simular to @{ML Goal.prove}, but
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   182
  states several conclusions simultaneously.  @{ML
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   183
  Tactic.conjunction_tac} may be used to split these into individual
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   184
  subgoals before commencing the actual proof.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   185
20042
2308529f8e8d updated Goal.prove, Goal.prove_global;
wenzelm
parents: 18537
diff changeset
   186
  \item @{ML Goal.prove_global} is a degraded version of @{ML
2308529f8e8d updated Goal.prove, Goal.prove_global;
wenzelm
parents: 18537
diff changeset
   187
  Goal.prove} for theory level goals; it includes a global @{ML
2308529f8e8d updated Goal.prove, Goal.prove_global;
wenzelm
parents: 18537
diff changeset
   188
  Drule.standard} for the result.
2308529f8e8d updated Goal.prove, Goal.prove_global;
wenzelm
parents: 18537
diff changeset
   189
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   190
  \end{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   191
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   192
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   193
end
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   194