TEA: Automatically Proving Termination of Programs in a Non-strict Higher-Order Functional Language

Abstract

reduction e e0 if e!# e0 Approximation C[e] C[Ti] j e Ti is a new variable. Argument saturation e e Ti where Ti is a new variable. If e is a HNF where the head is a supercombinator Branching C[caseA T1 e1 : : : em] fT1 7! (cA;1 T1;1 : : : T1;n1)gC[e1 T1;1 : : : T1;n1 ] j : : : j fT1 7! (cA;m Tm;1 : : : Tm;nm)gC[em Tm;1 : : : Tm;nm ] Where Ti;j are new variables, m is the number of constructors of type A cA;j are the constructors of the type A, nj is the arity of cA;j and the case-expression is a normal order redex. The substitution fT1 7! (cA;j Tj;1 : : : Tj;nj )g is also called split-substitution. Fig. 1. Expansion rules for termination-tableaux. { If e at a leaf is dynamically ill-typed, then label the leaf as \closed". { If for e at a leaf Pnft(e) holds, then label the leaf as \closed". { If the expression tL at the leaf L is of the form C[e1; : : : en], where C[: : :] does not contain abstract variables, Pnft(ei) holds for i = 1; : : : ; n, and there is an ancestor node N labelled C[T1; : : : Tn], such that Ti Tj ) ei ej , then label L with the pair (\closed"; N). A termination tableau in which every leaf is labelled \closed", is called preclosed. The subsuming ancestor nodes are also called recursion ancestor nodes. Note that di erent leaves may have the same recursion ancestor node. De nition 12. A termination ordering is a Noetherian partial order > on ( NF )n for some n, which is invariant w.r.t. reduction, i.e., If s ! s0; t ! t0, then s > t is equivalent to s0 > t0, De nition 13. Let (s1; : : : ; sn) and (t1; : : : ; tn) be n-tuples of #-expressions and let R be a relation name. Then (s1; : : : ; sn) R (t1; : : : ; tn) is an ordering constraint. A set S of ordering constraints can be partitioned into the sets SR for all the relation names R occurring in S. The set SR consists of all ordering constraints in S with the same relation name R. A component SR is satis able, if there is a termination ordering >R on ( NF )n, where n is the arity of the tuples in SR such that for all concretization maps and for all ordering constraints (s1; : : : ; sn) R (t1; : : : ; tn): WT ( (s1; : : : ; sn)) and WT ( (t1; : : : ; tn)) imply (s1; : : : ; sn) >R (t1; : : : ; tn). A set S of ordering constraints is satis able, i for every relation name R, the sets SR of ordering constraints are satis able. The ordering constraints are also called termination hypotheses in the work on termination of strict functional languages. Let T be a preclosed termination tableau. Let L be a leaf with ancestor node N , let the terms be TL C[t1; : : : ; tn] and TN C[T1; : : : ; Tn] and let be the composition of the split-substitutions on the path from N to L. Then the corresponding ordering constraint is: (T1; : : : ; Tn) >N (t1; : : : ; tn). The set of all ordering constraints of T is OC(T ). De nition 14. Let T be a preclosed termination tableau, such that for every path from a recursion ancestor node to one of its subsumed leaves, there is no further recursion ancestor node on the path. If moreover for every recursive ancestor node the same context is used for subsuming all corresponding leaves, then we say the preclosed termination tableau is without crossings. De nition 15. A termination tableau T is called closed, if it is preclosed, without crossings and OC(T ) is satis able. 3.2 Correctness of Termination Tableaux In this subsection we argue that the method for proving termination is correct. I.e., if a closed tableau can be constructed for an abstract term at the root node, then this term represents only nf-terminating terms. Lemma16. Let e be a non-leaf node in a termination tableau. Let be any concretization map such that WT ( (e)) and (e) is not nf-terminating. Then there is a direct son e0 of e, such that one of the following holds: { The expansion rule is \Abstract reduction", WT ( (e0)) and (e0) is not nfterminating. { The expansion rule is \Approximation" or \Argument saturation" and there is a concretization map 0 with 0(T ) = (T ) for all variables T 2 AV (e), WT ( 0(e0)) and 0(e0) is not nf-terminating. { The expansion rule is \Branching", the substitution on the path from e to e0 is , and there is a concretization map 0 with 0( (Ti)) = (Ti) for all variables Ti 2 AV (e), WT ( 0(e0)) and 0(e0) is not nf-terminating. Proof. By inspecting the rules and using that WT is admissible. Lemma17. Let e be a non-leaf node in a termination tableau, let be any concretization map such that WT ( (e)) and (e) is not nf-terminating. Then there is a descendant leaf e0, where is the substitution on the path from e to e0, a concretization map , such that ( (T )) = (T ) for all T 2 AV (e) and such that WT ( (e0)) and (e0) is not nf-terminating Proof. This follows from Lemma 16 by induction on the length of the path. Theorem18. Let T be a closed termination tableau with root t0. Then t0 is nf-terminating. Proof. Let there be xed termination orderings >N on the tupels over NF for every recursion ancestor node N , which satisfy the ordering constraints for the closed tableau. Assume that there is a concretization map 0, such that WT ( 0(t0)) and 0(t0) is not nf-terminating. Then Lemma 17 shows that there is some leaf with a well-typed but not nf-terminating concretization. This leaf must have a recursion ancestor node. Select a leaf L with term C[t1; : : : ; tn] and recursion ancestor N , and a concretization map such that WT ( (C[t1; : : : ; tn])), (C[t1; : : : ; tn]) is not nf-terminating, and the following holds: { The distance (measured in number of edges) of the root to the ancestor node corresponding to the leaf L is maximal. { (t1; : : : ; tn) is minimal w.r.t >N . The concretization (C[t1; : : : ; tn]) is also a concretization of the term (C[T1; : : : ; Tn]), i.e., there is a concretization map , such that (C[t1; : : : ; tn]) = (C[T1; : : : ; Tn]), since all ti are nf-terminating and WT ( (ti)). Lemma 17 shows that there is a leaf L0 that is a descendant of N , and which has a non-nf-terminating instance. Since T is without crossings and due to our minimal choice, N is also a recursion ancestor for L0 with the same context. Hence the term at L0 is C[t01; : : : ; t0n], there is a concretization map , such that ( (Ti)) = (Ti) for all Ti 2 AV (tN ), and (C[t01; : : : ; t0n]) is well-typed and not nf-terminating. The ordering constraints are satis ed, which means (T1; : : : ; Tn) >N (t01; : : : t0n). This implies ( (T1; : : : ; Tn)) >N (t1; : : : tn), and hence (T1; : : : ; Tn)) >N (t01; : : : t0n). We obtain (t1; : : : ; tn) = (T1; : : : ; Tn) >N (t01; : : : t0n). This is a contradiction to the minimal choice of L and . The nal contradiction shows that the expression t0 at the root is nf-terminating. Since the problem of proving nf-termination is undecidable, (it is in fact nonr.e.), there are cases, where the construction of a preclosed termination tableau for an nf-terminating expression does not succeed. The construction is then nonterminating, since either there are paths without recursion ancestor, or there are recursion ancestors, but with crossings. The restriction to preclosed trableaux without crossings is necessary. For a counterexample see [Pan97]. To illustrate the calculus we will give a simple example: Example 1. We want to prove that the result of applying the length function to a nite list is a de ned number, even if there are unde ned elements in the list: bot = bot mkbot x = bot fin = map mkbot T map f xs = case xs Nil (map2 f) map2 f x xs = Cons (f x) (map f xs) length xs = case xs 0 length2 length2 length2 x xs = 1 + length xs A preclosed tableau for the application of length to nite lists is given in gure 2. The tableau makes use of the fact that the built-in function + nf-terminates. 0 length n Ta 7! (Cons Ta1 Ta2 ) 1 case Nil 0 length2 case (map mkbot Ta) 0 length2 case (case Ta Nil (map2 mkbot)) 0 length2 Ta 7! Nil case (map2 mkbot Ta1 Ta2 ) 0 length2 case (Cons (mkbot Ta1 ) (map mkbot Ta2 )) 0 length2 length2 (mkbot Ta1 ) (map mkbot Ta2 ) 1 + (length (map mkbot Ta2 )) T1 T+ Tlm length (map mkbot Ta2 ) case (map mkbot Ta2 ) 0 length2 Fig. 2. A preclosed tableau for the application of length to nite lists. 4 Termination orderings on We will interpret constructors, and hence normal forms, as functions over the nonnegative integers. For non-strict functional languages, interpreting supercombinators as integer functions is too restrictive, since this precludes the use of subexpressions without normal form like in nite lists. An n-ary function p on integers is called nonnegative, i p(a1; : : : ; an) 0 for all nonnegative ai. p is called strictly monotonous, i y > z implies p(x1; : : : ; xi 1; y; xi+1; : : : ; xn) > p(x1; : : : ; xi 1; z; xi+1; : : : ; xn) for all nonnegative integers xi; y; z, and all i. Let be an interpretation of the normal forms, where every constructor c of arity n is interpreted as a nonnegative function that is strictly monotonous for all arguments at positions in Ic;sm and constant for the arguments in position [1; n] n Ic;con. Expressions in HNF that have a supercombinator as head are interpreted as zero. The interpretation can be extended to all well-typed -expressions t having a normal form by (t) := (t+). A termination ordering > is induced on nf-terminating -expressions by de ning s > t i (s) > (t). We describe a proof method which given an interpretation for the normal forms, shows that the ordering constraint s R t is satis ed by > . Though termination tableaux as described in section 3 issue only ordering constraints where the left hand sides consist of a tuple of variables, we permit more general ordering constraints. TEA makes only use of linear polynomial interpretations with small coe cients. Though this de nes only a very restricted class of orderings, Figure 3 shows that this is in practice su cient. In the following due to space limitations we will not explore the syntactic nature of ordering tableaux in detail, but rather introduce the semantical ideas and the correctness proof. 4.1 Verifying ordering constraints We assume a given interpretation of constructors. The top level tupels in ordering constraints are treated like constructed objects with a special constructor. Given an ordering constraint, the veri cation algorithm has the task to check that the ordering constraint is satis ed. In this section, we assume that the abstract variables may be instantiable with arbitrary expressions. We denote the inequations used in the algorithm as plhs1; : : : ; sni prht1; : : : ; tmi, where the nonnegative, strictly monotonous functions pl; pr are assumed to be known, are of arity n and m, respectively, and the expressions si; ti are #-expressions. De nition 19. Let f1; f2; g1; g2 be functions. Let xi; yi be variables, where equal variables are permitted. We say f1(x1; : : : ; xm) f2(y1; : : : ; yn) is valid, if for all replacements of nonnegative integers for the variables the inequation holds. We say f1(x1; : : : ; xm) f2(y1; : : : ; yn) implies g1(x01; : : : ; x0m) g2(y0 1; : : : ; y0 n), i for all replacements of nonnegative integers for the variables: If f1( (x1); : : : ; (xm)) f2( (y1); : : : ; (yn)) holds, then g1( (x01); : : : ; (x0m)) g2( (y0 1); : : : ; (y0 n)) holds. We say f1hs1; : : : ; smi f2ht1; : : : ; tni is valid, if f1(x1; : : : ; xm) f2(y1; : : : ; yn) is valid after replacing the terms si; ti by variables, where equal (di erent) terms have to be replaced with equal (di erent) variables. Similarly, we de ne f1hs1; : : : ; smi f2ht1; : : : ; tni implies g1hs01; : : : ; s0mi g2ht01; : : : ; ty0 ni i f1(x1; : : : ; xm) f2(y1; : : : ; yn) implies g1(x01; : : : ; x0m) g2(y0 1; : : : ; y0 n), where equal (di erent) terms have to be replaced with equal (different) variables. The veri cation method is based on abstract reduction to built up a tree of possible reductions (called an ordering tableau). I.e., a tree which is labelled with inequations, and which is generated by placing the initial inequation at the root, using expansion and closing rules described below. Initially, the veri cation algorithm starts with lhs > rhs, which is easily translated into lhs rhs+ 1. The following simpli cations are performed with high priority: 1. simplify-comb: A leftor right side of the following form is immediately simpli ed: phs1; : : : ; si 1; (c si;1 : : : si;k); si+1; : : : ; sni simpli es to qhs1; : : : ; si 1, si;j1 ; : : : ; si;jh ; si+1; : : : ; sni, where q(x1; : : : ; xi 1,xi;j1 ; : : : ; xi;jh ,xi+1; : : : ; xn) := p(x1; : : : ; xi 1,pc(xi;1; : : : ; xi;k),xi+1; : : : ; xn), and Ic;sm = fj1; : : : ; jhg. 2. simplify-zero: A leftor right side, where si is in HNF but without a constructor as head is immediately simpli ed: phs1; : : : ; si 1,si; si+1; : : : ; sni simpli es to qhs1; : : : ; si 1,si+1; : : : ; sni, where q(x1; : : : ; xi 1; xi+1; : : : ; xn) := p(x1; : : : ; xi 1; 0; xi+1; : : : ; xn). Note that the de ned function q is nonnegative and strictly monotonous. De nition 20. The expansion rules for expanding the ordering tableau are \abstract reduction" and \branching" (cf. termination tableau) applied to ordering constraints, where the rules are to be applied only to normal order redexes. In the following closing rules we assume that there are sound and e ectively computable predicates to recognize \valid" and \implies": { If one of the #-expressions is dynamically ill-typed, then label the leaf as \closed". { If the inequation at the leaf is valid, then label the leaf as \closed". { Let L be a leaf labelled with pL;lhsL;1; : : : ; sL;ni pL;rhtL;1; : : : ; tL;mi. Let there be an ancestor N of L, which is labelled with pN;lhsN;1; : : : ; sN;ni pN;rhtN;1; : : : ; tN;mi, such that the following holds: There exists a subsuming substitution , such that (sN;i) sL;i, and (tN;j) tL;j for i = 1; : : : ; n; j = 1; : : : ;m. The inequation (pN;lhsN;1; : : : ; sN;ni) (pN;rhtN;1; : : : ; tN;mi) implies pL;lhsL;1; : : : ; sL;ni pL;rhtL;1; : : : ; tL;mi. Then label the leaf L by (N; \closed"). Note that the implementation is also able to exploit symmetries of the functions in the subsumption check. De nition 21. An ordering tableau is closed, i every leaf is closed. Now we can show that a closed ordering tableau is a proof that the ordering > satis es a given ordering constraint. Theorem22. Let s > t be an ordering constraint. If a closed ordering tableau for ( z:z)hsi ( z:z+1)hti can be constructed using the rules in De nition 20, then s > t is satis ed by the ordering > . Proof. Assume that the theorem is false. Then there is a closed ordering tableau for ( z:z)hsi ( z:z+1)hti, but s > t is not satis ed by > . There is a ground substitution , such that (s); (t) are nf-terminating ground expressions, and ( (s)) < (rho(t)) + 1. It is easy to see that the expansion rules of the tableau permit to nd a witness of a wrong instance of an inequation at some son, if the father has a wrong instance of its inequation. This is obvious for the reduction, and also for the branching rule, since it is only used for normal order redexes, and it is assumed that witnesses are well-typed. Hence there is some leaf, such that the inequation has a wrong instance. This leaf must be closed by the subsumption rule. Among the leaves with non-valid inequations select a leaf and a corresponding instance which is minimal w.r.t. the minimal number of normal order reductions to compute its -value. This number is de ned, since we assumed that the instance is nf-terminating at the root, which is inherited to the corresponding leaf. This leaf has a subsuming ancestor N , which is labelled by a wrong inequation, and which requires the same number of normal order reductions to normal form. We reduce again until a further leaf L0 with a wrong instance is found. Since at least one normal order step was performed on the path from N to L0, the instance at the new leaf L0 requires a smaller number of normal order reductions for the computation. Hence we have a contradiction to the minimal choice. 5 Extensions We describe some extensions and modi cations of the termination analysis. 5.1 Lazy Termination There are sensible functions in a lazy functional language, like repeat, which are not nf-terminating. In order to apply the termination analysis also to these functions, it will turn out that a simple test on a preclosed tableau is a su cient condition that a function is lazy terminating. De nition 23. Every well-typed expression is 0-lazy-terminating. A well-typed expression e is n-lazy-terminating, i either e has a HNF with a supercombinator as head and e is nf-terminating, or e has HNF (c e1 : : : ek), c is a constructor and every ei is (n 1)-lazy-terminating. An expression e is lazy terminating, i for all n, e is n-lazy-terminating. We lift the notion of lazy termination to # via concretization maps in the natural way. It is obvious that nf-termination implies lazy termination. An example for a lazy terminating expression is (repeat 1) with de nition repeat x = x : repeat x. The following simple criterion is su cient for lazy termination: Theorem24. Let e be an expression, and let there be a preclosed termination tableau with root e, such that for every leaf L with subsuming ancestor N , on the path from N to L the only permitted use of the approximation rule is: c e1 : : : en e1 j : : : j en , where c is a constructor, there is at least one such application on the path, and there is no argument saturation on the path. Then e is lazy terminating Proof. Assume that the theorem is false. Then there is some e, a preclosed tableau and a concretization (e) that is not lazy terminating. Similarly as in the proof of Theorem 18 we can nd a leaf that is not lazy terminating. This leaf is closed using using the criterion for a subsuming ancestor, since nf-termination implies lazy termination. We select a leaf L such that there is an instance that is not n-lazy-terminating with minimal n. We follow a witnessing instance: going from L to its subsuming ancestor N , again reducing down to a new leaf L0, we see that L0 has a smaller witnessing instance, which is a contradiction. 5.2 Errors Usually, programs contain error-cases, for example taking the head of a list is not de ned for the empty list, or division by zero is unde ned. The standard behavior in these cases is that the evaluation stops, and an error message is displayed. For semantic purposes, this is often treated as ?, which is also used for nonterminating object. However, from a pragmatic point of view there is a di erence: a programmer does not write non-terminating programs intentionally, whereas error-cases are often useful and sensible. Thus, it makes sense to treat error cases as terminating cases, since a program terminates by displaying something. The implementation of TEA usually treats errors as termination and thus it marks the built-in division and missing cases in a case-expression as nf-terminating exits. 5.3 Strict evaluation Theorem 18 as it stands is not applicable for a functional language with strict evaluation. However, the construction of termination tableaux can be modi ed, such that also strict (nf-)termination can be proved. The only necessary modi cation is to restrict all reductions to applicative order reductions, in the expansion of the termination tableau as well as for the ordering tableau. Since the behavior of normal order and applicative order reduction are di erent, the heuristics and strategies have to be di erent: The rule for approximation has to be preferred in several cases in order to make redexes top level terms in the tableau. 6 Implementation and Experiments TEA is a Haskell-implementation of the termination analysis as described in this paper [Kic97, Pan97]. Optimizations and special rules for treating nested recursive functions are included. Abstract reduction is implemented by a template instantiation machine. The strategy for automatic analysis is as follows. First<lb>there is a dependency analysis that determines the sequence of analyzing the<lb>functions. Then there are two passes of the script in the determined sequence,<lb>where successively for every function there is an attempt to construct a closed<lb>termination tableaux. The obtained termination information is used eagerly in<lb>the rst pass, where the strategy for the application of the approximation is ap-<lb>proximate only nf-terminating expressions, such that no branching is necessary.<lb>The second pass avoids this eager use of nf-termination knowledge. The gener-<lb>ated ordering constraints are then handed over to the ordering tableau-module<lb>that tries to construct and verify an ordering based on a linear polynomial in-<lb>terpretation for normal forms. If for a function the detection of nf-termination<lb>fails, but there is a preclosed tableau, then the criterion for lazy termination is<lb>checked. If a function is neither nf-terminating nor lazy terminating, but there is<lb>a preclosed termination tableau, then the program is able to give hints where a<lb>possible non-termination may occur by displaying the ordering constraints and<lb>the corresponding path.<lb>The implementation incorporates strict built-in functions on integers in the core<lb>language and makes use of their termination behavior (see example 2).<lb>To guarantee termination of tableau expansion, there is a maximal possible<lb>length of paths in the termination tableau, a practical value being around 40.<lb>A restriction for the ordering is that the polynomials are linear, the coe cients<lb>may be 0,1, or 2, and there is also a depth bound. Since the rules are non-<lb>deterministic, heuristics are used to optimize the probability of constructing a<lb>preclosed tableau.<lb>We tested the implementation on three program scripts. The example t10.core<lb>is taken from the examples for strictness analysis in [Sch94]. It is generated from<lb>a script containing almost all the function of the Gofer [Jon94] prelude plus<lb>some other functions, the example Rewrite.core is one of the modules written<lb>for manipulating and reducing expressions for constructing an ordering tableau,<lb>and Misc.core is a set of standard functions on lists and trees, like di erent<lb>sorting algorithms, a combinator parser, functions generating an in nite lists of<lb>primes, and further functions (see [Pan97]). In the following gure the number of<lb>functions and the obtained results and the time on a HP C160 is recorded. The<lb>last column gives the number of functions where the termination information<lb>could not be detected.<lb>Example<lb># nf-term. nf-term + lazy preclosed min. not detected<lb>t10.core<lb>212 191 (90%) 200 (94.3%) 205 (96.7%) 0:49 14 (6.6%)<lb>Rewrite.core 79 76 (96%) 76 (96%) 78 (98.7%) 7:38 2 (2.5%)<lb>Misc.core<lb>121 95 (78,5%) 101 (83,4%) 110 (90,9%) 3:04 13 (10.7%)<lb>Fig. 3. Results on example les. The results are promising: TEA detects almost all nf-terminating functions in<lb>Rewrite.core.<lb>It is possible to improve the success rate by modifying the strategy. We ana-<lb>lyzed the failure cases in order to learn about possible improvements. Using an<lb>interactive mode it is possible to improve the results slightly, which means that<lb>adding some passes with di erent strategies may help a bit. There are some (nf-<lb>terminating) functions in the prelude which are not detected as nf-terminating.<lb>Their termination behavior depends on the value returned by built-in functions.<lb>This could be remedied, but is omitted in our prototype implementation. An<lb>example for a function that cannot be proved nf-terminating by TEA is the<lb>function tak. However, tak is an arti cial function and it is not easy to prove<lb>its termination.<lb>Our prototype implementation and the results justify the hope that it is pos-<lb>sible to include powerful tools into compilers which are able to detect a large<lb>amount of nf-termination and/or lazy termination in scripts of non-strict func-<lb>tional programs. This information is useful for a programmer as well as for<lb>program optimizations.<lb>Acknowledgment<lb>We would like to thank Marko Sch<lb>utz for his helpful remarks in discussions.<lb>References<lb>[AG97] T. Arts and J. Giesl. Automatically proving termination where simpli ca-<lb>tion orderings fail. In Michel Bidoit & Max Dauchet, editor, Proceedings of<lb>the 7th International Joint Conference on Theory and Practice of Software<lb>Development (TAPSOFT '97), number 1214 in Lecture Notes in Computer<lb>Science, pages 261{272, Lille, France, 1997. Springer{Verlag.<lb>[AH87] S. Abramsky and C. L. Hankin, editors. Abstract Interpretation of Declar-<lb>ative Languages. Ellis Horwood, 1987.<lb>[AH96] P.H. Andersen and C.K. Holst. Termination analysis for o ine partial eval-<lb>uation of a higher order functional language. In Static Analysis, third in-<lb>ternational symposium, volume 1145 of Lecture Notes in Computer Science,<lb>pages 67{82. Springer-Verlag, 1996.<lb>[BM79] R. S. Boyer and J S. Moore. A Computational Logic. Academic Press, 1979.<lb>[Bur91] Geo rey Burn. Lazy Functional Languages: Abstract Interpretation and<lb>Compilation. Pitman, London, 1991.<lb>[CC77] Patrick Cousot and Radhia Cousot. Abstract interpretation: A uni ed lat-<lb>tice model for static analysis of programs by construction or approximation<lb>of xpoints. In Conference Record of the Fourth ACM Symposium on Prin-<lb>ciples of Programming Languages, pages 252{252. ACM Press, 1977.<lb>[Der87] N. Dershowitz. Termination of rewriting. Journal of Symbolic Computation,<lb>3(1):69{116, 1987.<lb>[Gie95a] J. Giesl. Automatisierung von Terminierungsbeweisen f<lb>ur rekursiv de nier-<lb>te Algorithmen. PhD thesis, Technische Hochschule Darmstadt, 1995. [Gie95b] J. Giesl. Termination analysis for functional programs using term orderings.<lb>In Alan Mycroft, editor, Static Analysis Symposium '95, number 984 in<lb>Lecture Notes in Computer Science, pages 154{171. Springer, 1995.<lb>[HAB+96] K. Hammond, L. Augustsson, B. Boutel, W. Burton, J. Fairbairn, J. Fasel,<lb>A. Gordon, M. Guzm<lb>an, J. Hughes, P. Hudak, T. Johnsson, M. Jones,<lb>D. Kieburtz, R. Nikhil, W. Partain, J. Peterson, S. Peyton Jones, and<lb>P Wadler. Report on the programming language Haskell 1.3. Technical<lb>report, Department of Computer Science, University of Glasgow, 1996.<lb>[Jon94] Mark P. Jones. The implementation of the Gofer functional programming<lb>system. Research Report YALEU/DCS/RR-1030, Yale University, Depart-<lb>ment of Computer Science, May 1994.<lb>[Kah95] S. Kahrs. Towards a domain theory for termination proofs. In Proceedings of<lb>the 6th International Conference on Rewriting Techniques and Applications,<lb>volume 914 of Lecture Notes in Computer Science, pages 241{255. Springer-<lb>Verlag, 1995.<lb>[Kic97] Hubert Kick. Terminierungsanalyse f<lb>ur den Sprachkern einer nicht-strikten<lb>funktionalen Programmiersprache unter Verwendung eines Tableaukalk<lb>uls<lb>f<lb>ur abstrakte Reduktion. Master's thesis, Johann Wolfgang Goethe-Univer-<lb>sit<lb>at, Frankfurt, 1997.<lb>[Noc93] Eric Nocker. Strictness analysis using abstract reduction. In Functional<lb>Programming Languages and Computer Architecture, pages 255{265. ACM<lb>Press, 1993.<lb>[Pan97] S. E. Panitz. Generierung statischer Programminformation zur Kompilie-<lb>rung verzogert ausgewerteter funktionaler Programmiersprachen. (Disserta-<lb>tion), Universit<lb>at Frankfurt, 1997. preliminary version, in German.<lb>[Sch94] Marko Sch<lb>utz. Striktheits-Analyse mittels abstrakter Reduktion f<lb>ur den<lb>Sprachkern einer nicht-strikten funktionalen Programmiersprache. Master's<lb>thesis, Johann Wolfgang Goethe-Universitat, Frankfurt, 1994.<lb>[SNN94] Kirsten Lackner Solberg, Hanne Riis Nielson, and Flemming Nielson. Strict-<lb>ness and totality analysis. In Baudouin Le Charlier, editor, Static Analysis,<lb>number 864 in Lecture Notes in Computer Science, pages 408{422. Springer,<lb>1994.<lb>[SSPS95] M. Schmidt-Schau , S.E. Panitz, and M. Sch<lb>utz. Strictness analysis by ab-<lb>stract reduction using a tableau calculus. In Alan Mycroft, editor, Static<lb>Analysis Symposium '95, number 983 in Lecture Notes in Computer Science,<lb>pages 348{365. Springer, 1995.<lb>[Ste95] J. Steinbach. Automatic termination proofs with transformation orderings.<lb>In Proceedings of the 6th International Conference on Rewriting Techniques<lb>and Applications, volume 914 of Lecture Notes in Computer Science, pages<lb>11{25. Springer-Verlag, 1995.<lb>[Wal91] Chr. Walther. Automatisierung von Terminierungsbeweisen. K<lb>unstliche In-<lb>telligenz. Vieweg, Braunschweig, 1991.<lb>[Wal94] Chr. Walther. On proving the termination of algorithms by machine. Arti-<lb>cial Intelligence, 71:101{157, 1994.<lb>This article was processed using the<lb>LATEX macro package with LLNCS style

DOI: 10.1007/BFb0032752

Extracted Key Phrases

Cite this paper

@inproceedings{Panitz1997TEAAP, title={TEA: Automatically Proving Termination of Programs in a Non-strict Higher-Order Functional Language}, author={Sven Eric Panitz and Manfred Schmidt-Schau\ss}, booktitle={SAS}, year={1997} }