doc-src/TutorialI/Advanced/advanced.tex
author paulson
Fri, 12 Jan 2001 16:32:01 +0100
changeset 10885 90695f46440b
parent 10654 458068404143
child 11196 bb4ede27fcb7
permissions -rw-r--r--
lcp's pass over the book, chapters 1-8
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
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    12
\section{Advanced forms of recursion}
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    13
\index{*recdef|(}
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10178
diff changeset
    14
10654
458068404143 *** empty log message ***
nipkow
parents: 10522
diff changeset
    15
The purpose of this section is to introduce advanced forms of
458068404143 *** empty log message ***
nipkow
parents: 10522
diff changeset
    16
\isacommand{recdef}: how to define recursive function over nested recursive
458068404143 *** empty log message ***
nipkow
parents: 10522
diff changeset
    17
datatypes, how to establish termination by means other than measure functions,
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
10189
865918597b63 *** empty log message ***
nipkow
parents: 10187
diff changeset
    22
totality, you should ponder the alternative, a logic of partial functions,
865918597b63 *** empty log message ***
nipkow
parents: 10187
diff changeset
    23
where recursive definitions are always wellformed. For a start, there are many
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
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10178
diff changeset
    30
\subsection{Recursion over nested datatypes}
499637e8f2c6 *** empty log message ***
nipkow
parents: 10178
diff changeset
    31
\label{sec:nested-recdef}
9993
c0f7fb6e538e *** empty log message ***
nipkow
parents: 9958
diff changeset
    32
\input{Recdef/document/Nested0.tex}
c0f7fb6e538e *** empty log message ***
nipkow
parents: 9958
diff changeset
    33
\input{Recdef/document/Nested1.tex}
c0f7fb6e538e *** empty log message ***
nipkow
parents: 9958
diff changeset
    34
\input{Recdef/document/Nested2.tex}
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    35
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10178
diff changeset
    36
\subsection{Beyond measure}
10522
ed3964d1f1a4 *** empty log message ***
nipkow
parents: 10420
diff changeset
    37
\label{sec:beyond-measure}
10187
0376cccd9118 *** empty log message ***
nipkow
parents: 10186
diff changeset
    38
\input{Advanced/document/WFrec.tex}
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10178
diff changeset
    39
10654
458068404143 *** empty log message ***
nipkow
parents: 10522
diff changeset
    40
\subsection{Partial functions}
458068404143 *** empty log message ***
nipkow
parents: 10522
diff changeset
    41
\index{partial function}
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
458068404143 *** empty log message ***
nipkow
parents: 10522
diff changeset
    44
\index{*recdef|)}
458068404143 *** empty log message ***
nipkow
parents: 10522
diff changeset
    45
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    46
\section{Advanced induction techniques}
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|)}