| author | wenzelm |
| Tue, 27 Jul 2010 22:23:32 +0200 | |
| changeset 37979 | 0f21ebea4a73 |
| parent 30168 | 9a20be5be90b |
| child 42626 | 6ac8c55c657e |
| permissions | -rw-r--r-- |
|
26846
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
1 |
theory ML_Tactic |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
2 |
imports Main |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
3 |
begin |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
4 |
|
| 26852 | 5 |
chapter {* ML tactic expressions *}
|
|
26846
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
6 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
7 |
text {*
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
8 |
Isar Proof methods closely resemble traditional tactics, when used |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
9 |
in unstructured sequences of @{command "apply"} commands.
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
10 |
Isabelle/Isar provides emulations for all major ML tactics of |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
11 |
classic Isabelle --- mostly for the sake of easy porting of existing |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
12 |
developments, as actual Isar proof texts would demand much less |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
13 |
diversity of proof methods. |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
14 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
15 |
Unlike tactic expressions in ML, Isar proof methods provide proper |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
16 |
concrete syntax for additional arguments, options, modifiers etc. |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
17 |
Thus a typical method text is usually more concise than the |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
18 |
corresponding ML tactic. Furthermore, the Isar versions of classic |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
19 |
Isabelle tactics often cover several variant forms by a single |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
20 |
method with separate options to tune the behavior. For example, |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
21 |
method @{method simp} replaces all of @{ML simp_tac}~/ @{ML
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
22 |
asm_simp_tac}~/ @{ML full_simp_tac}~/ @{ML asm_full_simp_tac}, there
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
23 |
is also concrete syntax for augmenting the Simplifier context (the |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
24 |
current ``simpset'') in a convenient way. |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
25 |
*} |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
26 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
27 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
28 |
section {* Resolution tactics *}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
29 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
30 |
text {*
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
31 |
Classic Isabelle provides several variant forms of tactics for |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
32 |
single-step rule applications (based on higher-order resolution). |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
33 |
The space of resolution tactics has the following main dimensions. |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
34 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
35 |
\begin{enumerate}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
36 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
37 |
\item The ``mode'' of resolution: intro, elim, destruct, or forward |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
38 |
(e.g.\ @{ML resolve_tac}, @{ML eresolve_tac}, @{ML dresolve_tac},
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
39 |
@{ML forward_tac}).
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
40 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
41 |
\item Optional explicit instantiation (e.g.\ @{ML resolve_tac} vs.\
|
| 27239 | 42 |
@{ML res_inst_tac}).
|
|
26846
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
43 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
44 |
\item Abbreviations for singleton arguments (e.g.\ @{ML resolve_tac}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
45 |
vs.\ @{ML rtac}).
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
46 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
47 |
\end{enumerate}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
48 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
49 |
Basically, the set of Isar tactic emulations @{method rule_tac},
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
50 |
@{method erule_tac}, @{method drule_tac}, @{method frule_tac} (see
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
51 |
\secref{sec:tactics}) would be sufficient to cover the four modes,
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
52 |
either with or without instantiation, and either with single or |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
53 |
multiple arguments. Although it is more convenient in most cases to |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
54 |
use the plain @{method rule} method (see
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
55 |
\secref{sec:pure-meth-att}), or any of its ``improper'' variants
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
56 |
@{method erule}, @{method drule}, @{method frule} (see
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
57 |
\secref{sec:misc-meth-att}). Note that explicit goal addressing is
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
58 |
only supported by the actual @{method rule_tac} version.
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
59 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
60 |
With this in mind, plain resolution tactics correspond to Isar |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
61 |
methods as follows. |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
62 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
63 |
\medskip |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
64 |
\begin{tabular}{lll}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
65 |
@{ML rtac}~@{text "a 1"} & & @{text "rule a"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
66 |
@{ML resolve_tac}~@{text "[a\<^sub>1, \<dots>] 1"} & & @{text "rule a\<^sub>1 \<dots>"} \\
|
| 27239 | 67 |
@{ML res_inst_tac}~@{text "ctxt [(x\<^sub>1, t\<^sub>1), \<dots>] a 1"} & &
|
|
26846
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
68 |
@{text "rule_tac x\<^sub>1 = t\<^sub>1 \<AND> \<dots> \<IN> a"} \\[0.5ex]
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
69 |
@{ML rtac}~@{text "a i"} & & @{text "rule_tac [i] a"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
70 |
@{ML resolve_tac}~@{text "[a\<^sub>1, \<dots>] i"} & & @{text "rule_tac [i] a\<^sub>1 \<dots>"} \\
|
| 27239 | 71 |
@{ML res_inst_tac}~@{text "ctxt [(x\<^sub>1, t\<^sub>1), \<dots>] a i"} & &
|
|
26846
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
72 |
@{text "rule_tac [i] x\<^sub>1 = t\<^sub>1 \<AND> \<dots> \<IN> a"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
73 |
\end{tabular}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
74 |
\medskip |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
75 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
76 |
Note that explicit goal addressing may be usually avoided by |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
77 |
changing the order of subgoals with @{command "defer"} or @{command
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
78 |
"prefer"} (see \secref{sec:tactic-commands}).
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
79 |
*} |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
80 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
81 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
82 |
section {* Simplifier tactics *}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
83 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
84 |
text {*
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
85 |
The main Simplifier tactics @{ML simp_tac} and variants (cf.\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
86 |
\cite{isabelle-ref}) are all covered by the @{method simp} and
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
87 |
@{method simp_all} methods (see \secref{sec:simplifier}). Note that
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
88 |
there is no individual goal addressing available, simplification |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
89 |
acts either on the first goal (@{method simp}) or all goals
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
90 |
(@{method simp_all}).
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
91 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
92 |
\medskip |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
93 |
\begin{tabular}{lll}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
94 |
@{ML asm_full_simp_tac}~@{text "@{simpset} 1"} & & @{method simp} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
95 |
@{ML ALLGOALS}~(@{ML asm_full_simp_tac}~@{text "@{simpset}"}) & & @{method simp_all} \\[0.5ex]
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
96 |
@{ML simp_tac}~@{text "@{simpset} 1"} & & @{method simp}~@{text "(no_asm)"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
97 |
@{ML asm_simp_tac}~@{text "@{simpset} 1"} & & @{method simp}~@{text "(no_asm_simp)"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
98 |
@{ML full_simp_tac}~@{text "@{simpset} 1"} & & @{method simp}~@{text "(no_asm_use)"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
99 |
@{ML asm_lr_simp_tac}~@{text "@{simpset} 1"} & & @{method simp}~@{text "(asm_lr)"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
100 |
\end{tabular}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
101 |
\medskip |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
102 |
*} |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
103 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
104 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
105 |
section {* Classical Reasoner tactics *}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
106 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
107 |
text {*
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
108 |
The Classical Reasoner provides a rather large number of variations |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
109 |
of automated tactics, such as @{ML blast_tac}, @{ML fast_tac}, @{ML
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
110 |
clarify_tac} etc.\ (see \cite{isabelle-ref}). The corresponding
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
111 |
Isar methods usually share the same base name, such as @{method
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
112 |
blast}, @{method fast}, @{method clarify} etc.\ (see
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
113 |
\secref{sec:classical}).
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
114 |
*} |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
115 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
116 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
117 |
section {* Miscellaneous tactics *}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
118 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
119 |
text {*
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
120 |
There are a few additional tactics defined in various theories of |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
121 |
Isabelle/HOL, some of these also in Isabelle/FOL or Isabelle/ZF. |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
122 |
The most common ones of these may be ported to Isar as follows. |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
123 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
124 |
\medskip |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
125 |
\begin{tabular}{lll}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
126 |
@{ML stac}~@{text "a 1"} & & @{text "subst a"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
127 |
@{ML hyp_subst_tac}~@{text 1} & & @{text hypsubst} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
128 |
@{ML strip_tac}~@{text 1} & @{text "\<approx>"} & @{text "intro strip"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
129 |
@{ML split_all_tac}~@{text 1} & & @{text "simp (no_asm_simp) only: split_tupled_all"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
130 |
& @{text "\<approx>"} & @{text "simp only: split_tupled_all"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
131 |
& @{text "\<lless>"} & @{text "clarify"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
132 |
\end{tabular}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
133 |
*} |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
134 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
135 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
136 |
section {* Tacticals *}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
137 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
138 |
text {*
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
139 |
Classic Isabelle provides a huge amount of tacticals for combination |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
140 |
and modification of existing tactics. This has been greatly reduced |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
141 |
in Isar, providing the bare minimum of combinators only: ``@{text
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
142 |
","}'' (sequential composition), ``@{text "|"}'' (alternative
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
143 |
choices), ``@{text "?"}'' (try), ``@{text "+"}'' (repeat at least
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
144 |
once). These are usually sufficient in practice; if all fails, |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
145 |
arbitrary ML tactic code may be invoked via the @{method tactic}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
146 |
method (see \secref{sec:tactics}).
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
147 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
148 |
\medskip Common ML tacticals may be expressed directly in Isar as |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
149 |
follows: |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
150 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
151 |
\medskip |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
152 |
\begin{tabular}{lll}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
153 |
@{text "tac\<^sub>1"}~@{ML_text THEN}~@{text "tac\<^sub>2"} & & @{text "meth\<^sub>1, meth\<^sub>2"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
154 |
@{text "tac\<^sub>1"}~@{ML_text ORELSE}~@{text "tac\<^sub>2"} & & @{text "meth\<^sub>1 | meth\<^sub>2"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
155 |
@{ML TRY}~@{text tac} & & @{text "meth?"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
156 |
@{ML REPEAT1}~@{text tac} & & @{text "meth+"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
157 |
@{ML REPEAT}~@{text tac} & & @{text "(meth+)?"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
158 |
@{ML EVERY}~@{text "[tac\<^sub>1, \<dots>]"} & & @{text "meth\<^sub>1, \<dots>"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
159 |
@{ML FIRST}~@{text "[tac\<^sub>1, \<dots>]"} & & @{text "meth\<^sub>1 | \<dots>"} \\
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
160 |
\end{tabular}
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
161 |
\medskip |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
162 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
163 |
\medskip @{ML CHANGED} (see \cite{isabelle-ref}) is usually not
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
164 |
required in Isar, since most basic proof methods already fail unless |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
165 |
there is an actual change in the goal state. Nevertheless, ``@{text
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
166 |
"?"}'' (try) may be used to accept \emph{unchanged} results as
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
167 |
well. |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
168 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
169 |
\medskip @{ML ALLGOALS}, @{ML SOMEGOAL} etc.\ (see
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
170 |
\cite{isabelle-ref}) are not available in Isar, since there is no
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
171 |
direct goal addressing. Nevertheless, some basic methods address |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
172 |
all goals internally, notably @{method simp_all} (see
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
173 |
\secref{sec:simplifier}). Also note that @{ML ALLGOALS} can be
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
174 |
often replaced by ``@{text "+"}'' (repeat at least once), although
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
175 |
this usually has a different operational behavior, such as solving |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
176 |
goals in a different order. |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
177 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
178 |
\medskip Iterated resolution, such as @{ML_text "REPEAT (FIRSTGOAL
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
179 |
(resolve_tac \<dots>))"}, is usually better expressed using the @{method
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
180 |
intro} and @{method elim} methods of Isar (see
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
181 |
\secref{sec:classical}).
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
182 |
*} |
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
183 |
|
|
2e6726015771
removed obsolete conversion guide -- converted only section on tactics;
wenzelm
parents:
diff
changeset
|
184 |
end |