Proving Nontermination via Safety

We show how the problem of nontermination proving can be reduced to a question of underapproximation search guided by a safety prover. This reduction leads to new nontermination proving implementation strategies based on existing tools for safety proving. Our preliminary implementation beats existing tools. Furthermore, our approach leads to easy support for programs with unbounded nondeterminism.

[1]  Peter W. O'Hearn,et al.  Compositional Shape Analysis by Means of Bi-Abduction , 2011, JACM.

[2]  Philipp Rümmer,et al.  Non-termination Checking for Imperative Programs , 2008, TAP.

[3]  Étienne Payet,et al.  Loop detection in term rewriting using the eliminating unfoldings , 2008, Theor. Comput. Sci..

[4]  Andreas Podelski,et al.  Terminator: Beyond Safety , 2006, CAV.

[5]  Rajeev Alur,et al.  A Temporal Logic of Nested Calls and Returns , 2004, TACAS.

[6]  Carsten Sinz,et al.  LLBMC: Bounded Model Checking of C and C++ Programs Using a Compiler IR , 2012, VSTTE.

[7]  Sriram K. Rajamani,et al.  The SLAM Toolkit , 2001, CAV.

[8]  Jürgen Giesl,et al.  Automated Detection of Non-termination and NullPointerExceptions for Java Bytecode , 2011, FoVeOOS.

[9]  Étienne Payet,et al.  A non-termination criterion for binary constraint logic programs , 2009, Theory Pract. Log. Program..

[10]  Danny De Schreye,et al.  A New Approach to Non-termination Analysis of Logic Programs , 2009, ICLP.

[11]  Florian Zuleger,et al.  Ramsey vs. Lexicographic Termination Proving , 2013, TACAS.

[12]  William R. Harris,et al.  Alternation for Termination , 2010, SAS.

[13]  Jürgen Giesl,et al.  Automatic Termination Proofs in the Dependency Pair Framework , 2006, IJCAR.

[14]  Edsger W. Dijkstra,et al.  A Discipline of Programming , 1976 .

[15]  Marc Brockschmidt,et al.  Better Termination Proving through Cooperation , 2013, CAV.

[16]  Mohamed Faouzi Atig,et al.  Detecting Fair Non-termination in Multithreaded Programs , 2012, CAV.

[17]  W. Press,et al.  Numerical Recipes: The Art of Scientific Computing , 1987 .

[18]  Viktor Schuppan,et al.  Liveness Checking as Safety Checking , 2002, FMICS.

[19]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.

[20]  N. S. Barnett,et al.  Private communication , 1969 .

[21]  Greg Nelson,et al.  A generalization of Dijkstra's calculus , 1989, ACM Trans. Program. Lang. Syst..

[22]  Kenneth L. McMillan,et al.  Lazy Abstraction with Interpolants , 2006, CAV.

[23]  Étienne Payet,et al.  A termination analyzer for Java bytecode based on path-length , 2010, TOPL.

[24]  Bernhard Beckert,et al.  Formal Verification of Object-Oriented Software - International Conference, FoVeOOS 2010, Paris, France, June 28-30, 2010, Revised Selected Papers , 2011, FoVeOOS.

[25]  Étienne Payet,et al.  Nontermination inference of logic programs , 2004, TOPL.

[26]  Tayssir Touili,et al.  Pushdown model checking for malware detection , 2013, International Journal on Software Tools for Technology Transfer.

[27]  Larry Wos,et al.  What Is Automated Reasoning? , 1987, J. Autom. Reason..

[28]  Marsha Chechik,et al.  Yasm: A Software Model-Checker for Verification and Refutation , 2006, CAV.

[29]  Eric Koskinen,et al.  Reasoning about nondeterminism in programs , 2013, PLDI 2013.

[30]  Thomas A. Henzinger,et al.  Proving non-termination , 2008, POPL '08.

[31]  Jürgen Giesl,et al.  Proving and Disproving Termination of Higher-Order Functions , 2005, FroCoS.

[32]  William H. Press,et al.  Numerical Recipes in FORTRAN - The Art of Scientific Computing, 2nd Edition , 1987 .

[33]  Krzysztof R. Apt,et al.  Logic Programming , 1990, Handbook of Theoretical Computer Science, Volume B: Formal Models and Sematics.

[34]  Étienne Payet,et al.  Experiments with Non-Termination Analysis for Java Bytecode , 2009, Electron. Notes Theor. Comput. Sci..

[35]  Sumit Gulwani,et al.  Program analysis as constraint solving , 2008, PLDI '08.