Abstract
In this paper, we present a new approach to automatically verify multi-threaded programs which are executed by an unbounded number of threads running in parallel.
The starting point for our work is the problem of how we can leverage existing automated verification technology for sequential programs (abstract interpretation, Craig interpolation, constraint solving, etc.) for multi-threaded programs. Suppose that we are given a correctness proof for a trace of a program (or for some other program fragment). We observe that the proof can always be decomposed into a finite set of Hoare triples, and we ask what can be proved from the finite set of Hoare triples using only simple combinatorial inference rules (without access to a theorem prover and without the possibility to infer genuinely new Hoare triples)?
We introduce a proof system where one proves the correctness of a multi-threaded program by showing that for each trace of the program, there exists a correctness proof in the space of proofs that are derivable from a finite set of axioms using simple combinatorial inference rules. This proof system is complete with respect to the classical proof method of establishing an inductive invariant (which uses thread quantification and control predicates). Moreover, it is possible to algorithmically check whether a given set of axioms is sufficient to prove the correctness of a multi-threaded program, using ideas from well-structured transition systems.
Supplemental Material
- Parosh A. Abdulla, Yu-Feng Chen, Giorgio Delzanno, Frédéric Haziza, Chih-Duo Hong, and Ahmed Rezine. Constrained monotonic abstraction: a CEGAR for parameterized verification. In CONCUR, pages 86--101, 2010. Google ScholarDigital Library
- Parosh A. Abdulla, Karlisv Cerans, Bengt Jonsson, and Yih-Kuen Tsay. General decidability theorems for infinite-state systems. In LICS, pages 313--321, 1996. Google ScholarDigital Library
- Francesco Alberti, Roberto Bruttomesso, Silvio Ghilardi, Silvio Ranise, and Natasha Sharygina. Lazy abstraction with interpolants for arrays. In LPAR, pages 46--61, 2012. Google ScholarDigital Library
- Edward A. Ashcroft. Proving assertions about parallel programs. J. Comput. Syst. Sci., 10(1):110--135, February 1975. Google ScholarDigital Library
- Josh Berdine, Tal Lev-Ami, Roman Manevich, G. Ramalingam, and Shmuel Sagiv. Thread quantification for concurrent shape analysis. In CAV, pages 399--413, 2008. Google ScholarDigital Library
- Dirk Beyer, Thomas A. Henzinger, Rupak Majumdar, and Andrey Rybalchenko. Path invariants. In PLDI, pages 300--309, 2007. Google ScholarDigital Library
- Ahmed Bouajjani, Bengt Jonsson, Marcus Nilsson, and Tayssir Touili. Regular model checking. In CAV, pages 403--418, 2000. Google ScholarDigital Library
- Janusz A. Brzozowski and Ernst L. Leiss. On equations for regular languages, finite automata, and sequential networks. Theoretical Computer Science, 10(1):19--35, 1980.Google ScholarCross Ref
- Ashok K. Chandra, Dexter C. Kozen, and Larry J. Stockmeyer. Alternation. J. ACM, 28(1):114--133, January 1981. Google ScholarDigital Library
- Jürgen Christ and Jochen Hoenicke. Extending proof tree preserving interpolation to sequences and trees. In Workshop on SMT Solving, 2013.Google Scholar
- Stéphane Demri and Ranko Lazić. LTL with the freeze quantifier and register automata. ACM Trans. Comput. Logic, 10(3):16:1--16:30, April 2009. Google ScholarDigital Library
- Alastair F. Donaldson, Alexander Kaiser, Daniel Kroening, Michael Tautschnig, and Thomas Wahl. Counterexample-guided abstraction refinement for symmetric concurrent programs. Formal Methods in System Design, 41(1):25--44, 2012. Google ScholarDigital Library
- Azadeh Farzan and Zachary Kincaid. Verification of parameterized concurrent programs by modular reasoning about data and control. In POPL, pages 297--308, 2012. Google ScholarDigital Library
- Azadeh Farzan, Zachary Kincaid, and Andreas Podelski. Inductive data flow graphs. In POPL, pages 129--142, 2013. Google ScholarDigital Library
- Azadeh Farzan, Zachary Kincaid, and Andreas Podelski. Proofs that count. In POPL, pages 151--164, 2014. Google ScholarDigital Library
- Diego Figueira. Alternating register automata on finite words and trees. Logical Methods in Computer Science, 8(1), 2012.Google Scholar
- Alain Finkel. A generalization of the procedure of Karp and Miller to well structured transition systems. In ICALP, pages 499--508, 1987. Google ScholarDigital Library
- Alain Finkel and Philippe Schnoebelen. Well-structured transition systems everywhere! Theoretical Computer Science, 256(1):63--92, 2001. Google ScholarDigital Library
- Cormac Flanagan, Stephen N. Freund, and Shaz Qadeer. Thread-modular verification for shared-memory programs. In ESOP, pages 262--277, 2002. Google ScholarDigital Library
- Silvio. Ghilardi, Enrica Nicolini, Silvio Ranise, and Daniele Zucchelli. Towards SMT model checking of array-based systems. In IJCAR, pages 67--82, 2008. Google ScholarDigital Library
- Matthias Heizmann, Jochen Hoenicke, and Andreas Podelski. Refinement of trace abstraction. In SAS, pages 69--85, 2009. Google ScholarDigital Library
- Thomas A. Henzinger, Ranjit Jhala, Rupak Majumdar, and Kenneth L. McMillan. Abstractions from proofs. In POPL, pages 232--244, 2004. Google ScholarDigital Library
- Joxan Jaffar and Andrew E. Santosa. Recursive abstractions for parameterized systems. In FM, pages 72--88, 2009. Google ScholarDigital Library
- Alexander Kaiser, Daniel Kroening, and Thomas Wahl. Dynamic cutoff detection in parameterized concurrent programs. In CAV, pages 645--659, 2010. Google ScholarDigital Library
- Alexander Kaiser, Daniel Kroening, and Thomas Wahl. Lost in abstraction: Monotonicity in multi-threaded programs. In CONCUR, pages 141--155, 2014.Google ScholarCross Ref
- Michael Kaminski and Nissim Francez. Finite-memory automata. Theor. Comput. Sci., 134(2):329--363, November 1994. Google ScholarDigital Library
- Salvatore La Torre, Parthasarathy Madhusudan, and Gennaro Parlato. Model-checking parameterized concurrent programs using linear interfaces. In CAV, pages 629--644, 2010. Google ScholarDigital Library
- Shuvendu K. Lahiri and Randal E. Bryant. Predicate abstraction with indexed predicates. ACM Trans. Comput. Logic, 9(1), December 2007. Google ScholarDigital Library
- Alexander Malkis. Cartesian abstraction and verification of multithreaded programs. PhD thesis, University of Freiburg, 2010.Google Scholar
- Roland Meyer. On boundedness in depth in the pi-calculus. In IFIP TCS, pages 477--489, 2008.Google Scholar
- Kedar S. Namjoshi. Symmetry and completeness in the analysis of parameterized systems. In VMCAI, pages 299--313, 2007. Google ScholarDigital Library
- Frank Neven, Thomas Schwentick, and Victor Vianu. Finite state machines for strings over infinite alphabets. ACM Trans. Comput. Logic, 5(3):403--435, July 2004. Google ScholarDigital Library
- Amir Pnueli, Sitvanit Ruah, and Lenore D. Zuck. Automatic deductive verification with invisible invariants. In TACAS, pages 82--97, 2001. Google ScholarDigital Library
- Thomas W. Reps, Susan Horwitz, and Shmuel Sagiv. Precise interprocedural dataflow analysis via graph reachability. In POPL, pages 49--61, 1995. Google ScholarDigital Library
- Willem-Paul de Roever. Concurrency verification: introduction to compositional and noncompositional methods. Cambridge University press, Cambridge, 2001. Google ScholarDigital Library
- Alejandro Sanchez, Sriram Sankaranarayanan, César Sánchez, and Bor-Yuh Evan Chang. Invariant generation for parametrized systems using self-reflection. In SAS, pages 146--163. Springer, 2012. Google ScholarDigital Library
- Michal Segalov, Tal Lev-Ami, Roman Manevich, Ramalingam Ganesan, and Mooly Sagiv. Abstract transformers for thread correlation analysis. In APLAS, pages 30--46, 2009. Google ScholarDigital Library
- Nishant Sinha and Chao Wang. On interference abstractions. In POPL, pages 423--434, 2011. Google ScholarDigital Library
- Thomas Wies, Damien Zufferey, and Thomas A. Henzinger. Forward analysis of depth-bounded processes. In FOSSACS, pages 94--108, 2010. Google ScholarDigital Library
Index Terms
- Proof Spaces for Unbounded Parallelism
Recommendations
Reducing liveness to safety in first-order logic
We develop a new technique for verifying temporal properties of infinite-state (distributed) systems. The main idea is to reduce the temporal verification problem to the problem of verifying the safety of infinite-state systems expressed in first-order ...
Proving Liveness of Parameterized Programs
LICS '16: Proceedings of the 31st Annual ACM/IEEE Symposium on Logic in Computer ScienceCorrectness of multi-threaded programs typically requires that they satisfy liveness properties. For example, a program may require that no thread is starved of a shared resource, or that all threads eventually agree on a single value. This paper ...
Inductive data flow graphs
POPL '13The correctness of a sequential program can be shown by the annotation of its control flow graph with inductive assertions. We propose inductive data flow graphs, data flow graphs with incorporated inductive assertions, as the basis of an approach to ...
Comments