Non-termination Checking for Imperative Programs

While termination checking tailored to real-world library code or frameworks has received ever-increasing attention during the last years, the complementary question of disproving termination properties as a means of debugging has largely been ignored so far. We present an approach to automatic non-termination checking that relates to termination checking in the same way as symbolic testing does to program verification. Our method is based on the automated generation of invariants that show that terminating states of a program are unreachable from certain initial states. Such initial states are identified using constraint-solving techniques. The method is fully implemented on top of a program verification system and available for download. We give an empirical evaluation of the approach using a collection of non-terminating example programs.

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

[2]  Simon L. Peyton Jones,et al.  Imperative functional programming , 1993, POPL '93.

[3]  Jerzy Tiuryn,et al.  Dynamic logic , 2001, SIGA.

[4]  Peter Baumgartner,et al.  Deduction and applications , 2006 .

[5]  Melvin Fitting,et al.  First-Order Logic and Automated Theorem Proving , 1990, Graduate Texts in Computer Science.

[6]  Deepak Kapur Automatically Generating Loop Invariants Using Quantifier Elimination , 2005, Deduction and Applications.

[7]  Muhammad Ali Shah,et al.  Proving Programs Incorrect Using a Sequent Calculus for Java Dynamic Logic , 2007, TAP.

[8]  G. Winskel The formal semantics of programming languages , 1993 .

[9]  Yde Venema,et al.  Dynamic Logic by David Harel, Dexter Kozen and Jerzy Tiuryn. The MIT Press, Cambridge, Massachusetts. Hardback: ISBN 0–262–08289–6, $50, xv + 459 pages , 2002, Theory and Practice of Logic Programming.

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

[11]  M. Fitting First-order logic and automated theorem proving (2nd ed.) , 1996 .

[12]  Zohar Manna,et al.  Automatic Generation of Invariants and Intermediate Assertions , 1997, Theor. Comput. Sci..

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

[14]  Henny B. Sipma,et al.  Linear Invariant Generation Using Non-linear Constraint Solving , 2003, CAV.

[15]  Glynn Winskel,et al.  The formal semantics of programming languages - an introduction , 1993, Foundation of computing series.

[16]  Bernhard Beckert,et al.  Verification of Object-Oriented Software. The KeY Approach - Foreword by K. Rustan M. Leino , 2007, The KeY Approach.

[17]  Philipp Rümmer,et al.  A Sequent Calculus for Integer Arithmetic with Counterexample Generation , 2007, VERIFY.

[18]  Martin Giese,et al.  Incremental Closure of Free Variable Tableaux , 2001, IJCAR.

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

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