doc-src/TutorialI/Advanced/advanced.tex
author chaieb
Wed, 19 May 2004 11:23:59 +0200
changeset 14758 af3b71a46a1c
parent 11494 23a118849801
child 25281 8d309beb66d6
permissions -rw-r--r--
A new implementation for presburger arithmetic following the one suggested in technical report Chaieb Amine and Tobias Nipkow. It is generic an smaller. the tactic has also changed and allows the abstaction over fuction occurences whose type is nat or int.
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|)}