Abstract
A central objective of the verifying compiler grand challenge is to develop a push-button verifier that generates proofs of correctness in a syntax-driven fashion similar to the way an ordinary compiler generates machine code. The software developer’s role is then to provide suitable specifications and annotated code, but otherwise to have no direct involvement in the verification step. However, the general mathematical developments and results upon which software correctness is based may be established through a separate formal proof process in which proofs might be mechanically checked, but not necessarily automatically generated. While many ideas that could conceivably form the basis for software verification have been known “in principle” for decades, and several tools to support an aspect of verification have been devised, practical fully automated verification of full software behavior remains a grand challenge. This paper explains how RESOLVE takes a step towards addressing this challenge by integrating foundational and practical elements of software engineering, programming languages, and mathematical logic into a coherent framework. Current versions of the RESOLVE verifier generate verification conditions (VCs) for the correctness of component-based software in a modular fashion—one component at a time. The VCs are currently verified using automated capabilities of the Isabelle proof assistant, the SMT solver Z3, a minimalist rewrite prover, and some specialized decision procedures. Initial experiments with the tools and further analytic considerations show both the progress that has been made and the challenges that remain.
Similar content being viewed by others
References
Aichernig BK, Larson PG (1997) A proof obligation generator for VDM-SL, In: Proc. FME 4, LNCS 1313. Springer, New York
Alkassar E, Hillebrand M, Leinenbach D, Schirmer NW, Starostin A (2008) The Verisoft approach to system verification. In: Proc. VSTTE 2008. Springer, New York
Barnes J (2002) High-integrity Ada: the Spark approach. Addison-Wesley, USA
Barnett M, Chang BYE et al (2006) Boogie: a modular reusable verifier for object-oriented programs. In: de Boer FS, Bonsangue MM, de Roever W-P (eds) Proc. FMCO 4, LNCS 4111. Springer, pp 364–387
Barnett M, Leino KR, Schulte W (2004) The Spec# programming system: an overview. In: Burdy L, Huisman M (eds) Construction and analysis of safe, secure and interoperable smart devices international workshop, LNCS 3362. Springer, pp 49–69
Barrett C, Tinelli C (2007) CVC3. In: Damm W, Hermanns H (eds) Proc. CAV 19, LNCS 4590. Springer, pp 298–302
Bradley A, Manna Z (2007) The calculus of computation: decision procedures with applications to verification. Springer, New York
Burdy L, Cheon Y, Cok D, Ernst M, Kiniry J, Leavens GT, Leino KRM, Poll E (2005) An overview of JML tools and applications. STTT 7(3): 212–232
Cok D (2008) Adapting JML to generic types and Java 1.6. In: Proc. SAVCBS, pp 27–35. http://www.eecs.ucf.edu/SAVCBS/2008/SAVCBS08-proceedings.pdf
The Coq proof assistant reference manual version v8.1. ftp://ftp.inria.fr/INRIA/coq/current/doc/Reference-Manual.pdf
Darvas Á, Müller P (2006) Reasoning about method calls in interface specifications. J Object Technol (JOT) 5(5): 50–85
de Moura L, Bjørner N (2008) Z3: An efficient SMT solver. In: Proc. TACAS, pp 337–340
Detlefs DL, Leino KRM, Nelson G, Saxe JB (1998) Extended static checking. Research Report 159, Compaq Systems Research Center
Detlefs D, Nelson G, Saxe JB (2005) Simplify: a theorem prover for program checking. JACM 52(2):365–473
Ernst GW, Hookway RJ, Ogden WF (1994) Modular verification of data abstractions with shared realizations. IEEE TSE 20(4): 288–307
Ferro A, Omodeo EG, Schwartz JT (1980) Decision procedures for elementary sublanguages of set theory. I. Multi-level syllogistic and some extensions. Commun Pure Appl Math 33: 599–608
Filliâtre J, Marché C (2007) The Why/Krakatoa/Caduceus platform for deductive program verification. In: Damm W, Hermanns H (eds) Proc. CAV 19, LNCS 4590. Springer, New York
Friedman HM (2009) Deciding statements about strings with applications to program verification. OSU-CISRC-8/09-TR42, Department of Computer Science and Engineering, The Ohio State University
Ghilardi S, Nicolini E, Ranise S, Zucchelli D (2007) Decision procedures for extensions of the theory of arrays. Ann Math Artif Intell 50(3–4): 231–254
Harrison J (2008) Formal proof—theory and practice. Notices of the AMS 55: 1395–1406
Harms DE, Weide BW (1991) Copying and swapping: influences on the design of reusable software components. IEEE TSE 17(5): 424–435
Harton HK, Sitaraman M, Krone J (2008) Formal program verification. In: Wah B (eds) Wiley Encyclopedia of Computer Science and Engineering.. Wiley, London
Heym W (1995) Computer program verification: improvements for human reasoning. Ph.D. thesis, The Ohio State University
Hoare CAR (1972) Proof of correctness of data representations. Acta Inform 1: 271–281
Hoare CAR (2003) The verifying compiler: a grand challenge for computing research. JACM 50: 63–69
Hoare CAR, Misra J, Leavens GT, Shankar N (2007) The verified software initiative: a manifesto, http://qpq.csl.sri.com/vsr/manifesto.pdf/vie.. Accessed December 2008
Hollingsworth JE, Blankenship L, Weide BW (2000) Experience report: using RESOLVE/C++ for commercial software. In: Schneir B (ed) Proc. FSE. ACM, pp 11–19
Jackson D (2006) Software abstractions: logic, language, and analysis. MIT Press, Cambridge
Jones CB (2003) The early search for tractable ways of reasoning about programs. IEEE Ann Hist Comput 25(2): 26–49
Karabotsos G, Chalin P, James PR, Giannas L (2008) Total correctness of recursive functions using JML4 FSPV. In: Proc. SAVCBS, pp 19–27. http://www.eecs.ucf.edu/SAVCBS/2008/SAVCBS08-proceedings.pdf
King JC (1970) A Program Verifier. Ph.D. dissertation, Carnegie Tech, 261 pp
Kirschenbaum J, Harton HK, Sitaraman M (2008) A case study in automated verification. In: Shankar N (ed) Proc. CAV AFM Workshop
Kirschenbaum J, Adcock B, Bronish D, Smith H, Harton H, Sitaraman M, Weide BW (2009) Verifying component-based software: deep mathematics or simple bookkeeping? In: Edwards SH, Kulczycki G (eds) Proc. ICSR 11, LNCS 5791. Springer, pp 31–40
Krone J (1988) The role of verification in software reusability. Ph.D. Thesis, The Ohio State University
Kulczycki G, Sitaraman M, Yasmin N, Roche K (2008) Formal specification. In: Wah B (eds) Wiley Encyclopedia of Computer Science and Engineering.. Wiley, London
Kulczycki G (2004) Direct reasoning, Ph.D. Dissertation, Clemson University
Kulczycki G, Sitaraman M, Weide BW, Rountev A (2006) A specification-based approach to reasoning about pointers. ACM SIGSOFT Softw Eng Notes 31: 55–62
Leavens GT, Baker AL, Ruby C (2006) Preliminary design of JML: a behavioral interface specification language for Java. ACM Softw Eng Notes 31: 1–38
Leavens GT, Abrial J-R, Batory D, Butler M, Coglio A, Fisler K, Hehner E, Jones C, Miller D, Peyton-Jones S, Sitaraman M, Smith DR, Stump A (2006) Roadmap for enhanced languages and methods to aid verification. In: Proc. GPCE 5. ACM Press, New York, pp 221–236
Leavens GT, Leino KRM, Müller P (2008) Specification and verification challenges for sequential object-oriented programs. Formal Aspects Comput 19(2): 159–189
Leinenbach D, Paul W, Petrova E (2005) Towards the formal verification of a C0 compiler: code generation and implementation correctness. SEFM 3: 2–11
Leino KRM, Müller P, Wallenburg A (2008) Flexible immutability with frozen objects. In: Shankar N (ed) Proc. VSTTE 2008, LNCS 5295. Springer, New York, pp 192–208
Leino KRM, Müller P (2008) Using the Spec# language, methodology, and tools to write bug-free programs. LASER 2007/2008 Lecture Notes, Springer, New York
Leino KRM (2010) Dafny: An automated program verifier for functional correctness. In: Proc. LPAR 16 (in press)
Meyer B (1992) Applying design by contract. Computer 25: 40–51
Müller P, Poetzsch-Heffter A (2000) Modular specification and verification techniques for object-oriented software components. In: Leavens GT, Sitaraman M (eds) Foundations of component-based systems.. Cambridge University Press, London
Nipkow T, Paulson LC, Wenzel M (2002) Isabelle/HOL: a proof assistant for higher-order logic. LNCS 2283. Springer, New York
Owre S, Rajan SP, Rushby JM, Shankar N, Srivas M (1996) PVS: combining specification, proof checking, and model checking. In: Alur R, Henzinger TA (eds) Proc. CAV, LNCS 1102. Springer, Berlin, pp 411–414
Riazanov A, Voronkov A (2002) The design and implementation of VAMPIRE.. AI Commun 15: 91–110
Schulz S (2004) System abstract: E 0.81. In: Proc. 2nd IJCAR. LNAI 3097. Springer, Berlin, pp 223–228
Sitaraman M, Weide BW (1994) Component-based software using RESOLVE. ACM SIGSOFT Softw Eng Notes 19: 21–67
Sitaraman M, Weide BW, Ogden WF (1997) On the practical need for abstraction relations to verify abstract data type representations. IEEE TSE 23(3): 157–170
Sitaraman M, Atkinson S, Kulczycki G, Weide B, Long T, Bucci P, Pike S, Heym W, Hollingsworth J (2000) Reasoning about software-component behavior. In: Proc. ICSR 6, LCNS 1844. Springer, Berlin, pp 266–283
Smith H, Roche K, Sitaraman M, Krone J, Ogden WF (2008) Integrating math units and proof checking for specification and verification. In: Proc. SAVCBS, pp 59–66. http://www.eecs.ucf.edu/SAVCBS/2008/SAVCBS08-proceedings.pdf
Smith H, Harton H, Frazier D, Mohan R, Sitaraman M (2009) Generating verified Java components through RESOLVE. In: Edwards SH, Kulczycki G (eds) Proc. ICSR 11, LNCS 5791. Springer, Berlin, pp 11–20
Weide BW, Sitaraman M, Harton HK , Adcock B, Bucci P, Bronish D, Heym WD, Kirschenbaum J, Frazier D (2008) Incremental benchmarks for software verification tools and techniques. In: Shankar N (ed) Proc. VSTTE 2008, LNCS 5295. Springer, Berlin, pp 84–98
Weide BW, Heym W (2001) Specification and verification with references. In: Proc. SAVCBS, pp 50–59
Weide BW, Edwards SH, Harms DE, Lamb DA (1994) Design and specification of iterators using the swapping paradigm. IEEE TSE 20(8): 631–643
Wing JM (1990) A specifier’s introduction to formal methods. IEEE Comput 23(9): 8–24
Zee K, Kuncak V, Rinard M C (2008) Full functional verification of linked data structures. In: Proc. PLDI. ACM Press, New York, pp 349–361
Zee K, Kuncak V, Rinard MC (2009) An integrated proof language for imperative programs. In: Proc. PLDI. ACM Press, New York, pp 338–351
Author information
Authors and Affiliations
Corresponding author
Additional information
T. Margaria, D. Kröning and J. Woodcock
Rights and permissions
About this article
Cite this article
Sitaraman, M., Adcock, B., Avigad, J. et al. Building a push-button RESOLVE verifier: Progress and challenges. Form Asp Comp 23, 607–626 (2011). https://doi.org/10.1007/s00165-010-0154-3
Received:
Revised:
Accepted:
Published:
Issue Date:
DOI: https://doi.org/10.1007/s00165-010-0154-3