Automated Verification of Critical Systems ( AVoCS 2015 ) Studying Verification Conditions for Imperative Programs

Program verification tools use verification condition generators to produce logical formulas whose validity implies that the program is correct with respect to its specification. Different tools produce different conditions, and the underlying algorithms have not been properly exposed or explored so far. In this paper we consider a simple imperative programming language, extended with assume and assert statements, to present different ways of generating verification conditions. We study the approaches with  experimental results originated by verification conditions generated from the intermediate representation of LLVM.

[1]  Jorge Sousa Pinto,et al.  Rigorous Software Development - An Introduction to Program Verification , 2011, Undergraduate Topics in Computer Science.

[2]  Jacques Loeckx,et al.  The Foundations of Program Verification, 2nd ed , 1987 .

[3]  Cormac Flanagan,et al.  Avoiding exponential explosion: generating compact verification conditions , 2001, POPL '01.

[4]  Jorge A. Navas,et al.  TRACER: A Symbolic Execution Tool for Verification , 2012, CAV.

[5]  Shin Nakajima,et al.  A Formula-Based Approach for Automatic Fault Localization of Imperative Programs , 2014, ICFEM.

[6]  Greg Nelson,et al.  Extended static checking for Java , 2002, PLDI '02.

[7]  Mark N. Wegman,et al.  Efficiently computing static single assignment form and the control dependence graph , 1991, TOPL.

[8]  Daniel Kroening,et al.  A Tool for Checking ANSI-C Programs , 2004, TACAS.

[9]  L. D. Moura,et al.  The YICES SMT Solver , 2006 .

[10]  Jean-Christophe Filliâtre,et al.  Why3 - Where Programs Meet Provers , 2013, ESOP.

[11]  Vikram S. Adve,et al.  LLVM: a compilation framework for lifelong program analysis & transformation , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..

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

[13]  Alastair F. Donaldson,et al.  Software Model Checking , 2014, Computing Handbook, 3rd ed..

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

[15]  K. Rustan M. Leino,et al.  Weakest-precondition of unstructured programs , 2005, PASTE '05.

[16]  Alessandro Armando,et al.  Bounded model checking of software using SMT solvers instead of SAT solvers , 2006, International Journal on Software Tools for Technology Transfer.

[17]  Ashutosh Gupta,et al.  InvGen: An Efficient Invariant Generator , 2009, CAV.

[18]  Supratik Chakraborty,et al.  Automatically Refining Abstract Interpretations , 2008, TACAS.

[19]  Daniela Carneiro da Cruz,et al.  Verification conditions for single-assignment programs , 2012, SAC '12.

[20]  Bor-Yuh Evan Chang,et al.  Boogie: A Modular Reusable Verifier for Object-Oriented Programs , 2005, FMCO.

[21]  Jacques Loeckx,et al.  The Foundations of Program Verification , 1987 .

[22]  Daniel Kroening,et al.  Behavioral consistency of C and Verilog programs using bounded model checking , 2003, Proceedings 2003. Design Automation Conference (IEEE Cat. No.03CH37451).

[23]  Sharad Malik,et al.  Chaff: engineering an efficient SAT solver , 2001, Proceedings of the 38th Design Automation Conference (IEEE Cat. No.01CH37232).