Verification of Concurrent Programs Using Trace Abstraction Refinement

Verifying concurrent programs is notoriously hard due to the state explosion problem: 1 the data state space can be very large as the variables can range over very large sets, and 2 the control state space is the Cartesian product of the control state space of the concurrent components and thus grows exponentially in the number of components. On the one hand, the most successful approaches to address the control state explosion problem are based on assume-guarantee reasoning or model-checking coupled with partial order reduction. On the other hand, the most successful techniques to address the data space explosion problem for sequential programs verification are based on the abstraction/refinement paradigm which consists in refining an abstract over-approximation of a program via predicate refinement. In this paper, we show that we can combine partial order reduction techniques with trace abstraction refinement. We apply our approach to standard benchmarks and show that it matches current state-of-the-art analysis techniques.

[1]  Andreas Podelski,et al.  Inductive data flow graphs , 2013, POPL.

[2]  Cliff B. Jones,et al.  Tentative steps toward a development method for interfering programs , 1983, TOPL.

[3]  Salvatore La Torre,et al.  Lazy-CSeq 0.6c: An improved lazy sequentialization tool for C (competition contribution) , 2014 .

[4]  Salvatore La Torre,et al.  MU-CSeq 0.3: Sequentialization by Read-Implicit and Coarse-Grained Memory Unwindings - (Competition Contribution) , 2015, TACAS.

[5]  Marco Roveri,et al.  Boosting Lazy Abstraction for SystemC with Partial Order Reduction , 2011, TACAS.

[6]  Helmut Veith,et al.  Counterexample-guided abstraction refinement for symbolic model checking , 2003, JACM.

[7]  Jochen Hoenicke,et al.  SMTInterpol: An Interpolating SMT Solver , 2012, SPIN.

[8]  Doron A. Peled,et al.  All from One, One for All: on Model Checking Using Representatives , 1993, CAV.

[9]  Thomas A. Henzinger,et al.  Race checking by context inference , 2004, PLDI '04.

[10]  Daniel Kroening,et al.  Counterexample-guided abstraction refinement for symmetric concurrent programs , 2012, Formal Methods in System Design.

[11]  Parosh Aziz Abdulla,et al.  Optimal dynamic partial order reduction , 2014, POPL.

[12]  Daniel Kroening,et al.  Symmetry-Aware Predicate Abstraction for Shared-Variable Concurrent Programs , 2011, CAV.

[13]  Gerard J. Holzmann,et al.  Software model checking with SPIN , 2005, Adv. Comput..

[14]  Takashi Matsuoka,et al.  Perentie: Modular Trace Refinement and Selective Value Tracking - (Competition Contribution) , 2015, TACAS.

[15]  Chao Wang,et al.  Monotonic Partial Order Reduction: An Optimal Symbolic Partial Order Reduction Technique , 2009, CAV.

[16]  Patrice Godefroid,et al.  Partial-Order Methods for the Verification of Concurrent Systems , 1996, Lecture Notes in Computer Science.

[17]  Patrice Godefroid,et al.  Software Model Checking: The VeriSoft Approach , 2005, Formal Methods Syst. Des..

[18]  Ashutosh Gupta,et al.  Predicate abstraction and refinement for verifying multi-threaded programs , 2011, POPL '11.

[19]  Thomas A. Henzinger,et al.  Thread-Modular Abstraction Refinement , 2003, CAV.

[20]  Antoine Miné,et al.  Static analysis by abstract interpretation of concurrent programs. (Analyse statique par interprétation abstraite de programmes concurrents) , 2013 .

[21]  Sanjit A. Seshia,et al.  A Modular Checker for Multithreaded Programs , 2002, CAV.

[22]  Wieslaw Zielonka,et al.  Notes on Finite Asynchronous Automata , 1987, RAIRO Theor. Informatics Appl..

[23]  Antti Valmari,et al.  Stubborn sets for reduced state space generation , 1991, Applications and Theory of Petri Nets.

[24]  Jochen Hoenicke,et al.  Refinement of Trace Abstraction , 2009, SAS.

[25]  Cormac Flanagan,et al.  Thread-Modular Model Checking , 2003, SPIN.

[26]  S. Rajamani,et al.  A decade of software model checking with SLAM , 2011, Commun. ACM.

[27]  Jochen Hoenicke,et al.  Software Model Checking for People Who Love Automata , 2013, CAV.

[28]  Andreas Podelski,et al.  Thread-Modular Counterexample-Guided Abstraction Refinement , 2010, SAS.

[29]  Joël Ouaknine,et al.  Verifying multi-threaded software with impact , 2013, 2013 Formal Methods in Computer-Aided Design.

[30]  Franck Cassez,et al.  Summary-Based Inter-Procedural Analysis via Modular Trace Refinement , 2014, FSTTCS.

[31]  Ashutosh Gupta,et al.  Threader: A Constraint-Based Verifier for Multi-threaded Programs , 2011, CAV.