doc-src/TutorialI/Advanced/advanced.tex
author paulson
Thu, 09 Aug 2001 18:12:15 +0200
changeset 11494 23a118849801
parent 11428 332347b9b942
child 25281 8d309beb66d6
permissions -rw-r--r--
revisions and indexing
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10178
aecb5bf6f76f *** empty log message ***
nipkow
parents: 10171
diff changeset
     1
\chapter{Advanced Simplification, Recursion and Induction}
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     2
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     3
Although we have already learned a lot about simplification, recursion and
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     4
induction, there are some advanced proof techniques that we have not covered
10885
90695f46440b lcp's pass over the book, chapters 1-8
paulson
parents: 10654
diff changeset
     5
yet and which are worth learning. The three sections of this chapter are almost
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     6
independent of each other and can be read in any order. Only the notion of
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     7
\emph{congruence rules}, introduced in the section on simplification, is
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     8
required for parts of the section on recursion.
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     9
9993
c0f7fb6e538e *** empty log message ***
nipkow
parents: 9958
diff changeset
    10
\input{Advanced/document/simp.tex}
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    11
11216
279004936bb0 *** empty log message ***
nipkow
parents: 11196
diff changeset
    12
\section{Advanced Forms of Recursion}
11428
332347b9b942 tidying the index
paulson
parents: 11216
diff changeset
    13
\index{recdef@\isacommand {recdef} (command)|(}
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10178
diff changeset
    14
11494
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    15
This section introduces advanced forms of
11196
bb4ede27fcb7 *** empty log message ***
nipkow
parents: 10885
diff changeset
    16
\isacommand{recdef}: how to establish termination by means other than measure
11494
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    17
functions, how to define recursive functions over nested recursive datatypes
10654
458068404143 *** empty log message ***
nipkow
parents: 10522
diff changeset
    18
and how to deal with partial functions.
10187
0376cccd9118 *** empty log message ***
nipkow
parents: 10186
diff changeset
    19
10189
865918597b63 *** empty log message ***
nipkow
parents: 10187
diff changeset
    20
If, after reading this section, you feel that the definition of recursive
10885
90695f46440b lcp's pass over the book, chapters 1-8
paulson
parents: 10654
diff changeset
    21
functions is overly complicated by the requirement of
11494
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    22
totality, you should ponder the alternatives.  In a logic of partial functions,
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    23
recursive definitions are always accepted.  But there are many
10189
865918597b63 *** empty log message ***
nipkow
parents: 10187
diff changeset
    24
such logics, and no clear winner has emerged. And in all of these logics you
865918597b63 *** empty log message ***
nipkow
parents: 10187
diff changeset
    25
are (more or less frequently) required to reason about the definedness of
10885
90695f46440b lcp's pass over the book, chapters 1-8
paulson
parents: 10654
diff changeset
    26
terms explicitly. Thus one shifts definedness arguments from definition time to
10189
865918597b63 *** empty log message ***
nipkow
parents: 10187
diff changeset
    27
proof time. In HOL you may have to work hard to define a function, but proofs
865918597b63 *** empty log message ***
nipkow
parents: 10187
diff changeset
    28
can then proceed unencumbered by worries about undefinedness.
865918597b63 *** empty log message ***
nipkow
parents: 10187
diff changeset
    29
11216
279004936bb0 *** empty log message ***
nipkow
parents: 11196
diff changeset
    30
\subsection{Beyond Measure}
11196
bb4ede27fcb7 *** empty log message ***
nipkow
parents: 10885
diff changeset
    31
\label{sec:beyond-measure}
bb4ede27fcb7 *** empty log message ***
nipkow
parents: 10885
diff changeset
    32
\input{Advanced/document/WFrec.tex}
bb4ede27fcb7 *** empty log message ***
nipkow
parents: 10885
diff changeset
    33
11216
279004936bb0 *** empty log message ***
nipkow
parents: 11196
diff changeset
    34
\subsection{Recursion Over Nested Datatypes}
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10178
diff changeset
    35
\label{sec:nested-recdef}
9993
c0f7fb6e538e *** empty log message ***
nipkow
parents: 9958
diff changeset
    36
\input{Recdef/document/Nested0.tex}
c0f7fb6e538e *** empty log message ***
nipkow
parents: 9958
diff changeset
    37
\input{Recdef/document/Nested1.tex}
c0f7fb6e538e *** empty log message ***
nipkow
parents: 9958
diff changeset
    38
\input{Recdef/document/Nested2.tex}
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    39
11216
279004936bb0 *** empty log message ***
nipkow
parents: 11196
diff changeset
    40
\subsection{Partial Functions}
11494
23a118849801 revisions and indexing
paulson
parents: 11428
diff changeset
    41
\index{functions!partial}
10654
458068404143 *** empty log message ***
nipkow
parents: 10522
diff changeset
    42
\input{Advanced/document/Partial.tex}
458068404143 *** empty log message ***
nipkow
parents: 10522
diff changeset
    43
11428
332347b9b942 tidying the index
paulson
parents: 11216
diff changeset
    44
\index{recdef@\isacommand {recdef} (command)|)}
10654
458068404143 *** empty log message ***
nipkow
parents: 10522
diff changeset
    45
11216
279004936bb0 *** empty log message ***
nipkow
parents: 11196
diff changeset
    46
\section{Advanced Induction Techniques}
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    47
\label{sec:advanced-ind}
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    48
\index{induction|(}
9993
c0f7fb6e538e *** empty log message ***
nipkow
parents: 9958
diff changeset
    49
\input{Misc/document/AdvancedInd.tex}
10217
e61e7e1eacaf *** empty log message ***
nipkow
parents: 10189
diff changeset
    50
\input{CTL/document/CTLind.tex}
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    51
\index{induction|)}