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