doc-src/IsarImplementation/Thy/tactic.thy
author wenzelm
Mon, 04 Sep 2006 19:49:39 +0200
changeset 20474 af069653f1d7
parent 20472 e993073eda4c
child 20547 796ae7fa1049
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 {*
20474
wenzelm
parents: 20472
diff changeset
     9
  Tactical reasoning works by refining the initial claim in a
wenzelm
parents: 20472
diff changeset
    10
  backwards fashion, until a solved form is reached.  A @{text "goal"}
wenzelm
parents: 20472
diff changeset
    11
  consists of several subgoals that need to be solved in order to
wenzelm
parents: 20472
diff changeset
    12
  achieve the main statement; zero subgoals means that the proof may
wenzelm
parents: 20472
diff changeset
    13
  be finished.  A @{text "tactic"} is a refinement operation that maps
wenzelm
parents: 20472
diff changeset
    14
  a goal to a lazy sequence of potential successors.  A @{text
wenzelm
parents: 20472
diff changeset
    15
  "tactical"} is a combinator for composing tactics.
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    16
*}
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    17
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    18
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    19
section {* Goals \label{sec:tactical-goals} *}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    20
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    21
text {*
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    22
  Isabelle/Pure represents a goal\glossary{Tactical goal}{A theorem of
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    23
  \seeglossary{Horn Clause} form stating that a number of subgoals
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    24
  imply the main conclusion, which is marked as a protected
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    25
  proposition.} as a theorem stating that the subgoals imply the main
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    26
  goal: @{text "A\<^sub>1 \<Longrightarrow> \<dots> \<Longrightarrow> A\<^sub>n \<Longrightarrow> C"}.  The outermost goal
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    27
  structure is that of a Horn Clause\glossary{Horn Clause}{An iterated
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    28
  implication @{text "A\<^sub>1 \<Longrightarrow> \<dots> \<Longrightarrow> A\<^sub>n \<Longrightarrow> C"}, without any
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    29
  outermost quantifiers.  Strictly speaking, propositions @{text
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    30
  "A\<^sub>i"} need to be atomic in Horn Clauses, but Isabelle admits
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    31
  arbitrary substructure here (nested @{text "\<Longrightarrow>"} and @{text "\<And>"}
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    32
  connectives).}: i.e.\ an iterated implication without any
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    33
  quantifiers\footnote{Recall that outermost @{text "\<And>x. \<phi>[x]"} is
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    34
  always represented via schematic variables in the body: @{text
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    35
  "\<phi>[?x]"}.  These variables may get instantiated during the course of
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    36
  reasoning.}.  For @{text "n = 0"} a goal is called ``solved''.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    37
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    38
  The structure of each subgoal @{text "A\<^sub>i"} is that of a
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    39
  general Hereditary Harrop Formula @{text "\<And>x\<^sub>1 \<dots>
20474
wenzelm
parents: 20472
diff changeset
    40
  \<And>x\<^sub>k. H\<^sub>1 \<Longrightarrow> \<dots> \<Longrightarrow> H\<^sub>m \<Longrightarrow> B"} in normal form where.
wenzelm
parents: 20472
diff changeset
    41
  Here @{text "x\<^sub>1, \<dots>, x\<^sub>k"} are goal parameters, i.e.\
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    42
  arbitrary-but-fixed entities of certain types, and @{text
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    43
  "H\<^sub>1, \<dots>, H\<^sub>m"} are goal hypotheses, i.e.\ facts that may
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    44
  be assumed locally.  Together, this forms the goal context of the
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    45
  conclusion @{text B} to be established.  The goal hypotheses may be
20474
wenzelm
parents: 20472
diff changeset
    46
  again arbitrary Hereditary Harrop Formulas, although the level of
wenzelm
parents: 20472
diff changeset
    47
  nesting rarely exceeds 1--2 in practice.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    48
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    49
  The main conclusion @{text C} is internally marked as a protected
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    50
  proposition\glossary{Protected proposition}{An arbitrarily
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    51
  structured proposition @{text "C"} which is forced to appear as
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    52
  atomic by wrapping it into a propositional identity operator;
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    53
  notation @{text "#C"}.  Protecting a proposition prevents basic
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    54
  inferences from entering into that structure for the time being.},
20474
wenzelm
parents: 20472
diff changeset
    55
  which is represented explicitly by the notation @{text "#C"}.  This
wenzelm
parents: 20472
diff changeset
    56
  ensures that the decomposition into subgoals and main conclusion is
wenzelm
parents: 20472
diff changeset
    57
  well-defined for arbitrarily structured claims.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    58
20451
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    59
  \medskip Basic goal management is performed via the following
27ea2ba48fa3 misc cleanup;
wenzelm
parents: 20316
diff changeset
    60
  Isabelle/Pure rules:
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    61
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    62
  \[
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    63
  \infer[@{text "(init)"}]{@{text "C \<Longrightarrow> #C"}}{} \qquad
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    64
  \infer[@{text "(finish)"}]{@{text "#C"}}{@{text "C"}}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    65
  \]
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    66
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    67
  \medskip The following low-level variants admit general reasoning
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    68
  with protected propositions:
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    69
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    70
  \[
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    71
  \infer[@{text "(protect)"}]{@{text "#C"}}{@{text "C"}} \qquad
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    72
  \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
    73
  \]
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    74
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    75
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    76
text %mlref {*
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    77
  \begin{mldecls}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    78
  @{index_ML Goal.init: "cterm -> thm"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    79
  @{index_ML Goal.finish: "thm -> thm"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    80
  @{index_ML Goal.protect: "thm -> thm"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    81
  @{index_ML Goal.conclude: "thm -> thm"} \\
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    82
  \end{mldecls}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    83
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    84
  \begin{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    85
20474
wenzelm
parents: 20472
diff changeset
    86
  \item @{ML "Goal.init"}~@{text C} initializes a tactical goal from
wenzelm
parents: 20472
diff changeset
    87
  the well-formed proposition @{text C}.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    88
20474
wenzelm
parents: 20472
diff changeset
    89
  \item @{ML "Goal.finish"}~@{text "thm"} checks whether theorem
wenzelm
parents: 20472
diff changeset
    90
  @{text "thm"} is a solved goal (no subgoals), and concludes the
wenzelm
parents: 20472
diff changeset
    91
  result by removing the goal protection.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    92
20474
wenzelm
parents: 20472
diff changeset
    93
  \item @{ML "Goal.protect"}~@{text "thm"} protects the full statement
wenzelm
parents: 20472
diff changeset
    94
  of theorem @{text "thm"}.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    95
20474
wenzelm
parents: 20472
diff changeset
    96
  \item @{ML "Goal.conclude"}~@{text "thm"} removes the goal
wenzelm
parents: 20472
diff changeset
    97
  protection, even if there are pending subgoals.
18537
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    98
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
    99
  \end{description}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   100
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   101
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   102
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   103
section {* Tactics *}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   104
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   105
text {*
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   106
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   107
FIXME
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   108
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   109
\glossary{Tactic}{Any function that maps a \seeglossary{tactical goal}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   110
to a lazy sequence of possible sucessors.  This scheme subsumes
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   111
failure (empty result sequence), as well as lazy enumeration of proof
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   112
search results.  Error conditions are usually mapped to an empty
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   113
result, which gives further tactics a chance to try in turn.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   114
Commonly, tactics either take an argument to address a particular
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   115
subgoal, or operate on a certain range of subgoals in a uniform
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   116
fashion.  In any case, the main conclusion is normally left untouched,
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   117
apart from instantiating \seeglossary{schematic variables}.}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   118
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   119
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
section {* Tacticals *}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   123
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   124
text {*
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   125
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   126
FIXME
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   127
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   128
\glossary{Tactical}{A functional combinator for building up complex
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   129
tactics from simpler ones.  Typical tactical perform sequential
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   130
composition, disjunction (choice), iteration, or goal addressing.
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   131
Various search strategies may be expressed via tacticals.}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   132
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   133
*}
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   134
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   135
end
2681f9e34390 "The Isabelle/Isar Implementation" manual;
wenzelm
parents:
diff changeset
   136