doc-src/TutorialI/Advanced/WFrec.thy
author nipkow
Wed, 11 Oct 2000 10:44:42 +0200
changeset 10187 0376cccd9118
child 10189 865918597b63
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10187
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
     1
(*<*)theory WFrec = Main:(*>*)
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
     2
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
     3
text{*\noindent
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
     4
So far, all recursive definitions where shown to terminate via measure
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
     5
functions. Sometimes this can be quite inconvenient or even
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
     6
impossible. Fortunately, \isacommand{recdef} supports much more
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
     7
general definitions. For example, termination of Ackermann's function
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
     8
can be shown by means of the lexicographic product @{text"<*lex*>"}:
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
     9
*}
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    10
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    11
consts ack :: "nat\<times>nat \<Rightarrow> nat";
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    12
recdef ack "measure(\<lambda>m. m) <*lex*> measure(\<lambda>n. n)"
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    13
  "ack(0,n)         = Suc n"
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    14
  "ack(Suc m,0)     = ack(m, 1)"
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    15
  "ack(Suc m,Suc n) = ack(m,ack(Suc m,n))";
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    16
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    17
text{*\noindent
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    18
The lexicographic product decreases if either its first component
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    19
decreases (as in the second equation and in the outer call in the
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    20
third equation) or its first component stays the same and the second
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    21
component decreases (as in the inner call in the third equation).
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    22
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    23
In general, \isacommand{recdef} supports termination proofs based on
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    24
arbitrary \emph{wellfounded relations}, i.e.\ \emph{wellfounded
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    25
recursion}\indexbold{recursion!wellfounded}\index{wellfounded
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    26
recursion|see{recursion, wellfounded}}.  A relation $<$ is
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    27
\bfindex{wellfounded} if it has no infinite descending chain $\cdots <
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    28
a@2 < a@1 < a@0$. Clearly, a function definition is total iff the set
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    29
of all pairs $(r,l)$, where $l$ is the argument on the left-hand side of an equation
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    30
and $r$ the argument of some recursive call on the corresponding
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    31
right-hand side, induces a wellfounded relation.  For a systematic
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    32
account of termination proofs via wellfounded relations see, for
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    33
example, \cite{Baader-Nipkow}.
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    34
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    35
Each \isacommand{recdef} definition should be accompanied (after the
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    36
name of the function) by a wellfounded relation on the argument type
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    37
of the function. For example, @{term measure} is defined by
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    38
@{prop[display]"measure(f::'a \<Rightarrow> nat) \<equiv> {(y,x). f y < f x}"}
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    39
and it has been proved that @{term"measure f"} is always wellfounded.
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    40
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    41
In addition to @{term measure}, the library provides
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    42
a number of further constructions for obtaining wellfounded relations.
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    43
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    44
wf proof auto if stndard constructions.
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    45
*}
0376cccd9118 *** empty log message ***
nipkow
parents:
diff changeset
    46
(*<*)end(*>*)