skip to main content
10.1145/2254064.2254112acmconferencesArticle/Chapter ViewAbstractPublication PagespldiConference Proceedingsconference-collections
research-article

Synthesizing software verifiers from proof rules

Published:11 June 2012Publication History

ABSTRACT

Automatically generated tools can significantly improve programmer productivity. For example, parsers and dataflow analyzers can be automatically generated from declarative specifications in the form of grammars, which tremendously simplifies the task of implementing a compiler. In this paper, we present a method for the automatic synthesis of software verification tools. Our synthesis procedure takes as input a description of the employed proof rule, e.g., program safety checking via inductive invariants, and produces a tool that automatically discovers the auxiliary assertions required by the proof rule, e.g., inductive loop invariants and procedure summaries. We rely on a (standard) representation of proof rules using recursive equations over the auxiliary assertions. The discovery of auxiliary assertions, i.e., solving the equations, is based on an iterative process that extrapolates solutions obtained for finitary unrollings of equations. We show how our method synthesizes automatic safety and liveness verifiers for programs with procedures, multi-threaded programs, and functional programs. Our experimental comparison of the resulting verifiers with existing state-of-the-art verification tools confirms the practicality of the approach.

References

  1. A. V. Aho, M. S. Lam, R. Sethi, and J. D. Ullman. Compilers: Principles, Techniques, and Tools. Pearson, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  2. A. Aiken. Introduction to set constraint-based program analysis. Sci. Comput. Program., 35 (2), 1999. Google ScholarGoogle ScholarDigital LibraryDigital Library
  3. A. Aiken, M. Fähndrich, J. S. Foster, and Z. Su. A toolkit for constructing type- and constraint-based program analyses. In Types in Compilation, 1998. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. T. Ball and S. K. Rajamani. The SLAM project: debugging system software via static analysis. In POPL, 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. T. Ball, A. Podelski, and S. K. Rajamani. Boolean and cartesian abstraction for model checking C programs. In TACAS, 2001. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. D. Beyer. Competition on software verification - (SV-COMP). In TACAS, 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. D. Beyer and M. E. Keremoglu. CPAchecker: A tool for configurable software verification. In CAV, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  8. A. R. Bradley, Z. Manna, and H. B. Sipma. Linear ranking with reachability. In CAV, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. R. Bruttomesso, A. Cimatti, A. Franzén, A. Griggio, and R. Sebastiani. The MathSAT 4SMT solver. In CAV, 2008. Google ScholarGoogle ScholarDigital LibraryDigital Library
  10. E. M. Clarke, O. Grumberg, S. Jha, Y. Lu, and H. Veith. Counterexample-guided abstraction refinement. In CAV, 2000. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. B. Cook, A. Podelski, and A. Rybalchenko. Termination proofs for systems code. In PLDI, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. B. Cook, A. Podelski, and A. Rybalchenko. Summarization for termination: no return! Formal Methods in System Design, 35 (3), 2009. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. C. Flanagan and S. Qadeer. Thread-modular model checking. In SPIN, 2003. Google ScholarGoogle ScholarDigital LibraryDigital Library
  14. T. Freeman and F. Pfenning. Refinement types for ML. In PLDI, 1991. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. S. Graf and H. Saïdi. Construction of abstract state graphs with PVS. In CAV, 1997. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. S. Grebenshchikov, A. Gupta, N. P. Lopes, C. Popeea, and A. Rybalchenko. HSF(C): A software verifier based on Horn clauses - (competition contribution). In TACAS, 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  17. A. Gupta, C. Popeea, and A. Rybalchenko. Solving recursion-free horn clauses over LIUIF. In APLAS, 2011 Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. A. Gupta, C. Popeea, and A. Rybalchenko. Threader: A constraint-based verifier for multi-threaded programs. In CAV, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. A. Gupta, C. Popeea, and A. Rybalchenko. Predicate abstraction and refinement for verifying multi-threaded programs. In POPL, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. T. A. Henzinger, R. Jhala, R. Majumdar, and G. Sutre. Lazy abstraction. In POPL, 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. T. A. Henzinger, R. Jhala, R. Majumdar, and K. L. McMillan. Abstractions from proofs. In POPL, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. K. Hoder, N. Bjørner, and L. de Moura. μZ- an efficient engine for fixed points with constraints. In CAV, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. F. Ivancic, Z. Yang, M. K. Ganai, A. Gupta, I. Shlyakhter, and P. Ashar. F-Soft: Software verification platform. In CAV, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. R. Jhala, R. Majumdar, and A. Rybalchenko. HMC: Verifying functional programs using abstract interpreters. In CAV, 2011. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. C. B. Jones. Tentative steps toward a development method for interfering programs. ACM Trans. Program. Lang. Syst., 5 (4), 1983. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. K. W. Knowles and C. Flanagan. Type reconstruction for general refinement types. In ESOP, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. J. Kodumal and A. Aiken. Banshee: A scalable constraint-based analysis toolkit. In SAS, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. M. S. Lam, J. Whaley, V. B. Livshits, M. C. Martin, D. Avots, M. Carbin, and C. Unkel. Context-sensitive program analysis as database queries. In PODS, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  29. S. Lerner, T. D. Millstein, E. Rice, and C. Chambers. Automated soundness proofs for dataflow analyses and transformations via local rules. In POPL, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. Z. Manna and A. Pnueli. Temporal verification of reactive systems: safety. 1995. Google ScholarGoogle ScholarCross RefCross Ref
  31. F. Martin. PAG -- An efficient program analyzer generator. STTT, 2 (1), 1998.Google ScholarGoogle Scholar
  32. K. L. McMillan. An interpolating theorem prover. TCS, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  33. K. L. McMillan. Lazy abstraction with interpolants. In CAV, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. M. Naik, A. Aiken, and J. Whaley. Effective static race detection for Java. In PLDI, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  35. G. C. Necula, S. McPeak, S. P. Rahul, and W. Weimer. CIL: Intermediate language and tools for analysis and transformation of C programs. In CC, 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. S. S. Owicki and D. Gries. An axiomatic proof technique for parallel programs I. Acta Inf., 6, 1976.Google ScholarGoogle Scholar
  37. A. Podelski and A. Rybalchenko. Transition invariants. In LICS, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library
  38. A. Podelski and A. Rybalchenko. A complete method for the synthesis of linear ranking functions. In VMCAI, 2004.Google ScholarGoogle ScholarCross RefCross Ref
  39. C. Popeea and A. Rybalchenko. Compositional termination proofs for multi-threaded programs. In TACAS, 2012. Google ScholarGoogle ScholarDigital LibraryDigital Library
  40. W. H. Press, B. P. Flannery, S. A. Teukolsky, and W. T. Vetterling. Numerical Recipes in C: The Art of Scientific Computing. 1992. Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. Y. S. Ramakrishna, C. R. Ramakrishnan, I. V. Ramakrishnan, S. A. Smolka, T. Swift, and D. S. Warren. Efficient model checking using tabled resolution. In CAV, 1997. Google ScholarGoogle ScholarDigital LibraryDigital Library
  42. T. W. Reps, S. Horwitz, and S. Sagiv. Precise interprocedural dataflow analysis via graph reachability. In POPL, 1995. Google ScholarGoogle ScholarDigital LibraryDigital Library
  43. P. M. Rondon, M. Kawaguchi, and R. Jhala. Liquid types. In PLDI, 2008. Google ScholarGoogle ScholarDigital LibraryDigital Library
  44. G. Rosu and A. Stefanescu. Matching logic: a new program verification approach. In ICSE, 2011.Google ScholarGoogle ScholarDigital LibraryDigital Library
  45. T. Rus, E. V. Wyk, and T. Halverson. Generating model checkers from algebraic specifications. Formal Methods in System Design, 20 (3), 2002. Google ScholarGoogle ScholarDigital LibraryDigital Library
  46. A. Rybalchenko and V. Sofronie-Stokkermans. Constraint solving for interpolation. In VMCAI, 2007. Google ScholarGoogle ScholarDigital LibraryDigital Library
  47. M. Sagiv. High Level Formalisms for Program Flow Analysis and their use in Compiling. PhD thesis, Technion, 1991.Google ScholarGoogle Scholar
  48. T. Terauchi. Dependent types from counterexamples. In POPL, 2010. Google ScholarGoogle ScholarDigital LibraryDigital Library
  49. S. L. Torre, P. Madhusudan, and G. Parlato. Analyzing recursive programs using a fixed-point calculus. In PLDI, 2009. Google ScholarGoogle ScholarDigital LibraryDigital Library
  50. H. Unno and N. Kobayashi. Dependent type inference with interpolants. In PPDP, 2009. Google ScholarGoogle ScholarDigital LibraryDigital Library
  51. J. Whaley and M. S. Lam. Cloning-based context-sensitive pointer alias analysis using binary decision diagrams. In PLDI, 2004. Google ScholarGoogle ScholarDigital LibraryDigital Library

Index Terms

  1. Synthesizing software verifiers from proof rules

              Recommendations

              Comments

              Login options

              Check if you have access through your login credentials or your institution to get full access on this article.

              Sign in
              • Published in

                cover image ACM Conferences
                PLDI '12: Proceedings of the 33rd ACM SIGPLAN Conference on Programming Language Design and Implementation
                June 2012
                572 pages
                ISBN:9781450312059
                DOI:10.1145/2254064
                • cover image ACM SIGPLAN Notices
                  ACM SIGPLAN Notices  Volume 47, Issue 6
                  PLDI '12
                  June 2012
                  534 pages
                  ISSN:0362-1340
                  EISSN:1558-1160
                  DOI:10.1145/2345156
                  Issue’s Table of Contents

                Copyright © 2012 ACM

                Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

                Publisher

                Association for Computing Machinery

                New York, NY, United States

                Publication History

                • Published: 11 June 2012

                Permissions

                Request permissions about this article.

                Request Permissions

                Check for updates

                Qualifiers

                • research-article

                Acceptance Rates

                PLDI '12 Paper Acceptance Rate48of255submissions,19%Overall Acceptance Rate406of2,067submissions,20%

                Upcoming Conference

                PLDI '24

              PDF Format

              View or Download as a PDF file.

              PDF

              eReader

              View online with eReader.

              eReader