Advertisement

Formal Methods in System Design

, Volume 35, Issue 3, pp 369–387 | Cite as

Summarization for termination: no return!

  • Byron CookEmail author
  • Andreas Podelski
  • Andrey Rybalchenko
Article

Abstract

We propose a program analysis method for proving termination of recursive programs. The analysis is based on a reduction of termination to two separate problems: reachability of recursive programs, and termination of non-recursive programs. Our reduction works through a program transformation that modifies the call sites and removes return edges. In the new, non-recursive program, a procedure call may non-deterministically enter the procedure body (which means that it will never return) or apply a summary statement.

Keywords

Program verification Model checking Termination Recursion Summarization 

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. 1.
    Alur R, Madhusudan P (2004) Visibly pushdown languages. In: STOC. ACM, New York Google Scholar
  2. 2.
    Alur R, Etessami K, Madhusudan P (2004) A temporal logic of nested calls and returns. In: TACAS. Springer, Berlin Google Scholar
  3. 3.
    Alur R, Benedikt M, Etessami K, Godefroid P, Reps TW, Yannakakis M (2005) Analysis of recursive state machines. ACM Trans Program Lang Syst Google Scholar
  4. 4.
    Alur R, Chaudhuri S, Madhusudan P (2006) A fixpoint calculus for local and global program flows. In: POPL. ACM, New York Google Scholar
  5. 5.
    Ball T, Rajamani SK (2000) Bebop: A symbolic model checker for Boolean programs. In: SPIN. Springer, Berlin Google Scholar
  6. 6.
    Ball T, Rajamani SK (2001) Bebop: a path-sensitive interprocedural dataflow engine. In: PASTE Google Scholar
  7. 7.
    Bouajjani A, Esparza J, Maler O (1997) Reachability analysis of pushdown automata: Application to model-checking. In: CONCUR. Springer, Berlin Google Scholar
  8. 8.
    Bourdoncle F (1993) Abstract debugging of higher-order imperative languages. In: PLDI. ACM, New York Google Scholar
  9. 9.
    Bradley A, Manna Z, Sipma H (2005) Termination of polynomial programs. In: VMCAI Google Scholar
  10. 10.
    Colón M, Sipma H (2002) Practical methods for proving program termination. In: CAV Google Scholar
  11. 11.
    Cook B, Podelski A, Rybalchenko A (2006) Termination proofs for systems code. In: PLDI. ACM, New York Google Scholar
  12. 12.
    Dijkstra EW, Scholten CS (1989) Predicate calculus and program semantics. Springer, Berlin Google Scholar
  13. 13.
    Esparza J, Podelski A (2000) Efficient algorithms for pre* and post* on interprocedural parallel flow graphs. In: POPL. ACM, New York Google Scholar
  14. 14.
    Esparza J, Schwoon S (2001) A bdd-based model checker for recursive programs. In: CAV. Springer, Berlin Google Scholar
  15. 15.
    Esparza J, Hansel D, Rossmanith P, Schwoon S (2000) Efficient algorithms for model checking pushdown systems. In: CAV. Springer, Berlin Google Scholar
  16. 16.
    Gotsman A, Berdine J, Cook B (2006) Interprocedural shape analysis with separated heap abstractions. In: SAS. Springer, Berlin Google Scholar
  17. 17.
    Gupta A, Henzinger TA, Majumdar R, Rybalchenko A, Xu R-G (2008) Proving non-termination. In: POPL. ACM, New York Google Scholar
  18. 18.
    Jeannet B, Loginov A, Reps TW, Sagiv S (2004) A relational approach to interprocedural shape analysis. In: SAS. Springer, Berlin Google Scholar
  19. 19.
    Jhala R, Majumdar R (2007) Interprocedural analysis of asynchronous programs. In: POPL. ACM, New York Google Scholar
  20. 20.
    Kodumal J, Aiken A (2004) The set constraint/CFL reachability connection in practice. In: PLDI. ACM, New York Google Scholar
  21. 21.
    Lal A, Reps TW (2006) Improving pushdown system model checking. In: CAV. ACM, New York Google Scholar
  22. 22.
    Lal A, Touili T, Kidd N, Reps TW (2008) Interprocedural analysis of concurrent programs under a context bound. In: TACAS. Springer, Berlin Google Scholar
  23. 23.
    Lee CS, Jones ND, Ben-Amram AM (2001) The size-change principle for program termination. In: POPL Google Scholar
  24. 24.
    Manolios P, Vroon D (2006) Termination analysis with calling context graphs. In: CAV. Springer, Berlin Google Scholar
  25. 25.
    Podelski A, Rybalchenko A (2004) Transition invariants. In: LICS. IEEE, New York Google Scholar
  26. 26.
    Podelski A, Rybalchenko A (2005) Transition predicate abstraction and fair termination. In: POPL Google Scholar
  27. 27.
    Podelski A, Rybalchenko A (2007) ARMC: the logical choice for software model checking with abstraction refinement. In: PADL Google Scholar
  28. 28.
    Podelski A, Schaefer I, Wagner S (2005) Summaries for total correctness of recursive programs. In: ESOP. Springer, Berlin Google Scholar
  29. 29.
    Qadeer S, Rajamani SK, Rehof J (2004) Summarizing procedures in concurrent programs. In: POPL. ACM, New York Google Scholar
  30. 30.
    Reps TW, Horwitz S, Sagiv S (1995) Precise interprocedural dataflow analysis via graph reachability. In: POPL Google Scholar
  31. 31.
    Reps TW, Schwoon S, Jha S, Melski D (2005) Weighted pushdown systems and their application to interprocedural dataflow analysis. Sci Comput Program Google Scholar
  32. 32.
    Reps TW, Lal A, Kidd N (2007) Program analysis using weighted pushdown systems. In: FSTTCS. Springer, Berlin Google Scholar
  33. 33.
    Sharir M, Pnueli A (1981) Two approaches to interprocedural data flow analysis. In: Program Flow Analysis: Theory and Application. Prentice Hall, Englewood Cliffs Google Scholar

Copyright information

© Springer Science+Business Media, LLC 2009

Authors and Affiliations

  • Byron Cook
    • 1
    • 2
    Email author
  • Andreas Podelski
    • 3
  • Andrey Rybalchenko
    • 4
  1. 1.Microsoft ResearchCambridgeUK
  2. 2.Queen MaryUniversity of LondonLondonUK
  3. 3.University of FreiburgFreiburgGermany
  4. 4.Max Planck Institute for Software Systems (MPI-SWS)SaarbrückenGermany

Personalised recommendations