doc-src/TutorialI/Advanced/advanced.tex
author nipkow
Wed, 08 Nov 2000 14:38:04 +0100
changeset 10420 ef006735bee8
parent 10217 e61e7e1eacaf
child 10522 ed3964d1f1a4
permissions -rw-r--r--
*** empty log message ***
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
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     5
yet and which are worth knowing about if you intend to beome a serious
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     6
(human) theorem prover. The three sections of this chapter are almost
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     7
independent of each other and can be read in any order. Only the notion of
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     8
\emph{congruence rules}, introduced in the section on simplification, is
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
     9
required for parts of the section on recursion.
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    10
9993
c0f7fb6e538e *** empty log message ***
nipkow
parents: 9958
diff changeset
    11
\input{Advanced/document/simp.tex}
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    12
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    13
\section{Advanced forms of recursion}
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    14
\index{*recdef|(}
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10178
diff changeset
    15
10187
0376cccd9118 *** empty log message ***
nipkow
parents: 10186
diff changeset
    16
The purpose of this section is to introduce advanced forms of \isacommand{recdef}. It
0376cccd9118 *** empty log message ***
nipkow
parents: 10186
diff changeset
    17
covers two topics: how to define recursive function over nested recursive datatypes
0376cccd9118 *** empty log message ***
nipkow
parents: 10186
diff changeset
    18
and how to establish termination by means other than measure functions.
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
865918597b63 *** empty log message ***
nipkow
parents: 10187
diff changeset
    21
functions is overly and maybe unnecessarily complicated by the requirement of
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
865918597b63 *** empty log message ***
nipkow
parents: 10187
diff changeset
    26
terms explicitly. Thus one shifts definedness arguments from definition to
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
\index{*recdef|)}
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    36
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10178
diff changeset
    37
\subsection{Beyond measure}
499637e8f2c6 *** empty log message ***
nipkow
parents: 10178
diff changeset
    38
\label{sec:wellfounded}
10187
0376cccd9118 *** empty log message ***
nipkow
parents: 10186
diff changeset
    39
\input{Advanced/document/WFrec.tex}
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10178
diff changeset
    40
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    41
\section{Advanced induction techniques}
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    42
\label{sec:advanced-ind}
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    43
\index{induction|(}
9993
c0f7fb6e538e *** empty log message ***
nipkow
parents: 9958
diff changeset
    44
\input{Misc/document/AdvancedInd.tex}
10217
e61e7e1eacaf *** empty log message ***
nipkow
parents: 10189
diff changeset
    45
\input{CTL/document/CTLind.tex}
9958
67f2920862c7 *** empty log message ***
nipkow
parents:
diff changeset
    46
\index{induction|)}