 
Summary: JÜRGEN GIESL, CHRISTOPH WALTHER, JÜRGEN BRAUBURGER
TERMINATION ANALYSIS FOR FUNCTIONAL PROGRAMS
1. INTRODUCTION
Proving termination is a central problem in software development and for
mal methods for termination analysis are essential for program verification.
However, since the halting problem is undecidable and totality of functions
is not even semidecidable, there is no procedure to prove or disprove the
termination of all algorithms.
While most work on the automation of termination proofs has been done
in the areas of term rewriting systems (for surveys see e.g. (Dershowitz, 1987;
Steinbach, 1995b)) and of logic programs (e.g. (Ullman and van Gelder,
1988; Plümer, 1990; De Schreye and Decorte, 1994)), in this chapter we fo
cus on functional programs and we also investigate the application of our
methods for termination analysis of loops in imperative programs.
To prove termination of a functional algorithm, one has to find a well
founded relation such that the arguments in each recursive call are smaller
than the corresponding inputs. (A relation OE is well founded iff there is no
infinite descending chain : : : OE t 2 OE t 1 .) A semiautomatic method for termi
nation proofs of LISP functions has been implemented in the NQTHM system
of R. S. Boyer and J S. Moore (1979). For an algorithm f (x) their prover
