Abstract
The 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 verifying concurrent programs. An inductive data flow graph accounts for a set of dependencies between program actions in interleaved thread executions, and therefore stands as a representation for the set of concurrent program traces which give rise to these dependencies. The approach first constructs an inductive data flow graph and then checks whether all program traces are represented. The size of the inductive data flow graph is polynomial in the number of data dependencies (in a sense that can be made formal); it does not grow exponentially in the number of threads unless the data dependencies do. The approach shifts the burden of the exponential explosion towards the check whether all program traces are represented, i.e., to a combinatorial problem (over finite graphs).
Supplemental Material
- G. R. Andrews. Concurrent programming - principles and practice. Benjamin/Cummings, 1991. ISBN 978-0--8053-0086--4. Google Scholar
Digital Library
- K. R. Apt, F. S. de Boer, and E. R. Olderog. Verification of Sequential and Concurrent Programs. Springer-Verlag, 2009. ISBN 978--1--84882--744--8. Google Scholar
Digital Library
- J. Berdine, T. Lev-Ami, R. Manevich, G. Ramalingam, and M. Sagiv. Thread quantification for concurrent shape analysis. In CAV, volume 5123 of LNCS, pages 399--413. Springer Berlin / Heidelberg, 2008. Google Scholar
Digital Library
- B. Blanchet, P. Cousot, R. Cousot, J. Feret, L. Mauborgne, A. Miné, D. Monniaux, and X. Rival. A static analyzer for large safety-critical software. In PLDI, pages 196--207, 2003. Google Scholar
Digital Library
- F. Bourdoncle. Abstract interpretation by dynamic partitioning. Journal of Functional Programming, 2 (04): 407--435, 1992.Google Scholar
Cross Ref
- J. Brzozowski and E. Leiss. On equations for regular languages, finite automata, and sequential networks. Theoretical Computer Science, 10 (1): 19 -- 35, 1980.Google Scholar
Cross Ref
- A. K. Chandra, D. C. Kozen, and L. J. Stockmeyer. Alternation. J. ACM, 28 (1): 114--133, Jan. 1981. Google Scholar
Digital Library
- E. M. Clarke and E. A. Emerson. Design and synthesis of synchronization skeletons using branching-time temporal logic. In Logic of Programs, pages 52--71, 1981. Google Scholar
Digital Library
- P. Cousot and R. Cousot. Abstract interpretation: A unified lattice model for static analysis of programs by construction or approximation of fixpoints. In POPL, pages 238--252, 1977. Google Scholar
Digital Library
- R. Cousot. Fondements des méthodes de preuve d'invariance et de fatalité de programmes parallèles. les-Nancy, 1985.Google Scholar
- A. F. Donaldson, A. Kaiser, D. Kroening, and T. Wahl. Symmetry-aware predicate abstraction for shared-variable concurrent programs. In CAV, pages 356--371, 2011. Google Scholar
Digital Library
- K. Drager, A. Kupriyanov, B. Finkbeiner, and H. Wehrheim. Slab: a certifying model checker for infinite-state concurrent systems. In TACAS, pages 271--274, 2010. Google Scholar
Digital Library
- A. Farzan and Z. Kincaid. Verification of parameterized concurrent programs by modular reasoning about data and control. In POPL, pages 297--308, 2012. Google Scholar
Digital Library
- J. Ferrante, K. J. Ottenstein, and J. D. Warren. The program dependence graph and its use in optimization. ACM Trans. Program. Lang. Syst., 9 (3): 319--349, 1987. Google Scholar
Digital Library
- C. Flanagan and S. Qadeer. Thread-modular model checking. In SPIN, pages 213--224, 2003. Google Scholar
Digital Library
- A. Griggio. A Practical Approach to Satisfiability Modulo Linear Integer Arithmetic. JSAT, 8: 1--27, January 2012.Google Scholar
- A. Gupta, C. Popeea, and A. Rybalchenko. Predicate abstraction and refinement for verifying multi-threaded programs. In POPL, pages 331--344, 2011. Google Scholar
Digital Library
- M. Heizmann, J. Hoenicke, and A. Podelski. Refinement of trace abstraction. In SAS, pages 69--85, 2009. Google Scholar
Digital Library
- M. Heizmann, J. Hoenicke, and A. Podelski. Nested interpolants. In POPL, pages 471--482, 2010. Google Scholar
Digital Library
- T. A. Henzinger, R. Jhala, R. Majumdar, and S. Qadeer. Thread-modular abstraction refinement. In CAV, pages 262--274, 2003.Google Scholar
- R. Johnson and K. Pingali. Dependence-based program analysis. In PLDI, pages 78--89, 1993. Google Scholar
Digital Library
- V. Kahlon, S. Sankaranarayanan, and A. Gupta. Semantic reduction of thread interleavings in concurrent programs. In TACAS, pages 124--138, 2009. Google Scholar
Digital Library
- D. J. Kuck, R. H. Kuhn, D. A. Padua, B. Leasure, and M. Wolfe. Dependence graphs and compiler optimizations. In POPL, pages 207--218, 1981. Google Scholar
Digital Library
- L. Lamport. A new solution of Dijkstra's concurrent programming problem. Commun. ACM, 17 (8): 453--455, 1974. Google Scholar
Digital Library
- A. Malkis. Cartesian abstraction and verification of multithreaded programs. PhD thesis, University of Freiburg, 2010.Google Scholar
- L. Mauborgne and X. Rival. Trace partitioning in abstract interpretation based static analyzers. In ESOP, page 5--20, 2005. Google Scholar
Digital Library
- A. Miné. Static analysis of run-time errors in embedded critical parallel C programs. In ESOP, pages 398--418, 2011. Google Scholar
Digital Library
- H. Oh, K. Heo, W. Lee, W. Lee, and K. Yi. Design and implementation of sparse global analyses for C-like languages. In PLDI, pages 229--238, 2012. Google Scholar
Digital Library
- S. Owicki and D. Gries. Verifying properties of parallel programs: an axiomatic approach. Commun. ACM, 19: 279--285, May 1976. Google Scholar
Digital Library
- A. Venet. Abstract cofibered domains: application to the alias analysis of untyped programs. In SAS, pages 366--382, 1996. Google Scholar
Digital Library
- D. Weise, R. F. Crew, M. Ernst, and B. Steensgaard. Value dependence graphs: representation without taxation. In POPL, pages 297--310, 1994. Google Scholar
Digital Library
Index Terms
Inductive data flow graphs
Recommendations
Inductive data flow graphs
POPL '13: Proceedings of the 40th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languagesThe 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 ...
Sequential verification of serializability
POPL '10Serializability is a commonly used correctness condition in concurrent programming. When a concurrent module is serializable, certain other properties of the module can be verified by considering only its sequential executions. In many cases, concurrent ...
An integrated specification and verification technique for highly concurrent data structures
AbstractWe present a technique for automatically verifying safety properties of concurrent programs, in particular programs that rely on subtle dependencies of local states of different threads, such as lock-free ...







Comments