Skip to main content
Log in

Analyzing Program Termination and Complexity Automatically with AProVE

  • Published:
Journal of Automated Reasoning Aims and scope Submit manuscript

Abstract

In this system description, we present the tool AProVE for automatic termination and complexity proofs of Java, C, Haskell, Prolog, and rewrite systems. In addition to classical term rewrite systems (TRSs), AProVE also supports rewrite systems containing built-in integers (int-TRSs). To analyze programs in high-level languages, AProVE automatically converts them to (int-)TRSs. Then, a wide range of techniques is employed to prove termination and to infer complexity bounds for the resulting rewrite systems. The generated proofs can be exported to check their correctness using automatic certifiers. To use AProVE in software construction, we present a corresponding plug-in for the popular Eclipse software development environment.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Institutional subscriptions

Similar content being viewed by others

Notes

  1. In our earlier papers, this was often called a termination graph.

  2. While termination can be analyzed for Java, C, Haskell, Prolog, TRSs, and int-TRSs, the current version of AProVE analyzes complexity only for Prolog and TRSs. In addition, complexity of integer transition systems (a restriction of int-TRSs) is analyzed by calling the tools KoAT and LoAT.

  3. An initial “ExampleProject ” with several examples in different programming languages can be created by clicking on the “AProVE ” entry in Eclipse’s menu bar.

  4. In (C), TRSs are listed as “QDP” (dependency pair problems [37]) and int-TRSs are shown as “IRSwT” (“Integer Rewrite Systems with Terms”).

  5. See http://www.termination-portal.org/wiki/Java_Bytecode for the conventions of the Termination Competition, which also contain a detailed discussion of the limitations imposed on analyzed Java programs.

  6. Here, LLVM stands for the intermediate representation of the LLVM compilation framework [46]. To analyze C programs, they are first compiled to LLVM and analyzed afterwards. This is similar to our approach for Java where we consider Java Bytecode instead of Java source code.

  7. In the Proof Tree View, we do not only have complexity icons like

    figure j

    or

    figure k

    for problems, but proof steps also result in complexities (e.g.,

    figure l

    or

    figure m

    ). More precisely, in each proof step, a problem P is transformed into a new problem \(P'\) and a complexity c from the rewrite rule(s) whose contribution to P’s complexity is accounted for in this step. Then the complexity of P is bounded by the maximum (asymptotically equivalent to the sum) of \(P'\)’s complexity and c.

  8. So our int-TRSs extend int -based TRSs from [27] by constructors and restrict integer TRSs (ITRSs) from [33] by not allowing nested defined symbols.

  9. The nesting level of a variable x in a term \(t = f(t_1, \ldots , t_n)\) is \(\mathsf {nl}(t, x) = 1 + \max \{ \mathsf {nl}(t_i, x) \mid 1 \le i \le n, x \in {{\mathrm{\mathcal {V}}}}_{\mathcal {T\!A}}(t_i) \}\) if \(x \in {{\mathrm{\mathcal {V}}}}_{\mathcal {T\!A}}(t)\), where \(\mathsf {nl}(x,x) = 0\), and \(\mathsf {nl}(t, x) = \infty \) if \(x \notin {{\mathrm{\mathcal {V}}}}_{\mathcal {T\!A}}(t)\).

  10. The results for the C benchmarks are similar.

  11. So this concept of polynomial interpretations encompasses both polynomial ranking functions for defined function symbols and size measures/norms/abstractions for constructors of data structures.

  12. See http://cl-informatik.uibk.ac.at/software/cpf/.

References

  1. Albert, E., Arenas, P., Genaim, S., Puebla, G., Zanardini, D.: Removing useless variables in cost analysis of Java Bytecode. In: SAC ’08, pp. 368–375 (2008)

  2. Alias, C., Darte, A., Feautrier, P., Gonnord, L.: Multi-dimensional rankings, program termination, and complexity bounds of flowchart programs. In: SAS ’10, pp. 117–133 (2010)

  3. Alpuente, M., Escobar, S., Lucas, S.: Removing redundant arguments automatically. TPLP 7(1–2), 3–35 (2007)

    MathSciNet  MATH  Google Scholar 

  4. AProVE. http://aprove.informatik.rwth-aachen.de/

  5. Barrett, C., Fontaine, P., Tinelli, C.: The SMT-LIB standard: Version 2.5. Technical report, The University of Iowa. http://smt-lib.org/ (2015)

  6. Bertot, Y., Castéran, P.: Coq’Art. Springer, Berlin (2004)

    MATH  Google Scholar 

  7. Blanqui, F., Koprowski, A.: CoLoR: A Coq library on well-founded rewrite relations and its application to the automated verification of termination certificates. Math. Struct. Comput. Sci. 4, 827–859 (2011)

    Article  MathSciNet  MATH  Google Scholar 

  8. Bradley, A.R., Manna, Z., Sipma, H.B.: Linear ranking with reachability. In: CAV ’05, pp. 491–504 (2005)

  9. Bray, T.: The JavaScript object notation (JSON) data interchange format. (2014). RFC 7159

  10. Brockschmidt, M., Otto, C., Giesl, J.: Modular termination proofs of recursive Java Bytecode programs by term rewriting. In: RTA ’11, pp. 155–170 (2011)

  11. Brockschmidt, M., Ströder, T., Otto, C., Giesl, J.: Automated detection of non-termination and NullPointerExceptions for Java Bytecode. In: FoVeOOS ’11, pp. 123–141 (2012)

  12. Brockschmidt, M., Musiol, R., Otto, C., Giesl, J.: Automated termination proofs for Java programs with cyclic data. In: CAV ’12, pp. 105–122 (2012)

  13. Brockschmidt, M., Cook, B., Fuhs, C.: Better termination proving through cooperation. In: CAV ’13, pp. 413–429 (2013)

  14. Brockschmidt, M., Emmes, F., Falke, S., Fuhs, C., Giesl, J.: Analyzing runtime and size complexity of integer programs. ACM TOPLAS 38(4), 13:1–13:50 (2016)

    Article  Google Scholar 

  15. Christ, J., Hoenicke, J., Nutz, A.: SMTInterpol: an interpolating SMT solver. In: SPIN ’12, pp. 248–254 (2012)

  16. Codish, M., Fekete, Y., Fuhs, C., Giesl, J., Waldmann, J.: Exotic semiring constraints (extended abstract). In: SMT ’12, pp. 87–96 (2012)

  17. Codish, M., Giesl, J., Schneider-Kamp, P., Thiemann, R.: SAT solving for termination proofs with recursive path orders and dependency pairs. JAR 49(1), 53–93 (2012)

    Article  MathSciNet  MATH  Google Scholar 

  18. Contejean, E., Courtieu, P., Forest, J., Pons, O., Urbain, X.: Automated certified proofs with CiME3. In: RTA ’11, pp. 21–30 (2011)

  19. Cook, B., See, A., Zuleger, F.: Ramsey vs. lexicographic termination proving. In: TACAS ’13, pp. 47–61 (2013)

  20. Cousot, P., Cousot, R.: Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints. In: POPL ’77, pp. 238–252 (1977)

  21. de Moura, L.M., Bjørner, N.: Z3: an efficient SMT solver. In: TACAS ’08, pp. 337–340 (2008)

  22. Dutertre, B., de Moura, L.M.: The Yices SMT solver. Tool paper at http://yices.csl.sri.com/tool-paper (2006)

  23. Eclipse. http://www.eclipse.org/

  24. Eén, N., Sörensson, N.: An extensible SAT-solver. In: SAT ’03, pp. 502–518 (2004)

  25. Emmes, F., Enger, T., Giesl, J.: Proving non-looping non-termination automatically. In: IJCAR ’12, pp. 225–240 (2012)

  26. Endrullis, J., Waldmann, J., Zantema, H.: Matrix interpretations for proving termination of term rewriting. JAR 40(2–3), 195–220 (2008)

    Article  MathSciNet  MATH  Google Scholar 

  27. Falke, S., Kapur, D., Sinz, C.: Termination analysis of C programs using compiler intermediate languages. In: RTA ’11, pp. 41–50 (2011)

  28. Frohn, F., Giesl, J., Hensel, J., Aschermann, C., Ströder, T.: Inferring lower bounds for runtime complexity. In: RTA ’15, pp. 334–349 (2015)

  29. Frohn, F., Naaf, M., Hensel, J., Brockschmidt, M., Giesl, J.: Lower runtime bounds for integer programs. In: IJCAR ’16, pp. 550–567 (2016)

  30. Fuhs, C., Giesl, J., Middeldorp, A., Schneider-Kamp, P., Thiemann, R.,Zankl, H.: SAT solving for termination analysis with polynomial interpretations. In: SAT ’07, pp. 340–354 (2007)

  31. Fuhs, C., Giesl, J., Middeldorp, A., Schneider-Kamp, P., Thiemann, R., Zankl, H.: Maximal termination. In: RTA ’08, pp. 110–125 (2008)

  32. Fuhs, C., Navarro-Marset, R., Otto, C., Giesl, J., Lucas, S., Schneider-Kamp, P.: Search techniques for rational polynomial orders. In: AISC ’08, pp. 109–124 (2008)

  33. Fuhs, C., Giesl, J., Plücker, M., Schneider-Kamp, P., Falke, S.: Proving termination of integer term rewriting. In: RTA ’09, pp. 32–47 (2009)

  34. Fuhs, C., Giesl, J., Parting, M., Schneider-Kamp, P., Swiderski, S.: Proving termination by dependency pairs and inductive theorem proving. JAR 47(2), 133–160 (2011)

    Article  MathSciNet  MATH  Google Scholar 

  35. Giesl, J., Thiemann, R., Schneider-Kamp, P., Falke, S.: Automated termination proofs with AProVE. In: RTA ’04, pp. 210–220 (2004)

  36. Giesl, J., Thiemann, R., Schneider-Kamp, P.: Proving and disproving termination of higher-order functions. In: FroCoS ’05, pp. 216–231 (2005)

  37. Giesl, J., Thiemann, R., Schneider-Kamp, P., Falke, S.: Mechanizing and improving dependency pairs. JAR 37(3), 155–203 (2006)

    Article  MathSciNet  MATH  Google Scholar 

  38. Giesl, J., Schneider-Kamp, P., Thiemann, R.: AProVE 1.2: automatic termination proofs in the dependency pair framework. In: IJCAR ’06, pp. 281–286 (2006)

  39. Giesl, J., Thiemann, R., Swiderski, S., Schneider-Kamp, P.: Proving termination by bounded increase. In: CADE ’07, pp. 443–459 (2007)

  40. Giesl, J., Raffelsieper, M., Schneider-Kamp, P., Swiderski, S., Thiemann, R.: Automated termination proofs for Haskell by term rewriting. ACM TOPLAS 33(2), 7:1–7:39 (2011)

    Article  Google Scholar 

  41. Giesl, J., Ströder, T., Schneider-Kamp, P., Emmes, F., Fuhs, C.: Symbolic evaluation graphs and term rewriting—a general methodology for analyzing logic programs. In: PPDP ’12, pp. 1–12 (2012)

  42. Giesl, J., Brockschmidt, M., Emmes, F., Frohn, F., Fuhs, C., Otto, C., Plücker, M., Schneider-Kamp, P., Ströder, T., Swiderski, S., Thiemann, R.: Proving termination of programs automatically with AProVE. In: IJCAR ’14, pp. 184–191 (2014)

  43. Hensel, J., Giesl, J., Frohn, F., Ströder, T.: Proving termination of programs with bitvector arithmetic by symbolic execution. In SEFM ’16, pp. 234–252 (2016)

  44. Koprowski, A., Waldmann, J.: Max/plus tree automata for termination of term rewriting. Acta Cybern. 19(2), 357–392 (2009)

    MathSciNet  MATH  Google Scholar 

  45. Lankford, D.: On proving term rewriting systems are Noetherian. Technical Report Memo MTP-3, Louisiana Technical University (1979)

  46. Lattner, C., Adve, V.: LLVM: a compilation framework for lifelong program analysis & transformation. In: CGO ’04, pp. 75–88 (2004)

  47. Le Berre, D., Parrain, A.: The SAT4J library, release 2.2. JSAT 7, 59–64 (2010)

    Google Scholar 

  48. McMillan, K.: Lazy abstraction with interpolants. In: CAV ’06, pp. 123–136 (2006)

  49. Nguyen, M.T., De Schreye, D., Giesl, J., Schneider-Kamp, P.: Polytool: polynomial interpretations as a basis for termination analysis of logic programs. TPLP 11(1), 33–63 (2011)

    MathSciNet  MATH  Google Scholar 

  50. Nipkow, T., Paulson, L.C., Wenzel, M.: Isabelle/HOL—A Proof Assistant for Higher-Order Logic. Springer, Berlin (2002)

    MATH  Google Scholar 

  51. Noschinski, L., Emmes, F., Giesl, J.: Analyzing innermost runtime complexity of term rewriting by dependency pairs. JAR 51(1), 27–56 (2013)

    Article  MathSciNet  MATH  Google Scholar 

  52. Otto, C., Brockschmidt, M., von Essen, C., Giesl, J.: Automated termination analysis of Java Bytecode by term rewriting. In RTA ’10, pp. 259–276 (2010)

  53. Podelski, A., Rybalchenko, A.: A complete method for the synthesis of linear ranking functions. In: VMCAI ’04, pp. 239–251 (2004)

  54. SMT-COMP. http://www.smt-comp.org/

  55. Spoto, F., Lunjin, L., Mesnard, F.: Using CLP simplifications to improve Java Bytecode termination analysis. ENTCS 253(5), 129–144 (2009)

    Google Scholar 

  56. Spoto, F., Mesnard, F., Payet, É.: A termination analyser for Java Bytecode based on path-length. ACM TOPLAS 32(3), 8:1–8:70 (2010)

    Article  Google Scholar 

  57. Ströder, T., Schneider-Kamp, P., Giesl, J.: Dependency triples for improving termination analysis of logic programs with cut. In: LOPSTR ’10, pp. 184–199 (2011)

  58. Ströder, T., Giesl, J., Brockschmidt, M., Frohn, F., Fuhs, C., Hensel, J., Schneider-Kamp, P.: Proving termination and memory safety for programs with pointer arithmetic. In: IJCAR ’14, pp. 208–223 (2014)

  59. Ströder, T., Aschermann, C., Frohn, F., Hensel, J., Giesl, J.: AProVE: termination and memory safety of C programs (competition contribution). In: TACAS ’15, pp. 417–419 (2015)

  60. SV-COMP. http://sv-comp.sosy-lab.org/

  61. Tamura, N., Taga, A., Kitagawa, S., Banbara, M.: Compiling finite linear CSP into SAT. Constraints 14(2), 254–272 (2009)

    Article  MathSciNet  MATH  Google Scholar 

  62. Termination Comp. http://termination-portal.org/wiki/Termination_Competition

  63. Thiemann, R., Sternagel, C.: Certification of termination proofs using CeTA. In: TPHOLs ’09, pp. 452–468 (2009)

  64. Zankl, H., Hirokawa, N., Middeldorp, A.: KBO orientability. JAR 43(2), 173–201 (2009)

    Article  MathSciNet  MATH  Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Jürgen Giesl.

Additional information

Supported by the Deutsche Forschungsgemeinschaft (DFG) Grant GI 274/6-1, the Air Force Research Laboratory (AFRL), the Austrian Science Fund (FWF) Project Y757, and the Danish Council for Independent Research, Natural Sciences. Most of the research was done while the authors were at RWTH Aachen.

Appendix: Proofs

Appendix: Proofs

To define the removal of arguments formally, we use a suitable argument filter.

Definition 13

(Argument Filter [37]) An argument filter \(\pi \) for a signature \({\varSigma }\) maps every n-ary function symbol to a (possibly empty) list \([i_1, \ldots , i_k]\) with \(1 \le i_1< \ldots < i_k \le n\). The signature \({\varSigma }_\pi \) consists of all function symbols \(f \in {\varSigma }\), but for \(\pi (f) = [i_1, \ldots , i_k]\), the arity of f in \({\varSigma }_\pi \) is k. Every argument filter \(\pi \) induces a mapping from \({{\mathrm{\mathcal {T}}}}({\varSigma }, {{\mathrm{\mathcal {V}}}})\) to \({{\mathrm{\mathcal {T}}}}({\varSigma }_\pi , {{\mathrm{\mathcal {V}}}})\) as follows.

$$\begin{aligned} \pi (t) = \left\{ \begin{array}{l@{\quad }l} t &{} \text{ if } t \text{ is } \text{ a } \text{ variable }\\ f(\pi (t_{i_1}), \ldots , \pi (t_{i_k})) &{} \text{ if } t=f(t_1, \ldots , t_n) \text{ and } \pi (f) = [i_1, \ldots , i_k]. \end{array}\right. \end{aligned}$$

For every int-TRS \({{\mathrm{\mathcal {R}}}}\), we define \(\pi ({{\mathrm{\mathcal {R}}}}) = \{ \pi (\ell ) \rightarrow \pi (r) \,\llbracket \varphi \rrbracket \mid \ell \rightarrow r \,\llbracket \varphi \rrbracket \in {{\mathrm{\mathcal {R}}}}\}\).

Let N be the set of needed argument positions of Definition 2. Then we define the needless argument filter \(\pi _N\) as \(\pi _N(f) = [\,]\) for \(f \in \mathbb {Z}\) and \(\pi _N(f) = [i_1, \ldots , i_k]\) for any \(f \in {\varSigma }_c \cup {\varSigma }_d\), where \(\{ i_1,\ldots ,i_k \} = \{ i \mid (f,i) \in N \}\) and \(i_j < i_{j + 1}\) for all j.

Theorem 3

(Soundness of Slicing) Let \({{\mathrm{\mathcal {R}}}}\) be an int-TRS and let \({{\mathrm{\mathcal {R}}}}'\) result from filtering away all argument positions that are not needed according to Definition 2, i.e., \({{\mathrm{\mathcal {R}}}}' = \pi _N({{\mathrm{\mathcal {R}}}})\). Then \({{\mathrm{\mathcal {R}}}}\) terminates iff \({{\mathrm{\mathcal {R}}}}'\) terminates.

Proof

In the following, we often write \(s {{\mathrm{\hookrightarrow }}}^\sigma _\rho t\) to denote the rule \(\rho \) and the substitution \(\sigma \) used in the rewrite step.

Soundness: For any argument filter \(\pi \), non-termination of \({{\mathrm{\mathcal {R}}}}\) implies non-termination of \(\pi ({{\mathrm{\mathcal {R}}}})\), since every (root) rewrite step \(s \, {{\mathrm{\hookrightarrow }}}_{\ell \rightarrow r \,\llbracket \varphi \rrbracket } \, t\) implies that we have \(\pi (s) \, {{\mathrm{\hookrightarrow }}}_{\pi (\ell ) \rightarrow \pi (r) \,\llbracket \varphi \rrbracket } \, \pi (t)\).

Completeness: For readability, in the following we write “\(\pi \)” instead of “\(\pi _N\)”.

Let \(\overline{s}_1 \, {{\mathrm{\hookrightarrow }}}_{\pi (\ell _1) \rightarrow \pi (r_1) \,\llbracket \varphi _1 \rrbracket }^{\overline{\sigma }_1} \, \overline{s}_2 \, {{\mathrm{\hookrightarrow }}}_{\pi (\ell _2) \rightarrow \pi (r_2) \,\llbracket \varphi _2 \rrbracket }^{\overline{\sigma }_2} \, \cdots \) be an infinite reduction w.r.t. \(\pi ({{\mathrm{\mathcal {R}}}})\). Our goal is to construct an infinite reduction w.r.t. \({{\mathrm{\mathcal {R}}}}\).

W.l.o.g., we can assume that the left-hand sides \(\ell _i\) of the rules in \({{\mathrm{\mathcal {R}}}}\) only contain function symbols that also occur on right-hand sides of \({{\mathrm{\mathcal {R}}}}\). The reason is that all other rules can be used only a finite number of times at the beginning of a reduction and thus, any infinite reduction has a suffix that satisfies our assumption.

Note that if there are subterms \(f(t_1,\ldots ,t_n)\) and \(f(t_1',\ldots ,t_n')\) on left-hand sides where \((f, i) \notin N\), then there exists a term \(u_i\) such that both \(t_i\) and \(t_i'\) match \(u_i\). The reason is that some right-hand side must contain a subterm \(f(u_1,\ldots ,u_i,\ldots , u_n)\) and by the “matching” condition in Definition 2, \(u_i\) has the desired property. In other words, one can always find a term u which is matched by all ith arguments of f on left-hand sides. We say that such a term u is (f, i)-compatible. A term s has the lhs matching property iff the following holds: if \((f, i) \notin N\), then any f-subterm of s has some (fi)-compatible term on its ith argument. Here, an “f-subterm” is a term with f on its root position.

We now construct a term \(s_1\) with \(\pi (s_1) = \overline{s}_1\) that starts an infinite reduction w.r.t. \({{\mathrm{\mathcal {R}}}}\). To this end, we define a function \( unfilter :{{\mathrm{\mathcal {T}}}}({\varSigma }_\pi , {{\mathrm{\mathcal {V}}}}) \rightarrow {{\mathrm{\mathcal {T}}}}({\varSigma },{{\mathrm{\mathcal {V}}}})\) with \( unfilter (x) = x\) for \(x \in {{\mathrm{\mathcal {V}}}}\) and \( unfilter (f(t_{i_1},\ldots ,t_{i_k})) = f(t_1',\ldots ,t_n')\) if the arity of f in \({\varSigma }\) is n. Here, we have \(t_i' = unfilter (t_i)\) if \(i \in \pi (f)\) and \(t_i'\) is some (fi)-compatible term if \(i \notin \pi (f)\). Then we choose \(s_1 = unfilter (\overline{s}_1)\). By construction, we then have \(\pi (s_1) = \overline{s}_1\) and \(s_1\) has the lhs matching property.

Any matcher \(\overline{\sigma }_1\) for the filtered reduction can now be extended to a matcher for the non-filtered case. So from \(\pi (\ell _1)\overline{\sigma }_1 = \overline{s}_1\), our construction of \(s_1\), and the “non-linearity” condition in Definition 2, we can conclude that there is a substitution \(\sigma _1\) with \(\ell _1\sigma _1 = s_1\) such that \(\pi (\ell _1\sigma _1) = \overline{s}_1 = \pi (\ell _1)\overline{\sigma }_1\). By the condition “constraint” in Definition 2, we can define \(\sigma _1\) to coincide with \(\overline{\sigma }_1\) on all variables from \(\widehat{\varphi }_1\). By the condition “propagation”, \(\sigma _1\) can be extended to \(\varphi _1\)’s remaining variables such that \(\varphi _1\sigma _1 = \varphi _1\overline{\sigma }_1\) is valid, and hence, \(s_1 \, {{\mathrm{\hookrightarrow }}}_{\ell _1 \rightarrow r_1 \llbracket \varphi _1\rrbracket }^{\sigma _1} \, s_2\), where \(s_2 = r_1\sigma _1\). Due to the condition “propagation” in Definition 2, the root symbols of needed subterms in \(s_2= r_1\sigma _1\) coincide with the corresponding ones in \(\overline{s}_2 = \pi (r_1)\overline{\sigma }_1\). Thus, we obtain \(\pi (s_2) = \overline{s}_2\). By construction, \(s_2\) also has the lhs matching property. Hence, by repeating the above construction, one finally obtains an infinite reduction \(s_1 \, {{\mathrm{\hookrightarrow }}}_{\ell _1 \rightarrow r_1 \,\llbracket \varphi _1 \rrbracket }^{\sigma _1} \, s_2 \, {{\mathrm{\hookrightarrow }}}_{\ell _2 \rightarrow r_2 \,\llbracket \varphi _2 \rrbracket }^{\sigma _2} \, \cdots \) \(\square \)

The idea of the chaining simplification is to combine rules by narrowing. Narrowing of a term (or rule) is similar to performing a standard rewrite step. However, whereas in rewriting we apply a rule \(\ell \rightarrow r\) to a term t by finding a matcher \(\sigma \) such that \(\ell \sigma = t\), in narrowing, we search for a unifier \(\mu \) such that \(\ell \mu = t \mu \) holds.

Definition 14

(Narrowing) A term \(t'\) is a narrowing of the term t with the int-rule \(\ell \rightarrow r \,\llbracket \varphi \rrbracket \) using the unifier \(\mu \) (written \(t \rightsquigarrow ^\mu _{\ell \rightarrow r \,\llbracket \varphi \rrbracket } t'\)) if \(\mu \) is the most general unifier of \(\ell \) and t and \(t' = r\mu \). Here we always assume that \(\ell \) and t are variable disjoint (otherwise the variables in the rule are renamed).

Note that our form of narrowing differs from the narrowing of dependency pairs in [37], where narrowing steps take place only below the root position, whereas here we narrow only at the root position.

As mentioned, \({{\mathrm{\mathcal {R}}}}_{\rightarrow f} = \{ \ell \rightarrow r \,\llbracket \varphi \rrbracket \in {{\mathrm{\mathcal {R}}}}\mid {{\mathrm{\mathsf {root}}}}(r) = f \}\) consists of all rules where f is the root symbol of the right-hand side and \({{\mathrm{\mathcal {R}}}}_{f\rightarrow } = \{ \ell \rightarrow r \,\llbracket \varphi \rrbracket \in {{\mathrm{\mathcal {R}}}}\mid {{\mathrm{\mathsf {root}}}}(\ell ) = f \}\) are all rules where f is the root of the left-hand side.

Definition 15

(f -chained System \({{\mathrm{\mathcal {R}}}}^{-\!f}\)) Let \({{\mathrm{\mathcal {R}}}}\) be an int-TRS and let \(f \in {\varSigma }_d\) such that \({{\mathrm{\mathcal {R}}}}_{\rightarrow f} \cap {{\mathrm{\mathcal {R}}}}_{f\rightarrow } = \varnothing \). Then we define the f-chained system as \({{\mathrm{\mathcal {R}}}}^{-\!f} = ({{\mathrm{\mathcal {R}}}}{\setminus } ({{\mathrm{\mathcal {R}}}}_{\rightarrow f} \cup {{\mathrm{\mathcal {R}}}}_{f\rightarrow })) \cup {{\mathrm{\mathcal {R}}}}'\), where \({{\mathrm{\mathcal {R}}}}' = \{ \ell \mu \rightarrow r' \; \,\llbracket (\varphi \wedge \overline{\varphi })\mu \rrbracket \mid \ell \rightarrow r \,\llbracket \varphi \rrbracket \in {{\mathrm{\mathcal {R}}}}_{\rightarrow f}, \; \overline{\ell } \rightarrow \overline{r} \,\llbracket \overline{\varphi } \rrbracket \in {{\mathrm{\mathcal {R}}}}_{f\rightarrow },\; r \rightsquigarrow ^\mu _{\overline{\ell } \rightarrow \overline{r} \,\llbracket \overline{\varphi } \rrbracket } r' \}\).

Theorem 5

(Soundness of Chaining) Let \({{\mathrm{\mathcal {R}}}}\) be an int-TRS and f be as in Definition 15. Then \({{\mathrm{\mathcal {R}}}}\) terminates iff \({{\mathrm{\mathcal {R}}}}^{-\!f}\) terminates.

Proof

Soundness: Let \(t_1 \, {{\mathrm{\hookrightarrow }}}_{\ell _1 \rightarrow r_1 \,\llbracket \varphi _1 \rrbracket }^{\sigma _1} \, t_2 \, {{\mathrm{\hookrightarrow }}}_{\ell _2 \rightarrow r_2 \,\llbracket \varphi _2 \rrbracket }^{\sigma _2} \, \cdots \) be an infinite \({{\mathrm{\mathcal {R}}}}\)-reduction where we assume that \(\ell _i \rightarrow r_i \,\llbracket \varphi _i \rrbracket \) and \(\ell _j \rightarrow r_j \,\llbracket \varphi _j \rrbracket \) are variable disjoint whenever \(i \ne j\).

W.l.o.g. let \(\ell _1\rightarrow r_1 \,\llbracket \varphi _1 \rrbracket \notin {{\mathrm{\mathcal {R}}}}_{f\rightarrow }\). For every i where \(\ell _i \rightarrow r_i \,\llbracket \varphi _i \rrbracket \in {{\mathrm{\mathcal {R}}}}_{\rightarrow f}\) we have \(\ell _{i+1} \rightarrow r_{i+1} \,\llbracket \varphi _{i+1} \rrbracket \in {{\mathrm{\mathcal {R}}}}_{f\rightarrow }\), since \({{\mathrm{\mathsf {root}}}}(r_i) = f\).

Moreover, \(t_i = \ell _i\sigma _i\), \(t_{i+1} = r_i\sigma _i = \ell _{i+1}\sigma _{i+1}\), and both \(\varphi _i\sigma _i\) and \(\varphi _{i+1}\sigma _{i+1}\) are valid. So there is a \(\mu = {{\mathrm{\mathsf {mgu}}}}(r_i, \ell _{i+1})\) such that \(r_i \rightsquigarrow ^{\mu }_{\ell _{i+1} \rightarrow r_{i+1} \,\llbracket \varphi _{i+1} \rrbracket } r_{i+1}\mu \) and \(\ell _i\mu \rightarrow r_{i+1}\mu \,\llbracket (\varphi _i \wedge \varphi _{i+1})\mu \rrbracket \in {{\mathrm{\mathcal {R}}}}' \subseteq {{\mathrm{\mathcal {R}}}}^{-\!f}\), with \({{\mathrm{\mathcal {R}}}}'\) as in Definition 15.

As \(\ell _i \rightarrow r_i \,\llbracket \varphi _i \rrbracket \) and \(\ell _{i+1} \rightarrow r_{i+1} \,\llbracket \varphi _{i+1} \rrbracket \) are variable disjoint, there exists a substitution \(\gamma \) such that \(\mu \gamma \) is like \(\sigma _i\) for all variables in \(\ell _i \rightarrow r_i \,\llbracket \varphi _i \rrbracket \) and like \(\sigma _{i+1}\) for all variables in \(\ell _{i+1} \rightarrow r_{i+1} \,\llbracket \varphi _{i+1} \rrbracket \). Hence, \(\ell _i\mu \gamma = \ell _i\sigma _i = t_i\), \(r_{i+1}\mu \gamma = r_{i+1}\sigma _{i+1} = t_{i+2}\), and both \(\varphi _i\mu \gamma = \varphi _i\sigma _i\) and \(\varphi _{i+1}\mu \gamma = \varphi _{i+1}\sigma _{i+1}\) are valid. Thus, \(t_i \, {{\mathrm{\hookrightarrow }}}^\gamma _{\ell _i\mu \rightarrow r_{i+1}\mu \llbracket (\varphi _i \wedge \varphi _{i+1})\mu \rrbracket } \, t_{i+2}\). By iterating this replacement of rule applications from \({{\mathrm{\mathcal {R}}}}_{\rightarrow f}\), we also eliminate all applications of rules from \({{\mathrm{\mathcal {R}}}}_{f\rightarrow }\), since they are always preceded by a rule from \({{\mathrm{\mathcal {R}}}}_{\rightarrow f}\). In this way, we obtain an infinite reduction w.r.t. \({{\mathrm{\mathcal {R}}}}^{-\!f}\).

Completeness: Every infinite reduction w.r.t. \({{\mathrm{\mathcal {R}}}}^{-\!f}\) can be transformed into an infinite reduction w.r.t. \({{\mathrm{\mathcal {R}}}}\). The reason is that whenever t rewrites to \(t'\) with a rule from \({{\mathrm{\mathcal {R}}}}' \subseteq {{\mathrm{\mathcal {R}}}}^{-\!f}\), then t also rewrites to \(t'\) in 2 steps with \({{\mathrm{\mathcal {R}}}}\). To see this, let \(t \, {{\mathrm{\hookrightarrow }}}^\sigma _{\ell \mu \rightarrow r' \,\llbracket (\varphi \wedge \overline{\varphi })\mu \rrbracket } \, t'\). Hence, \(\varphi \mu \sigma \) and \(\overline{\varphi }\mu \sigma \) are valid. Here, both \(\ell \rightarrow r \,\llbracket \varphi \rrbracket \) and \(\overline{\ell } \rightarrow \overline{r} \,\llbracket \overline{\varphi } \rrbracket \) are from \({{\mathrm{\mathcal {R}}}}\) and \(r\rightsquigarrow ^\mu _{\overline{\ell } \rightarrow \overline{r} \,\llbracket \overline{\varphi } \rrbracket } r'\) (i.e., \(r\mu = \overline{\ell }\mu \) and \(r' = \overline{r}\mu \)). Thus, \(t = \ell \mu \sigma \, {{\mathrm{\hookrightarrow }}}^{\mu \sigma }_{\ell \rightarrow r \,\llbracket \varphi \rrbracket } \, r\mu \sigma = \overline{\ell }\mu \sigma \, {{\mathrm{\hookrightarrow }}}^{\mu \sigma }_{\overline{\ell } \rightarrow \overline{r} \,\llbracket \overline{\varphi } \rrbracket } \, \overline{r}\mu \sigma = r'\sigma = t'\). \(\square \)

For any term t, we can define \(\mathcal {I\!A}(t)\) and \(\mathcal {T\!A}(t)\) formally using argument filters. We define the integer argument projection that removes all term arguments as \(\pi _\mathcal {I\!A}(f) = [\,]\) for \(f \in \mathbb {Z}\) and \(\pi _\mathcal {I\!A}(f) = [i_1, \ldots , i_k]\) for any \(f \in {\varSigma }_c \cup {\varSigma }_d\), where \(\{ i_1, \ldots , i_k \} = \{ i \mid (f,i) \in \mathcal {I\!A}\}\) and \(i_j < i_{j + 1}\) for all j. The term argument projection \(\pi _\mathcal {T\!A}\) is defined analogously, retaining only term arguments. Then we have \(\mathcal {I\!A}(t) = \pi _\mathcal {I\!A}(t)\) and \(\mathcal {T\!A}(t) = \pi _\mathcal {T\!A}(t)\).

Before proving Theorem 8, we recapitulate the definition of reduction pairs.

Definition 16

(Reduction Pairs [37]) We call \((\succsim , \succ )\) a reduction pair iff \(\succsim \) is reflexive, transitive, and closed under substitutions (i.e., \(s \succsim t\) implies \(s\sigma \succsim t\sigma \)), \(\succ \) is closed under substitutions and well founded, and \(\succ \) and \(\succsim \) are compatible (i.e., \({\succ \circ \succsim } \subseteq { \succ }\) or \({ \succsim \circ \succ } \subseteq { \succ }\)). For a reduction pair and an int-TRS \({{\mathrm{\mathcal {R}}}}\), we define the sets \({{\mathrm{\mathcal {R}}}}_\succ = \{ \ell \rightarrow r \,\llbracket \varphi \rrbracket \mid \varphi \implies \ell \succ r \}\) and \({{\mathrm{\mathcal {R}}}}_\succsim = \{ \ell \rightarrow r \,\llbracket \varphi \rrbracket \mid \varphi \implies \ell \succsim r \}\).

Note that in contrast to the standard definition of reduction pairs [37], here \(\succsim \) does not have to be closed under contexts since we only regard rewrite steps at the root position.

Theorem 8

(Reduction Pairs From Projections) Let \({{\mathrm{\mathcal {R}}}}\) be an int-TRS. If \((\succsim _\mathcal {I\!A}, \succ _\mathcal {I\!A})\) is a reduction pair for \(\mathcal {I\!A}({{\mathrm{\mathcal {R}}}})\), then \((\succsim , \succ )\) is a reduction pair for \({{\mathrm{\mathcal {R}}}}\) where \(t_1 \succ t_2\) holds iff \(\mathcal {I\!A}(t_1) \succ _\mathcal {I\!A}\mathcal {I\!A}(t_2)\) and \(t_1 \succsim t_2\) holds iff \(\mathcal {I\!A}(t_1) \succsim _\mathcal {I\!A}\mathcal {I\!A}(t_2)\). The same holds for the restriction \(\mathcal {T\!A}\).

Proof

We show that transitivity of \(\succsim _\mathcal {I\!A}\) implies transitivity of \(\succsim \). Note that \(t_1 \succsim t_2\) and \(t_2 \succsim t_3\) implies \(\mathcal {I\!A}(t_1) \succsim _\mathcal {I\!A}\mathcal {I\!A}(t_2)\) and \(\mathcal {I\!A}(t_2) \succsim _\mathcal {I\!A}\mathcal {I\!A}(t_3)\) by definition. By transitivity of \(\succsim _\mathcal {I\!A}\), we have \(\mathcal {I\!A}(t_1) \succsim _\mathcal {I\!A}\mathcal {I\!A}(t_3)\) which implies \(t_1 \succsim t_3\). For all other properties, the proof is completely analogous. \(\square \)

To prove Theorem 11, we need a few intermediate lemmas. First, we show that \(\mathsf {th}\) is “monotonic” w.r.t. data substitutions, i.e., for any term t, its term height \(\mathsf {th}(t)\) is not greater than the term height of any instantiation \(t\sigma \).

Lemma 17

(Term Height is Monotonic w.r.t. Substitutions) Let \(t \in {{\mathrm{\mathcal {T}}}}(\mathbb {Z} \, \cup {\varSigma }_c, {{\mathrm{\mathcal {V}}}})\) and \(\sigma : {{\mathrm{\mathcal {V}}}}\rightarrow {{\mathrm{\mathcal {T}}}}(\mathbb {Z} \cup {\varSigma }_c, {{\mathrm{\mathcal {V}}}})\). Then \(\mathsf {th}(t) \le \mathsf {th}(t\sigma )\).

Proof

The proof is by induction on the term structure. In the base case, we either have \(t \in \mathbb {Z}\) and then \(t = t\sigma \) and thus \(\mathsf {th}(t) = \mathsf {th}(t\sigma )\), or \(t \in {{\mathrm{\mathcal {V}}}}\) and then \(\mathsf {th}(t) = 0 \le \mathsf {th}(t\sigma )\). In the induction step, let \(t = f(t_1, \ldots , t_n)\). Then we have

\(\square \)

We also need the following lemma about the relation between the term height of a variable occurring at a term position of t and the term height of t.

Lemma 18

(Lower Bounds for Term Height) Let \(t \in {{\mathrm{\mathcal {T}}}}(\mathbb {Z} \cup {\varSigma }_c, {{\mathrm{\mathcal {V}}}})\), \(x \in {{\mathrm{\mathcal {V}}}}_\mathcal {T\!A}(t)\), and \(\sigma : {{\mathrm{\mathcal {V}}}}\rightarrow {{\mathrm{\mathcal {T}}}}(\mathbb {Z} \cup {\varSigma }_c, {{\mathrm{\mathcal {V}}}})\). Then \(\mathsf {th}(x\sigma ) + \mathsf {nl}(t, x) \le \mathsf {th}(t\sigma )\).

Proof

We prove the lemma by induction. In the base case, \(x \in {{\mathrm{\mathcal {V}}}}_\mathcal {T\!A}(t)\) implies \(t = x\). Then \(\mathsf {th}(x\sigma ) + \mathsf {nl}(x, x) = \mathsf {th}(x\sigma )\). In the induction step, let \(t = f(t_1, \ldots , t_n)\). Then we have

\(\square \)

Finally, we also prove the following lemma about the relation between the term height of an instantiated term \(t\sigma \) and the term heights \(\mathsf {th}(x\sigma )\) of the variables x occurring in t. In this way, we obtain an upper bound for the term height \(\mathsf {th}(t\sigma )\).

Lemma 19

(Upper Bounds for Term Height) Let \(t \in {{\mathrm{\mathcal {T}}}}(\mathbb {Z} \cup {\varSigma }_c, {{\mathrm{\mathcal {V}}}})\) and \(\sigma : {{\mathrm{\mathcal {V}}}}\rightarrow {{\mathrm{\mathcal {T}}}}(\mathbb {Z} \cup {\varSigma }_c, {{\mathrm{\mathcal {V}}}})\). Then \(\mathsf {th}(t\sigma ) \le \max \{ \mathsf {th}(t), \max \{ \mathsf {th}(x\sigma ) + \mathsf {nl}(t, x) \mid x \in {{\mathrm{\mathcal {V}}}}_\mathcal {T\!A}(t) \} \}\).

Proof

Again, we prove the lemma by induction. In the base case, we consider three cases. For \(t = x \in {{\mathrm{\mathcal {V}}}}\), we have \(\mathsf {th}(x\sigma ) = \max \{ \mathsf {th}(x), \mathsf {th}(x\sigma ) + \mathsf {nl}(x,x) \}\), since \(\mathsf {th}(x) = \mathsf {nl}(x,x) = 0\). For \(t \in {\varSigma }_c\), we have \(\mathsf {th}(t\sigma ) = \mathsf {th}(t) = 1 = \max \{ \mathsf {th}(t) \}\). Finally, for \(t \in \mathbb {Z}\), we have \(\mathsf {th}(t\sigma ) = 0\), which is a lower bound for any term height. In the induction step, let \(t = f(t_1, \ldots , t_n)\).

\(\square \)

For the proof of Theorem 11, we define the replacement of non-integer subterms by their height formally.

Definition 20

(Term Height Projection \(\pi _\mathsf {th}\)) Let \(t = f(t_1, \ldots , t_n)\) for some \(f \in {\varSigma }_d\), \(t_1, \ldots , t_n \in {{\mathrm{\mathcal {T}}}}(\mathbb {Z} \cup {\varSigma }_c, {{\mathrm{\mathcal {V}}}})\). Then \(\pi _\mathsf {th}(t) = f(\hat{t}_1, \ldots , \hat{t}_n)\) with

$$\begin{aligned} \hat{t}_i = {\left\{ \begin{array}{ll} t_i &{} \text {if } (f, i) \not \in \mathcal {T\!A}\\ \mathsf {th}(t_i) &{} \text {otherwise} \end{array}\right. } \end{aligned}$$

We can now prove the soundness of termination proving by the term height projection.

Theorem 11

(Soundness of Term Height Projection) Let \({{\mathrm{\mathcal {R}}}}\) be an int-TRS. If \({\varPi }_\mathsf {th}({{\mathrm{\mathcal {R}}}})\) terminates, then \({{\mathrm{\mathcal {R}}}}\) also terminates.

Proof

We show that if \({{\mathrm{\mathcal {R}}}}\) has an infinite reduction \(t_1 \, {{\mathrm{\hookrightarrow }}}_{{{\mathrm{\mathcal {R}}}}} \, t_2 \, {{\mathrm{\hookrightarrow }}}_{{{\mathrm{\mathcal {R}}}}} \, \cdots \), then there is also the infinite reduction \(\pi _\mathsf {th}(t_1) \, {{\mathrm{\hookrightarrow }}}_{{\varPi }_\mathsf {th}({{\mathrm{\mathcal {R}}}})} \, \pi _\mathsf {th}(t_2) \, {{\mathrm{\hookrightarrow }}}_{{\varPi }_\mathsf {th}({{\mathrm{\mathcal {R}}}})} \, \cdots \) To this end, we prove that

for a suitable substitution \(\sigma '\). Let \(\ell = f(\ell _1,\ldots ,\ell _n)\) and \(r = g(r_1,\ldots ,r_m)\). Then according to Definition 10, we have \({\varPi }_\mathsf {th}(\ell \rightarrow r \,\llbracket \varphi \rrbracket ) = f(\ell _1',\ldots ,\ell _n') \rightarrow g(r_1', \ldots , r_m') \,\llbracket \varphi \wedge \psi \rrbracket \), where \(\ell _i'\) is a fresh variable \(h_i\) if \((f, i) \in \mathcal {T\!A}\), and otherwise \(\ell _i' = \ell _i\). Similarly, \(r_i'\) is a fresh variable \(h_i'\) if \((g, i) \in \mathcal {T\!A}\) and otherwise \(r_i' = r_i\). We now define \(\sigma '\) as follows.

$$\begin{aligned} \sigma '(x) = {\left\{ \begin{array}{ll} \mathsf {th}(\sigma (x)) &{} \text {if } x \in {{\mathrm{\mathcal {V}}}}_\mathcal {T\!A}(\ell ) \cup {{\mathrm{\mathcal {V}}}}_\mathcal {T\!A}(r)\\ \mathsf {th}(s_i) &{} \text {if } x = h_i\\ \mathsf {th}(t_i) &{} \text {if } x = h'_i\\ \sigma (x) &{} \text {otherwise} \end{array}\right. } \end{aligned}$$

Now we show that \(f(\hat{s}_1,\ldots ,\hat{s}_n) \, {{\mathrm{\hookrightarrow }}}^{\sigma '}_{f(\ell _1',\ldots ,\ell _n') \rightarrow g(r_1', \ldots , r_m') \,\llbracket \varphi \wedge \psi \rrbracket } \, g(\hat{t}_1,\ldots ,\hat{t}_m)\).

First note that the left-hand side of the rule matches \(f(\hat{s}_1,\ldots ,\hat{s}_n)\) using the matcher \(\sigma '\). In other words, we have \(\ell _i' \sigma ' = \hat{s}_i\) for all \(1 \le i \le n\). The reason is that if \((f, i) \in \mathcal {T\!A}\), then \(\ell _i' \sigma ' = h_i \sigma ' = \mathsf {th}(s_i) = \hat{s}_i\). If \((f, i) \notin \mathcal {T\!A}\), then \(\ell _i' \sigma ' = \ell _i \sigma ' = \ell _i \sigma = s_i = \hat{s}_i\). For a similar reason, we have \(g(r_1', \ldots , r_m') \sigma ' = g(\hat{t}_1,\ldots ,\hat{t}_m)\).

It remains to prove that the constraint \((\varphi \wedge \psi )\sigma '\) is valid. As \(\sigma '\) behaves like \(\sigma \) on integer variables, we have \(\varphi \sigma ' = \varphi \sigma \), and thus validity of \(\varphi \sigma '\) follows from validity of \(\varphi \sigma \). So we need to consider only the additional conjuncts in \(\psi \).

Conjuncts of the form \(h_i \ge \mathsf {th}(\ell _i)\) for \((f,i) \in \mathcal {T\!A}\) are valid when instantiated with \(\sigma '\) because \((h_i \ge \mathsf {th}(\ell _i))\sigma '\) iff \(h_i\sigma '\ge \mathsf {th}(\ell _i)\) iff \(\mathsf {th}(s_i)\ge \mathsf {th}(\ell _i)\) iff \(\mathsf {th}(\ell _i\sigma )\ge \mathsf {th}(\ell _i)\). The validity of \(\mathsf {th}(\ell _i\sigma )\ge \mathsf {th}(\ell _i)\) follows from Lemma 17.

For conjuncts of the form \(x + \mathsf {nl}(\ell _i, x) \le h_i\) with \((f,i) \in \mathcal {T\!A}\) and \(x \in {{\mathrm{\mathcal {V}}}}_\mathcal {T\!A}(\ell _i)\), we have \((x + \mathsf {nl}(\ell _i, x) \le h_i)\sigma '\) iff \(x\sigma ' + \mathsf {nl}(\ell _i, x) \le h_i\sigma '\) iff \(\mathsf {th}(x\sigma ) + \mathsf {nl}(\ell _i, x) \le \mathsf {th}(s_i)\) iff \(\mathsf {th}(x\sigma ) + \mathsf {nl}(\ell _i, x) \le \mathsf {th}(\ell _i\sigma )\). This is a consequence of Lemma 18.

Now we consider conjuncts of the form \(x \ge 0\) for \((f,i) \in \mathcal {T\!A}\) and \(x \in {{\mathrm{\mathcal {V}}}}_\mathcal {T\!A}(\ell _i)\). Here we have \((x \ge 0)\sigma '\) iff \(x\sigma ' \ge 0\) iff \(\mathsf {th}(x\sigma ) \ge 0\). This is clearly valid as \(\mathsf {th}\) always yields a non-negative number. The validity of the corresponding conjuncts for the height variables \(h_i'\) on the right-hand side can be shown in an analogous way.

Finally, we consider the conjunct \(h'_i \le \max \{ \mathsf {th}(r_i) , \max \{ x + \mathsf {nl}(r_i, x) \mid x \in {{\mathrm{\mathcal {V}}}}_{\mathcal {T\!A}}(r_i) \}\}\) where \((g,i) \in \mathcal {T\!A}\) and \(x \in {{\mathrm{\mathcal {V}}}}_\mathcal {T\!A}(r_i)\). We have \((h'_i \le \max \{ \mathsf {th}(r_i) , \max \{ x + \mathsf {nl}(r_i, x) \mid x \in {{\mathrm{\mathcal {V}}}}_{\mathcal {T\!A}}(r_i) \}\}) \sigma '\) iff \(h'_i\sigma ' \le \max \{ \mathsf {th}(r_i) , \max \{ x\sigma ' + \mathsf {nl}(r_i, x) \mid x \in {{\mathrm{\mathcal {V}}}}_{\mathcal {T\!A}}(r_i) \}\}\) iff \(\mathsf {th}(t_i) \le \max \{ \mathsf {th}(r_i) , \max \{ \mathsf {th}(x\sigma ) + \mathsf {nl}(r_i, x) \mid x \in {{\mathrm{\mathcal {V}}}}_{\mathcal {T\!A}}(r_i) \}\}\) iff \(\mathsf {th}(r_i\sigma ) \le \max \{ \mathsf {th}(r_i) , \max \{ \mathsf {th}(x\sigma ) + \mathsf {nl}(r_i, x) \mid x \in {{\mathrm{\mathcal {V}}}}_{\mathcal {T\!A}}(r_i) \}\}\). This is a consequence of Lemma 19. \(\square \)

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

Cite this article

Giesl, J., Aschermann, C., Brockschmidt, M. et al. Analyzing Program Termination and Complexity Automatically with AProVE . J Autom Reasoning 58, 3–31 (2017). https://doi.org/10.1007/s10817-016-9388-y

Download citation

  • Received:

  • Accepted:

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s10817-016-9388-y

Keywords

Navigation