Verifying Array Manipulating Programs with Full-Program Induction

We present a full-program induction technique for proving (a sub-class of) quantified as well as quantifier-free properties of programs manipulating arrays of parametric size N. Instead of inducting over individual loops, our technique inducts over the entire program (possibly containing multiple loops) directly via the program parameter N. Significantly, this does not require generation or use of loop-specific invariants. We have developed a prototype tool Vajra to assess the efficacy of our technique. We demonstrate the performance of Vajra vis-a-vis several state-of-the-art tools on a set of array manipulating benchmarks.

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

[2]  RepsThomas,et al.  A framework for numeric analysis of array operations , 2005 .

[3]  Patrick Cousot,et al.  A parametric segmentation functor for fully automatic and scalable array content analysis , 2011, POPL '11.

[4]  Sumit Gulwani,et al.  Lifting abstract interpreters to quantified logical domains , 2008, POPL '08.

[5]  Ranjit Jhala,et al.  Array Abstractions from Proofs , 2007, CAV.

[6]  Nicolas Halbwachs,et al.  Discovering properties about arrays in simple programs , 2008, PLDI '08.

[7]  Fangzhen Lin,et al.  Extending VIAP to Handle Array Programs , 2018, VSTTE.

[8]  HalbwachsNicolas,et al.  Discovering properties about arrays in simple programs , 2008 .

[9]  Mohamed Nassim Seghir,et al.  Simplifying the Verification of Quantified Array Assertions via Code Transformation , 2012, LOPSTR.

[10]  Arie Gurfinkel,et al.  Quantifiers on Demand , 2018, ATVA.

[11]  Joe D. Warren,et al.  The program dependence graph and its use in optimization , 1987, TOPL.

[12]  M. Wegman,et al.  Global value numbers and redundant computations , 1988, POPL '88.

[13]  Xavier Rival,et al.  Abstraction of Arrays Based on Non Contiguous Partitions , 2015, VMCAI.

[14]  CousotPatrick,et al.  A parametric segmentation functor for fully automatic and scalable array content analysis , 2011 .

[15]  Stephen McCamant,et al.  The Daikon system for dynamic detection of likely invariants , 2007, Sci. Comput. Program..

[16]  Grigory Fedyukovich,et al.  Quantified Invariants via Syntax-Guided Synthesis , 2019, CAV.

[17]  Thomas W. Reps,et al.  A framework for numeric analysis of array operations , 2005, POPL '05.

[18]  Nikolaj Bjørner,et al.  Compositional verification of procedural programs using horn clauses over integers and arrays , 2015, 2015 Formal Methods in Computer-Aided Design (FMCAD).

[19]  Supratik Chakraborty,et al.  Verifying Array Manipulating Programs by Tiling , 2017, SAS.

[20]  Priyanka Darke,et al.  VeriAbs : Verification by Abstraction and Test Generation , 2019, 2019 34th IEEE/ACM International Conference on Automated Software Engineering (ASE).

[21]  Vivek Sarkar,et al.  Array SSA form and its use in parallelization , 1998, POPL '98.

[22]  Laure Gonnord,et al.  Cell Morphing: From Array Programs to Array-Free Horn Clauses , 2016, SAS.

[23]  Thomas A. Henzinger,et al.  Aligators for Arrays (Tool Paper) , 2010, LPAR.

[24]  Thomas A. Henzinger,et al.  Invariant Synthesis for Combined Theories , 2007, VMCAI.

[25]  Sumit Gulwani,et al.  Program verification using templates over predicate abstraction , 2009, PLDI '09.

[26]  K. Rustan M. Leino,et al.  Houdini, an Annotation Assistant for ESC/Java , 2001, FME.

[27]  Mary Sheeran,et al.  Checking Safety Properties Using Induction and a SAT-Solver , 2000, FMCAD.

[28]  Frank Piessens,et al.  VeriFast: A Powerful, Sound, Predictable, Fast Verifier for C and Java , 2011, NASA Formal Methods.

[29]  Armin Biere,et al.  Bounded Model Checking Using Satisfiability Solving , 2001, Formal Methods Syst. Des..

[30]  Silvio Ghilardi,et al.  Booster: An Acceleration-Based Verification Framework for Array Programs , 2014, ATVA.