Binary Reachability Analysis of Higher Order Functional Programs

A number of recent approaches for proving program termination rely on transition invariants - a termination argument that can be constructed incrementally using abstract interpretation. These approaches use binary reachability analysis to check if a candidate transition invariant holds for a given program. For imperative programs, its efficient implementation can be obtained by a reduction to reachability analysis, for which practical tools are available. In this paper, we show how a binary reachability analysis can be put to work for proving termination of higher order functional programs.

[1]  Zijiang Yang,et al.  F-Soft: Software Verification Platform , 2005, CAV.

[2]  Ranjit Jhala,et al.  Type-based data structure verification , 2009, PLDI '09.

[3]  Andreas Podelski,et al.  Termination proofs for systems code , 2006, PLDI '06.

[4]  Sumit Gulwani,et al.  Ranking Abstractions , 2008, ESOP.

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

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

[7]  Matthew Might,et al.  Pushdown Control-Flow Analysis of Higher-Order Programs , 2010, ArXiv.

[8]  Christian von Essen,et al.  Termination Graphs for Java Bytecode , 2010, Verification, Induction, Termination Analysis.

[9]  Naoki Kobayashi,et al.  Predicate abstraction and CEGAR for higher-order model checking , 2011, PLDI '11.

[10]  Patrick Cousot,et al.  An abstract interpretation framework for termination , 2012, POPL '12.

[11]  Ranjit Jhala,et al.  Dsolve: Safety Verification via Liquid Types , 2010, CAV.

[12]  Rupak Majumdar,et al.  HMC: Verifying Functional Programs Using Abstract Interpreters , 2011, CAV.

[13]  Xavier Leroy,et al.  Polymorphic typing of an algorithmic language , 1992 .

[14]  Matthew Might,et al.  EigenCFA: accelerating flow analysis with GPUs , 2011, POPL '11.

[15]  Neil D. Jones,et al.  The size-change principle for program termination , 2001, POPL '01.

[16]  Patrick Cousot,et al.  Invited Talk: Higher Order Abstract Interpretation (and Application to Comportment Analysis Generalizing Strictness, Termination, Projection, and PER Analysis. , 1994 .

[17]  Sriram K. Rajamani,et al.  The SLAM project: debugging system software via static analysis , 2002, POPL '02.

[18]  Neil D. Jones,et al.  Termination Analysis of the Untyped lamba-Calculus , 2004, RTA.

[19]  Matthew Might,et al.  Exploiting reachability and cardinality in higher-order flow analysis , 2008, J. Funct. Program..

[20]  Olin Shivers,et al.  Control flow analysis in scheme , 1988, PLDI '88.

[21]  Janis Voigtländer Free theorems involving type constructor classes: functional pearl , 2009, ICFP.

[22]  Jürgen Giesl,et al.  Automated termination proofs for haskell by term rewriting , 2011, TOPL.

[23]  Andreas Podelski,et al.  Proving program termination , 2011, Commun. ACM.

[24]  Thomas A. Henzinger,et al.  Lazy abstraction , 2002, POPL '02.

[25]  Daniel Kroening,et al.  Termination Analysis with Compositional Transition Invariants , 2010, CAV.

[26]  A. Rybalchenko,et al.  Transition invariants , 2004, LICS 2004.

[27]  Andreas Podelski,et al.  Size-Change Termination and Transition Invariants , 2010, SAS.

[28]  Christian von Essen,et al.  Automated Termination Analysis of Java Bytecode by Term Rewriting , 2010, RTA.

[29]  Na Xu Static contract checking for Haskell , 2009, POPL '09.

[30]  Neil D. Jones,et al.  Termination Analysis of Higher-Order Functional Programs , 2005, APLAS.

[31]  Tachio Terauchi Dependent types from counterexamples , 2010, POPL '10.

[32]  Brian Campbell,et al.  Amortised Memory Analysis Using the Depth of Data Structures , 2009, ESOP.

[33]  Damien Sereni,et al.  Termination analysis and call graph construction for higher-order functional programs , 2007, ICFP '07.

[34]  Philip Wadler Monads for Functional Programming , 1995, Advanced Functional Programming.

[35]  Peter W. O'Hearn,et al.  Automatic Termination Proofs for Programs with Shape-Shifting Heaps , 2006, CAV.