doc-src/Ref/tactic.tex
author ballarin
Fri, 12 Jan 2007 15:37:21 +0100
changeset 22063 717425609192
parent 17818 38c889d77282
child 30184 37969710e61f
permissions -rw-r--r--
Reverted to structure representation with records.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     1
%% $Id$
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     2
\chapter{Tactics} \label{tactics}
3108
335efc3f5632 misc updates, tuning, cleanup;
wenzelm
parents: 2612
diff changeset
     3
\index{tactics|(} Tactics have type \mltydx{tactic}.  This is just an
335efc3f5632 misc updates, tuning, cleanup;
wenzelm
parents: 2612
diff changeset
     4
abbreviation for functions from theorems to theorem sequences, where
335efc3f5632 misc updates, tuning, cleanup;
wenzelm
parents: 2612
diff changeset
     5
the theorems represent states of a backward proof.  Tactics seldom
335efc3f5632 misc updates, tuning, cleanup;
wenzelm
parents: 2612
diff changeset
     6
need to be coded from scratch, as functions; instead they are
335efc3f5632 misc updates, tuning, cleanup;
wenzelm
parents: 2612
diff changeset
     7
expressed using basic tactics and tacticals.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
     8
4317
7264fa2ff2ec several minor updates;
wenzelm
parents: 4276
diff changeset
     9
This chapter only presents the primitive tactics.  Substantial proofs
7264fa2ff2ec several minor updates;
wenzelm
parents: 4276
diff changeset
    10
require the power of automatic tools like simplification
7264fa2ff2ec several minor updates;
wenzelm
parents: 4276
diff changeset
    11
(Chapter~\ref{chap:simplification}) and classical tableau reasoning
7264fa2ff2ec several minor updates;
wenzelm
parents: 4276
diff changeset
    12
(Chapter~\ref{chap:classical}).
2039
79c86b966257 Documented defer_tac and moved back the obsolete tactics like fold_tac
paulson
parents: 1212
diff changeset
    13
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    14
\section{Resolution and assumption tactics}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    15
{\bf Resolution} is Isabelle's basic mechanism for refining a subgoal using
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    16
a rule.  {\bf Elim-resolution} is particularly suited for elimination
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    17
rules, while {\bf destruct-resolution} is particularly suited for
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    18
destruction rules.  The {\tt r}, {\tt e}, {\tt d} naming convention is
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    19
maintained for several different kinds of resolution tactics, as well as
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    20
the shortcuts in the subgoal module.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    21
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    22
All the tactics in this section act on a subgoal designated by a positive
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    23
integer~$i$.  They fail (by returning the empty sequence) if~$i$ is out of
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    24
range.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    25
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    26
\subsection{Resolution tactics}
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    27
\index{resolution!tactics}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    28
\index{tactics!resolution|bold}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    29
\begin{ttbox} 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    30
resolve_tac  : thm list -> int -> tactic
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    31
eresolve_tac : thm list -> int -> tactic
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    32
dresolve_tac : thm list -> int -> tactic
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    33
forward_tac  : thm list -> int -> tactic 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    34
\end{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    35
These perform resolution on a list of theorems, $thms$, representing a list
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    36
of object-rules.  When generating next states, they take each of the rules
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    37
in the order given.  Each rule may yield several next states, or none:
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    38
higher-order resolution may yield multiple resolvents.
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    39
\begin{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    40
\item[\ttindexbold{resolve_tac} {\it thms} {\it i}] 
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    41
  refines the proof state using the rules, which should normally be
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    42
  introduction rules.  It resolves a rule's conclusion with
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    43
  subgoal~$i$ of the proof state.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    44
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    45
\item[\ttindexbold{eresolve_tac} {\it thms} {\it i}] 
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    46
  \index{elim-resolution}
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    47
  performs elim-resolution with the rules, which should normally be
4607
6759ba6d3cc1 Added reference to rotate_prems
paulson
parents: 4597
diff changeset
    48
  elimination rules.  It resolves with a rule, proves its first premise by
6759ba6d3cc1 Added reference to rotate_prems
paulson
parents: 4597
diff changeset
    49
  assumption, and finally \emph{deletes} that assumption from any new
6759ba6d3cc1 Added reference to rotate_prems
paulson
parents: 4597
diff changeset
    50
  subgoals.  (To rotate a rule's premises,
7491
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
    51
  see \texttt{rotate_prems} in~{\S}\ref{MiscellaneousForwardRules}.)
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    52
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    53
\item[\ttindexbold{dresolve_tac} {\it thms} {\it i}] 
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    54
  \index{forward proof}\index{destruct-resolution}
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    55
  performs destruct-resolution with the rules, which normally should
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    56
  be destruction rules.  This replaces an assumption by the result of
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    57
  applying one of the rules.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    58
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    59
\item[\ttindexbold{forward_tac}]\index{forward proof}
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    60
  is like {\tt dresolve_tac} except that the selected assumption is not
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    61
  deleted.  It applies a rule to an assumption, adding the result as a new
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    62
  assumption.
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    63
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    64
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    65
\subsection{Assumption tactics}
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    66
\index{tactics!assumption|bold}\index{assumptions!tactics for}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    67
\begin{ttbox} 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    68
assume_tac    : int -> tactic
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    69
eq_assume_tac : int -> tactic
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    70
\end{ttbox} 
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    71
\begin{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    72
\item[\ttindexbold{assume_tac} {\it i}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    73
attempts to solve subgoal~$i$ by assumption.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    74
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    75
\item[\ttindexbold{eq_assume_tac}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    76
is like {\tt assume_tac} but does not use unification.  It succeeds (with a
4607
6759ba6d3cc1 Added reference to rotate_prems
paulson
parents: 4597
diff changeset
    77
\emph{unique} next state) if one of the assumptions is identical to the
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    78
subgoal's conclusion.  Since it does not instantiate variables, it cannot
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    79
make other subgoals unprovable.  It is intended to be called from proof
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    80
strategies, not interactively.
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    81
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    82
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    83
\subsection{Matching tactics} \label{match_tac}
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    84
\index{tactics!matching}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    85
\begin{ttbox} 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    86
match_tac  : thm list -> int -> tactic
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    87
ematch_tac : thm list -> int -> tactic
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    88
dmatch_tac : thm list -> int -> tactic
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    89
\end{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    90
These are just like the resolution tactics except that they never
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    91
instantiate unknowns in the proof state.  Flexible subgoals are not updated
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    92
willy-nilly, but are left alone.  Matching --- strictly speaking --- means
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    93
treating the unknowns in the proof state as constants; these tactics merely
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    94
discard unifiers that would update the proof state.
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    95
\begin{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    96
\item[\ttindexbold{match_tac} {\it thms} {\it i}] 
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
    97
refines the proof state using the rules, matching a rule's
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    98
conclusion with subgoal~$i$ of the proof state.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
    99
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   100
\item[\ttindexbold{ematch_tac}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   101
is like {\tt match_tac}, but performs elim-resolution.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   102
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   103
\item[\ttindexbold{dmatch_tac}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   104
is like {\tt match_tac}, but performs destruct-resolution.
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
   105
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   106
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   107
10347
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   108
\subsection{Explicit instantiation} \label{res_inst_tac}
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
   109
\index{tactics!instantiation}\index{instantiation}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   110
\begin{ttbox} 
10347
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   111
res_inst_tac    : (string*string)list -> thm -> int -> tactic
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   112
eres_inst_tac   : (string*string)list -> thm -> int -> tactic
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   113
dres_inst_tac   : (string*string)list -> thm -> int -> tactic
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   114
forw_inst_tac   : (string*string)list -> thm -> int -> tactic
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   115
instantiate_tac : (string*string)list -> tactic
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   116
\end{ttbox}
10347
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   117
The first four of these tactics are designed for applying rules by resolution
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   118
such as substitution and induction, which cause difficulties for higher-order 
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   119
unification.  The tactics accept explicit instantiations for unknowns 
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   120
in the rule ---typically, in the rule's conclusion. The last one, 
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   121
{\tt instantiate_tac}, may be used to instantiate unknowns in the proof state,
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   122
independently of rule application. 
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   123
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   124
Each instantiation is a pair {\tt($v$,$e$)}, 
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   125
where $v$ is an unknown \emph{without} its leading question mark!
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   126
\begin{itemize}
332
01b87a921967 final Springer copy
lcp
parents: 323
diff changeset
   127
\item If $v$ is the type unknown {\tt'a}, then
01b87a921967 final Springer copy
lcp
parents: 323
diff changeset
   128
the rule must contain a type unknown \verb$?'a$ of some
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   129
sort~$s$, and $e$ should be a type of sort $s$.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   130
332
01b87a921967 final Springer copy
lcp
parents: 323
diff changeset
   131
\item If $v$ is the unknown {\tt P}, then
01b87a921967 final Springer copy
lcp
parents: 323
diff changeset
   132
the rule must contain an unknown \verb$?P$ of some type~$\tau$,
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   133
and $e$ should be a term of some type~$\sigma$ such that $\tau$ and
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   134
$\sigma$ are unifiable.  If the unification of $\tau$ and $\sigma$
332
01b87a921967 final Springer copy
lcp
parents: 323
diff changeset
   135
instantiates any type unknowns in $\tau$, these instantiations
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   136
are recorded for application to the rule.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   137
\end{itemize}
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7491
diff changeset
   138
Types are instantiated before terms are.  Because type instantiations are
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   139
inferred from term instantiations, explicit type instantiations are seldom
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   140
necessary --- if \verb$?t$ has type \verb$?'a$, then the instantiation list
8136
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7491
diff changeset
   141
\texttt{[("'a","bool"), ("t","True")]} may be simplified to
8c65f3ca13f2 fixed many bad line & page breaks
paulson
parents: 7491
diff changeset
   142
\texttt{[("t","True")]}.  Type unknowns in the proof state may cause
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   143
failure because the tactics cannot instantiate them.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   144
10347
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   145
The first four instantiation tactics act on a given subgoal.  Terms in the
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   146
instantiations are type-checked in the context of that subgoal --- in
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   147
particular, they may refer to that subgoal's parameters.  Any unknowns in
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   148
the terms receive subscripts and are lifted over the parameters; thus, you
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   149
may not refer to unknowns in the subgoal.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   150
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
   151
\begin{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   152
\item[\ttindexbold{res_inst_tac} {\it insts} {\it thm} {\it i}]
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   153
instantiates the rule {\it thm} with the instantiations {\it insts}, as
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   154
described above, and then performs resolution on subgoal~$i$.  Resolution
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   155
typically causes further instantiations; you need not give explicit
332
01b87a921967 final Springer copy
lcp
parents: 323
diff changeset
   156
instantiations for every unknown in the rule.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   157
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   158
\item[\ttindexbold{eres_inst_tac}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   159
is like {\tt res_inst_tac}, but performs elim-resolution.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   160
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   161
\item[\ttindexbold{dres_inst_tac}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   162
is like {\tt res_inst_tac}, but performs destruct-resolution.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   163
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   164
\item[\ttindexbold{forw_inst_tac}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   165
is like {\tt dres_inst_tac} except that the selected assumption is not
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   166
deleted.  It applies the instantiated rule to an assumption, adding the
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   167
result as a new assumption.
10347
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   168
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   169
\item[\ttindexbold{instantiate_tac} {\it insts}] 
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   170
instantiates unknowns in the proof state. This affects the main goal as 
c0cfc4ac12e2 added instantiate_tac
oheimb
parents: 9695
diff changeset
   171
well as all subgoals.
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
   172
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   173
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   174
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   175
\section{Other basic tactics}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   176
\subsection{Tactic shortcuts}
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
   177
\index{shortcuts!for tactics}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   178
\index{tactics!resolution}\index{tactics!assumption}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   179
\index{tactics!meta-rewriting}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   180
\begin{ttbox} 
7491
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   181
rtac     :      thm ->        int -> tactic
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   182
etac     :      thm ->        int -> tactic
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   183
dtac     :      thm ->        int -> tactic
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   184
ftac     :      thm ->        int -> tactic
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   185
atac     :                    int -> tactic
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   186
eatac    :      thm -> int -> int -> tactic
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   187
datac    :      thm -> int -> int -> tactic
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   188
fatac    :      thm -> int -> int -> tactic
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   189
ares_tac :      thm list   -> int -> tactic
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   190
rewtac   :      thm ->               tactic
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   191
\end{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   192
These abbreviate common uses of tactics.
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
   193
\begin{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   194
\item[\ttindexbold{rtac} {\it thm} {\it i}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   195
abbreviates \hbox{\tt resolve_tac [{\it thm}] {\it i}}, doing resolution.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   196
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   197
\item[\ttindexbold{etac} {\it thm} {\it i}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   198
abbreviates \hbox{\tt eresolve_tac [{\it thm}] {\it i}}, doing elim-resolution.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   199
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   200
\item[\ttindexbold{dtac} {\it thm} {\it i}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   201
abbreviates \hbox{\tt dresolve_tac [{\it thm}] {\it i}}, doing
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   202
destruct-resolution.
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   203
7491
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   204
\item[\ttindexbold{ftac} {\it thm} {\it i}] 
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   205
abbreviates \hbox{\tt forward_tac [{\it thm}] {\it i}}, doing
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   206
destruct-resolution without deleting the assumption.
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   207
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   208
\item[\ttindexbold{atac} {\it i}] 
332
01b87a921967 final Springer copy
lcp
parents: 323
diff changeset
   209
abbreviates \hbox{\tt assume_tac {\it i}}, doing proof by assumption.
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   210
7491
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   211
\item[\ttindexbold{eatac} {\it thm} {\it j} {\it i}] 
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   212
performs \hbox{\tt etac {\it thm}} and then {\it j} times \texttt{atac}, 
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   213
solving additionally {\it j}~premises of the rule {\it thm} by assumption.
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   214
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   215
\item[\ttindexbold{datac} {\it thm} {\it j} {\it i}] 
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   216
performs \hbox{\tt dtac {\it thm}} and then {\it j} times \texttt{atac}, 
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   217
solving additionally {\it j}~premises of the rule {\it thm} by assumption.
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   218
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   219
\item[\ttindexbold{fatac} {\it thm} {\it j} {\it i}] 
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   220
performs \hbox{\tt ftac {\it thm}} and then {\it j} times \texttt{atac}, 
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   221
solving additionally {\it j}~premises of the rule {\it thm} by assumption.
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   222
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   223
\item[\ttindexbold{ares_tac} {\it thms} {\it i}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   224
tries proof by assumption and resolution; it abbreviates
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   225
\begin{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   226
assume_tac {\it i} ORELSE resolve_tac {\it thms} {\it i}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   227
\end{ttbox}
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   228
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   229
\item[\ttindexbold{rewtac} {\it def}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   230
abbreviates \hbox{\tt rewrite_goals_tac [{\it def}]}, unfolding a definition.
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
   231
\end{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   232
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   233
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   234
\subsection{Inserting premises and facts}\label{cut_facts_tac}
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
   235
\index{tactics!for inserting facts}\index{assumptions!inserting}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   236
\begin{ttbox} 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   237
cut_facts_tac : thm list -> int -> tactic
286
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   238
cut_inst_tac  : (string*string)list -> thm -> int -> tactic
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   239
subgoal_tac   : string -> int -> tactic
9523
232b09dba0fe subgoals_tac: fixed spelling;
wenzelm
parents: 8136
diff changeset
   240
subgoals_tac  : string list -> int -> tactic
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   241
\end{ttbox}
2039
79c86b966257 Documented defer_tac and moved back the obsolete tactics like fold_tac
paulson
parents: 1212
diff changeset
   242
These tactics add assumptions to a subgoal.
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
   243
\begin{ttdescription}
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   244
\item[\ttindexbold{cut_facts_tac} {\it thms} {\it i}] 
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   245
  adds the {\it thms} as new assumptions to subgoal~$i$.  Once they have
286
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   246
  been inserted as assumptions, they become subject to tactics such as {\tt
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   247
    eresolve_tac} and {\tt rewrite_goals_tac}.  Only rules with no premises
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   248
  are inserted: Isabelle cannot use assumptions that contain $\Imp$
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   249
  or~$\Forall$.  Sometimes the theorems are premises of a rule being
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   250
  derived, returned by~{\tt goal}; instead of calling this tactic, you
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   251
  could state the goal with an outermost meta-quantifier.
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   252
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   253
\item[\ttindexbold{cut_inst_tac} {\it insts} {\it thm} {\it i}]
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   254
  instantiates the {\it thm} with the instantiations {\it insts}, as
7491
95a4af0e10a7 added ftac, eatac, datac, fatac
oheimb
parents: 6618
diff changeset
   255
  described in {\S}\ref{res_inst_tac}.  It adds the resulting theorem as a
286
e7efbf03562b first draft of Springer book
lcp
parents: 104
diff changeset
   256
  new assumption to subgoal~$i$. 
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   257
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   258
\item[\ttindexbold{subgoal_tac} {\it formula} {\it i}] 
9568
20c410fb5104 fixed spelling;
wenzelm
parents: 9523
diff changeset
   259
adds the {\it formula} as an assumption to subgoal~$i$, and inserts the same
104
d8205bb279a7 Initial revision
lcp
parents:
diff changeset
   260
{\it formula} as a new subgoal, $i+1$.
457
8577bc1c4e1b documented subgoals_tac
lcp
parents: 332
diff changeset
   261
8577bc1c4e1b documented subgoals_tac
lcp
parents: 332
diff changeset
   262
\item[\ttindexbold{subgoals_tac} {\it formulae} {\it i}] 
8577bc1c4e1b documented subgoals_tac
lcp
parents: 332
diff changeset
   263
  uses {\tt subgoal_tac} to add the members of the list of {\it
8577bc1c4e1b documented subgoals_tac
lcp
parents: 332
diff changeset
   264
    formulae} as assumptions to subgoal~$i$. 
323
361a71713176 penultimate Springer draft
lcp
parents: 286
diff changeset
   265
\end{ttdescription}