doc-src/IsarRef/generic.tex
author wenzelm
Fri, 29 Oct 1999 16:48:55 +0200
changeset 7974 34245feb6e82
parent 7905 c5f735f7428c
child 7981 5120a2a15d06
permissions -rw-r--r--
improved;
     1 
     2 \chapter{Generic Tools and Packages}\label{ch:gen-tools}
     3 
     4 \section{Basic proof methods}\label{sec:pure-meth}
     5 
     6 \indexisarmeth{fail}\indexisarmeth{succeed}\indexisarmeth{$-$}\indexisarmeth{assumption}
     7 \indexisarmeth{fold}\indexisarmeth{unfold}
     8 \indexisarmeth{rule}\indexisarmeth{erule}
     9 \begin{matharray}{rcl}
    10   - & : & \isarmeth \\
    11   assumption & : & \isarmeth \\
    12   rule & : & \isarmeth \\
    13   erule^* & : & \isarmeth \\[0.5ex]
    14   fold & : & \isarmeth \\
    15   unfold & : & \isarmeth \\[0.5ex]
    16   succeed & : & \isarmeth \\
    17   fail & : & \isarmeth \\
    18 \end{matharray}
    19 
    20 \begin{rail}
    21   ('fold' | 'unfold' | 'rule' | 'erule') thmrefs
    22   ;
    23 \end{rail}
    24 
    25 \begin{descr}
    26 \item [``$-$''] does nothing but insert the forward chaining facts as premises
    27   into the goal.  Note that command $\PROOFNAME$ without any method actually
    28   performs a single reduction step using the $rule$ method (see below); thus a
    29   plain \emph{do-nothing} proof step would be $\PROOF{-}$ rather than
    30   $\PROOFNAME$ alone.
    31 \item [$assumption$] solves some goal by assumption.  Any facts given are
    32   guaranteed to participate in the refinement.  Note that ``$\DOT$'' (dot)
    33   abbreviates $\BY{assumption}$.
    34 \item [$rule~thms$] applies some rule given as argument in backward manner;
    35   facts are used to reduce the rule before applying it to the goal.  Thus
    36   $rule$ without facts is plain \emph{introduction}, while with facts it
    37   becomes a (generalized) \emph{elimination}.
    38   
    39   Note that the classical reasoner introduces another version of $rule$ that
    40   is able to pick appropriate rules automatically, whenever explicit $thms$
    41   are omitted (see \S\ref{sec:classical-basic}); that method is the default
    42   for $\PROOFNAME$ steps.  Note that ``$\DDOT$'' (double-dot) abbreviates
    43   $\BY{default}$.
    44 \item [$erule~thms$] is similar to $rule$, but applies rules by
    45   elim-resolution.  This is an improper method, mainly for experimentation and
    46   porting of old scripts.  Actual elimination proofs are usually done with
    47   $rule$ (single step, involving facts) or $elim$ (repeated steps, see
    48   \S\ref{sec:classical-basic}).
    49 \item [$unfold~thms$ and $fold~thms$] expand and fold back again the given
    50   meta-level definitions throughout all goals; any facts provided are
    51   \emph{ignored}.
    52 \item [$succeed$] yields a single (unchanged) result; it is the identify of
    53   the ``\texttt{,}'' method combinator (cf.\ \S\ref{sec:syn-meth}).
    54 \item [$fail$] yields an empty result sequence; it is the identify of the
    55   ``\texttt{|}'' method combinator (cf.\ \S\ref{sec:syn-meth}).
    56 \end{descr}
    57 
    58 
    59 \section{Miscellaneous attributes}
    60 
    61 \indexisaratt{tag}\indexisaratt{untag}\indexisaratt{COMP}\indexisaratt{RS}
    62 \indexisaratt{OF}\indexisaratt{where}\indexisaratt{of}\indexisaratt{standard}
    63 \indexisaratt{elimify}\indexisaratt{transfer}\indexisaratt{export}
    64 \begin{matharray}{rcl}
    65   tag & : & \isaratt \\
    66   untag & : & \isaratt \\[0.5ex]
    67   OF & : & \isaratt \\
    68   RS & : & \isaratt \\
    69   COMP & : & \isaratt \\[0.5ex]
    70   of & : & \isaratt \\
    71   where & : & \isaratt \\[0.5ex]
    72   standard & : & \isaratt \\
    73   elimify & : & \isaratt \\
    74   export^* & : & \isaratt \\
    75   transfer & : & \isaratt \\
    76 \end{matharray}
    77 
    78 \begin{rail}
    79   ('tag' | 'untag') (nameref+)
    80   ;
    81   'OF' thmrefs
    82   ;
    83   ('RS' | 'COMP') nat? thmref
    84   ;
    85   'of' (inst * ) ('concl' ':' (inst * ))?
    86   ;
    87   'where' (name '=' term * 'and')
    88   ;
    89 
    90   inst: underscore | term
    91   ;
    92 \end{rail}
    93 
    94 \begin{descr}
    95 \item [$tag~tags$ and $untag~tags$] add and remove $tags$ of the theorem,
    96   respectively.  Tags may be any list of strings that serve as comment for
    97   some tools (e.g.\ $\LEMMANAME$ causes the tag ``$lemma$'' to be added to the
    98   result).
    99 \item [$OF~thms$, $RS~n~thm$, and $COMP~n~thm$] compose rules.  $OF$ applies
   100   $thms$ in parallel (cf.\ \texttt{MRS} in \cite[\S5]{isabelle-ref}, but note
   101   the reversed order).  Note that premises may be skipped by including $\_$
   102   (underscore) as argument.
   103   
   104   $RS$ resolves with the $n$-th premise of $thm$; $COMP$ is a version of $RS$
   105   that does not include the automatic lifting process that is normally
   106   intended (cf.\ \texttt{RS} and \texttt{COMP} in \cite[\S5]{isabelle-ref}).
   107   
   108 \item [$of~\vec t$ and $where~\vec x = \vec t$] perform positional and named
   109   instantiation, respectively.  The terms given in $of$ are substituted for
   110   any schematic variables occurring in a theorem from left to right;
   111   ``\texttt{_}'' (underscore) indicates to skip a position.
   112  
   113 \item [$standard$] puts a theorem into the standard form of object-rules, just
   114   as the ML function \texttt{standard} (see \cite[\S5]{isabelle-ref}).
   115   
   116 \item [$elimify$] turns an destruction rule into an elimination, just as the
   117   ML function \texttt{make\_elim} (see \cite{isabelle-ref}).
   118   
   119 \item [$export$] lifts a local result out of the current proof context,
   120   generalizing all fixed variables and discharging all assumptions.  Note that
   121   (partial) export is usually done automatically behind the scenes.  This
   122   attribute is mainly for experimentation.
   123   
   124 \item [$transfer$] promotes a theorem to the current theory context, which has
   125   to enclose the former one.  Normally, this is done automatically when rules
   126   are joined by inference.
   127 
   128 \end{descr}
   129 
   130 
   131 \section{Calculational proof}\label{sec:calculation}
   132 
   133 \indexisarcmd{also}\indexisarcmd{finally}\indexisaratt{trans}
   134 \begin{matharray}{rcl}
   135   \isarcmd{also} & : & \isartrans{proof(state)}{proof(state)} \\
   136   \isarcmd{finally} & : & \isartrans{proof(state)}{proof(chain)} \\
   137   trans & : & \isaratt \\
   138 \end{matharray}
   139 
   140 Calculational proof is forward reasoning with implicit application of
   141 transitivity rules (such those of $=$, $\le$, $<$).  Isabelle/Isar maintains
   142 an auxiliary register $calculation$\indexisarthm{calculation} for accumulating
   143 results obtained by transitivity composed with the current result.  Command
   144 $\ALSO$ updates $calculation$ involving $this$, while $\FINALLY$ exhibits the
   145 final $calculation$ by forward chaining towards the next goal statement.  Both
   146 commands require valid current facts, i.e.\ may occur only after commands that
   147 produce theorems such as $\ASSUMENAME$, $\NOTENAME$, or some finished proof of
   148 $\HAVENAME$, $\SHOWNAME$ etc.
   149 
   150 Also note that the automatic term abbreviation ``$\dots$'' has its canonical
   151 application with calculational proofs.  It automatically refers to the
   152 argument\footnote{The argument of a curried infix expression is its right-hand
   153   side.} of the preceding statement.
   154 
   155 Isabelle/Isar calculations are implicitly subject to block structure in the
   156 sense that new threads of calculational reasoning are commenced for any new
   157 block (as opened by a local goal, for example).  This means that, apart from
   158 being able to nest calculations, there is no separate \emph{begin-calculation}
   159 command required.
   160 
   161 \begin{rail}
   162   ('also' | 'finally') transrules? comment?
   163   ;
   164   'trans' (() | 'add' ':' | 'del' ':') thmrefs
   165   ;
   166 
   167   transrules: '(' thmrefs ')' interest?
   168   ;
   169 \end{rail}
   170 
   171 \begin{descr}
   172 \item [$\ALSO~(thms)$] maintains the auxiliary $calculation$ register as
   173   follows.  The first occurrence of $\ALSO$ in some calculational thread
   174   initializes $calculation$ by $this$. Any subsequent $\ALSO$ on the same
   175   level of block-structure updates $calculation$ by some transitivity rule
   176   applied to $calculation$ and $this$ (in that order).  Transitivity rules are
   177   picked from the current context plus those given as $thms$ (the latter have
   178   precedence).
   179   
   180 \item [$\FINALLY~(thms)$] maintaining $calculation$ in the same way as
   181   $\ALSO$, and concludes the current calculational thread.  The final result
   182   is exhibited as fact for forward chaining towards the next goal. Basically,
   183   $\FINALLY$ just abbreviates $\ALSO~\FROM{calculation}$.  Typical proof
   184   idioms are``$\FINALLY~\SHOW{}{\Var{thesis}}~\DOT$'' and
   185   ``$\FINALLY~\HAVE{}{\phi}~\DOT$''.
   186   
   187 \item [$trans$] maintains the set of transitivity rules of the theory or proof
   188   context, by adding or deleting theorems (the default is to add).
   189 \end{descr}
   190 
   191 %FIXME
   192 %See theory \texttt{HOL/Isar_examples/Group} for a simple application of
   193 %calculations for basic equational reasoning.
   194 %\texttt{HOL/Isar_examples/KnasterTarski} involves a few more advanced
   195 %calculational steps in combination with natural deduction.
   196 
   197 
   198 \section{Axiomatic Type Classes}\label{sec:axclass}
   199 
   200 \indexisarcmd{axclass}\indexisarcmd{instance}\indexisarmeth{intro-classes}
   201 \begin{matharray}{rcl}
   202   \isarcmd{axclass} & : & \isartrans{theory}{theory} \\
   203   \isarcmd{instance} & : & \isartrans{theory}{proof(prove)} \\
   204   intro_classes & : & \isarmeth \\
   205 \end{matharray}
   206 
   207 Axiomatic type classes are provided by Isabelle/Pure as a purely
   208 \emph{definitional} interface to type classes (cf.~\S\ref{sec:classes}).  Thus
   209 any object logic may make use of this light-weight mechanism for abstract
   210 theories.  See \cite{Wenzel:1997:TPHOL} for more information.  There is also a
   211 tutorial on \emph{Using Axiomatic Type Classes in Isabelle} that is part of
   212 the standard Isabelle documentation.
   213 %FIXME cite
   214 
   215 \begin{rail}
   216   'axclass' classdecl (axmdecl prop comment? +)
   217   ;
   218   'instance' (nameref '<' nameref | nameref '::' simplearity) comment?
   219   ;
   220 \end{rail}
   221 
   222 \begin{descr}
   223 \item [$\isarkeyword{axclass}~c < \vec c~axms$] defines an axiomatic type
   224   class as the intersection of existing classes, with additional axioms
   225   holding.  Class axioms may not contain more than one type variable.  The
   226   class axioms (with implicit sort constraints added) are bound to the given
   227   names.  Furthermore a class introduction rule is generated, which is
   228   employed by method $intro_classes$ in support instantiation proofs of this
   229   class.
   230   
   231 \item [$\isarkeyword{instance}~c@1 < c@2$ and $\isarkeyword{instance}~t ::
   232   (\vec s)c$] setup up a goal stating the class relation or type arity.  The
   233   proof would usually proceed by the $intro_classes$ method, and then
   234   establish the characteristic theorems of the type classes involved.  After
   235   finishing the proof the theory will be augmented by a type signature
   236   declaration corresponding to the resulting theorem.
   237 \item [$intro_classes$] repeatedly expands the class introduction rules of
   238   this theory.
   239 \end{descr}
   240 
   241 See theory \texttt{HOL/Isar_examples/Group} for a simple example of using
   242 axiomatic type classes, including instantiation proofs.
   243 
   244 
   245 \section{The Simplifier}
   246 
   247 \subsection{Simplification methods}\label{sec:simp}
   248 
   249 \indexisarmeth{simp}
   250 \begin{matharray}{rcl}
   251   simp & : & \isarmeth \\
   252 \end{matharray}
   253 
   254 \begin{rail}
   255   'simp' ('!' ?) (simpmod * )
   256   ;
   257 
   258   simpmod: ('add' | 'del' | 'only' | 'other') ':' thmrefs
   259   ;
   260 \end{rail}
   261 
   262 \begin{descr}
   263 \item [$simp$] invokes Isabelle's simplifier, after modifying the context by
   264   adding or deleting rules as specified.  The \railtoken{only} modifier first
   265   removes all other rewrite rules and congruences, and then is like
   266   \railtoken{add}.  In contrast, \railtoken{other} ignores its arguments;
   267   nevertheless there may be side-effects on the context via
   268   attributes.\footnote{This provides a back door for arbitrary context
   269     manipulation.}
   270   
   271   The $simp$ method is based on \texttt{asm_full_simp_tac}
   272   \cite[\S10]{isabelle-ref}, but is much better behaved in practice.  Just the
   273   local premises of the actual goal are involved by default.  Additional facts
   274   may be inserted via forward-chaining (using $\THEN$, $\FROMNAME$ etc.).  The
   275   full context of assumptions is only included in the $simp!$ version, which
   276   should be used with care.
   277 \end{descr}
   278 
   279 \subsection{Modifying the context}
   280 
   281 \indexisaratt{simp}
   282 \begin{matharray}{rcl}
   283   simp & : & \isaratt \\
   284 \end{matharray}
   285 
   286 \begin{rail}
   287   'simp' (() | 'add' | 'del')
   288   ;
   289 \end{rail}
   290 
   291 \begin{descr}
   292 \item [$simp$] adds or deletes rules from the theory or proof context (the
   293   default is to add).
   294 \end{descr}
   295 
   296 
   297 \subsection{Forward simplification}
   298 
   299 \indexisaratt{simplify}\indexisaratt{asm-simplify}
   300 \indexisaratt{full-simplify}\indexisaratt{asm-full-simplify}
   301 \begin{matharray}{rcl}
   302   simplify & : & \isaratt \\
   303   asm_simplify & : & \isaratt \\
   304   full_simplify & : & \isaratt \\
   305   asm_full_simplify & : & \isaratt \\
   306 \end{matharray}
   307 
   308 These attributes provide forward rules for simplification, which should be
   309 used only very rarely.  There are no separate options for adding or deleting
   310 simplification rules locally.
   311 
   312 See the ML functions of the same name in \cite[\S10]{isabelle-ref} for more
   313 information.
   314 
   315 
   316 \section{The Classical Reasoner}
   317 
   318 \subsection{Basic methods}\label{sec:classical-basic}
   319 
   320 \indexisarmeth{rule}\indexisarmeth{intro}
   321 \indexisarmeth{elim}\indexisarmeth{default}\indexisarmeth{contradiction}
   322 \begin{matharray}{rcl}
   323   rule & : & \isarmeth \\
   324   intro & : & \isarmeth \\
   325   elim & : & \isarmeth \\
   326   contradiction & : & \isarmeth \\
   327 \end{matharray}
   328 
   329 \begin{rail}
   330   ('rule' | 'intro' | 'elim') thmrefs
   331   ;
   332 \end{rail}
   333 
   334 \begin{descr}
   335 \item [$rule$] as offered by the classical reasoner is a refinement over the
   336   primitive one (see \S\ref{sec:pure-meth}).  In case that no rules are
   337   provided as arguments, it automatically determines elimination and
   338   introduction rules from the context (see also \S\ref{sec:classical-mod}).
   339   In that form it is the default method for basic proof steps, such as
   340   $\PROOFNAME$ and ``$\DDOT$'' (two dots).
   341   
   342 \item [$intro$ and $elim$] repeatedly refine some goal by intro- or
   343   elim-resolution, after having inserted any facts.  Omitting the arguments
   344   refers to any suitable rules from the context, otherwise only the explicitly
   345   given ones may be applied.  The latter form admits better control of what
   346   actually happens, thus it is very appropriate as an initial method for
   347   $\PROOFNAME$ that splits up certain connectives of the goal, before entering
   348   the actual proof.
   349   
   350 \item [$contradiction$] solves some goal by contradiction, deriving any result
   351   from both $\neg A$ and $A$.  Facts, which are guaranteed to participate, may
   352   appear in either order.
   353 \end{descr}
   354 
   355 
   356 \subsection{Automatic methods}\label{sec:classical-auto}
   357 
   358 \indexisarmeth{blast}
   359 \indexisarmeth{fast}\indexisarmeth{best}\indexisarmeth{slow}\indexisarmeth{slow-best}
   360 \begin{matharray}{rcl}
   361  blast & : & \isarmeth \\
   362  fast & : & \isarmeth \\
   363  best & : & \isarmeth \\
   364  slow & : & \isarmeth \\
   365  slow_best & : & \isarmeth \\
   366 \end{matharray}
   367 
   368 \railalias{slowbest}{slow\_best}
   369 \railterm{slowbest}
   370 
   371 \begin{rail}
   372   'blast' ('!' ?) nat? (clamod * )
   373   ;
   374   ('fast' | 'best' | 'slow' | slowbest) ('!' ?) (clamod * )
   375   ;
   376 
   377   clamod: (('intro' | 'elim' | 'dest') (() | '!' | '!!') | 'del') ':' thmrefs
   378   ;
   379 \end{rail}
   380 
   381 \begin{descr}
   382 \item [$blast$] refers to the classical tableau prover (see \texttt{blast_tac}
   383   in \cite[\S11]{isabelle-ref}).  The optional argument specifies a
   384   user-supplied search bound (default 20).
   385 \item [$fast$, $best$, $slow$, $slow_best$] refer to the generic classical
   386   reasoner (see \cite[\S11]{isabelle-ref}, tactic \texttt{fast_tac} etc).
   387 \end{descr}
   388 
   389 Any of above methods support additional modifiers of the context of classical
   390 rules.  There semantics is analogous to the attributes given in
   391 \S\ref{sec:classical-mod}.
   392 
   393 
   394 \subsection{Combined automatic methods}
   395 
   396 \indexisarmeth{auto}\indexisarmeth{force}
   397 \begin{matharray}{rcl}
   398   force & : & \isarmeth \\
   399   auto & : & \isarmeth \\
   400 \end{matharray}
   401 
   402 \begin{rail}
   403   ('force' | 'auto') ('!' ?) (clasimpmod * )
   404   ;
   405 
   406   clasimpmod: ('simp' ('add' | 'del' | 'only') | other |
   407     (('intro' | 'elim' | 'dest') (() | '!' | '!!') | 'del')) ':' thmrefs
   408 \end{rail}
   409 
   410 \begin{descr}
   411 \item [$force$ and $auto$] provide access to Isabelle's combined
   412   simplification and classical reasoning tactics.  See \texttt{force_tac} and
   413   \texttt{auto_tac} in \cite[\S11]{isabelle-ref} for more information.  The
   414   modifier arguments correspond to those given in \S\ref{sec:simp} and
   415   \S\ref{sec:classical-auto}.  Just note that the ones related to the
   416   Simplifier are prefixed by \railtoken{simp} here.
   417 \end{descr}
   418 
   419 \subsection{Modifying the context}\label{sec:classical-mod}
   420 
   421 \indexisaratt{intro}\indexisaratt{elim}\indexisaratt{dest}
   422 \indexisaratt{iff}\indexisaratt{delrule}
   423 \begin{matharray}{rcl}
   424   intro & : & \isaratt \\
   425   elim & : & \isaratt \\
   426   dest & : & \isaratt \\
   427   iff & : & \isaratt \\
   428   delrule & : & \isaratt \\
   429 \end{matharray}
   430 
   431 \begin{rail}
   432   ('intro' | 'elim' | 'dest') (() | '!' | '!!')
   433   ;
   434 \end{rail}
   435 
   436 \begin{descr}
   437 \item [$intro$, $elim$, $dest$] add introduction, elimination, destruct rules,
   438   respectively.  By default, rules are considered as \emph{safe}, while a
   439   single ``!'' classifies as \emph{unsafe}, and ``!!'' as \emph{extra} (i.e.\ 
   440   not applied in the search-oriented automatic methods, but only $rule$).
   441   
   442 \item [$iff$] declares equations both as rewrite rules for the simplifier and
   443   classical reasoning rules.
   444 
   445 \item [$delrule$] deletes introduction or elimination rules from the context.
   446   Note that destruction rules would have to be turned into elimination rules
   447   first, e.g.\ by using the $elimify$ attribute.
   448 \end{descr}
   449 
   450 %%% Local Variables: 
   451 %%% mode: latex
   452 %%% TeX-master: "isar-ref"
   453 %%% End: