Abstract
Current static verification techniques do not provide good support for incrementality, making it difficult for developers to focus on specifying and verifying the properties and components that are most important. Dynamic verification approaches support incrementality, but cannot provide static guarantees. To bridge this gap, prior work proposed gradual verification, which supports incrementality by allowing every assertion to be complete, partial, or omitted, and provides sound verification that smoothly scales from dynamic to static checking. The prior approach to gradual verification, however, was limited to programs without recursive data structures. This paper extends gradual verification to programs that manipulate recursive, mutable data structures on the heap. We address several technical challenges, such as semantically connecting iso- and equi-recursive interpretations of abstract predicates, and supporting gradual verification of heap ownership. This work thus lays the foundation for future tools that work on realistic programs and support verification within an engineering process in which cost-benefit trade-offs can be made.
Supplemental Material
- Johannes Bader, Jonathan Aldrich, and Éric Tanter. 2018. Gradual Program Verification. In International Conference on Verification, Model Checking, and Abstract Interpretation. Springer, 25-46.Google Scholar
- Josh Berdine, Cristiano Calcagno, and Peter W O'hearn. 2005. Smallfoot: Modular automatic assertion checking with separation logic. In International Symposium on Formal Methods for Components and Objects. Springer, 115-137.Google Scholar
- Edsger W. Dijkstra. 1975. Guarded Commands, Nondeterminacy and Formal Derivation of Programs. Commun. ACM 18, 8 (Aug. 1975 ), 453-457. https://doi.org/10.1145/360933.360975 Google Scholar
Digital Library
- Dino Distefano and Matthew J Parkinson J. 2008. jStar: Towards practical verification for Java. ACM Sigplan Notices 43, 10 ( 2008 ), 213-226.Google Scholar
- Carlo Alberto Furia and Bertrand Meyer. 2010. Inferring loop invariants using postconditions. In Fields of logic and computation. Springer, 277-300.Google Scholar
- Ronald Garcia, Alison M. Clark, and Éric Tanter. 2016. Abstracting Gradual Typing. In Proceedings of the 43rd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (St. Petersburg, FL, USA) ( POPL '16). ACM, New York, NY, USA, 429-442. https://doi.org/10.1145/2837614.2837670 Google Scholar
Digital Library
- Ronald Garcia, Éric Tanter, Roger Wolf, and Jonathan Aldrich. 2014. Foundations of Typestate-Oriented Programming. 36, 4, Article 12 (Oct. 2014 ), 12 : 1-12 :44 pages.Google Scholar
- Charles Antony Richard Hoare. 1969. An axiomatic basis for computer programming. Commun. ACM 12, 10 ( 1969 ), 576-580.Google Scholar
- Nico Lehmann and Éric Tanter. 2017. Gradual Refinement Types. In Proceedings of the 44th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL 2017 ). Paris, France, 775-788.Google Scholar
- K Rustan M Leino. 2010. Dafny: An automatic program verifier for functional correctness. In International Conference on Logic for Programming Artificial Intelligence and Reasoning. Springer, 348-370.Google Scholar
Digital Library
- K Rustan M Leino, Peter Müller, and Jan Smans. 2009. Verification of concurrent programs with Chalice. In Foundations of Security Analysis and Design V. Springer, 195-222.Google Scholar
- Paqui Lucio. 2017. A Tutorial on Using Dafny to Construct Verified Software. arXiv preprint arXiv:1701.04481 ( 2017 ).Google Scholar
- Huu Hai Nguyen, Viktor Kuncak, and Wei-Ngan Chin. 2008. Runtime checking for separation logic. In International Workshop on Verification, Model Checking, and Abstract Interpretation. Springer, 203-217.Google Scholar
Cross Ref
- Matthew Parkinson and Gavin Bierman. 2005. Separation logic and abstraction. In ACM SIGPLAN Notices, Vol. 40. ACM, 247-258.Google Scholar
Digital Library
- Guillaume Petiot, Nikolai Kosmatov, Alain Giorgetti, and Jacques Julliand. 2014. StaDy: Deep Integration of Static and Dynamic Analysis in Frama-C. ( 2014 ).Google Scholar
- John C Reynolds. 2002. Separation logic: A logic for shared mutable data structures. In Logic in Computer Science, 2002. Proceedings. 17th Annual IEEE Symposium on. IEEE, 55-74.Google Scholar
Cross Ref
- Ilya Sergey and Dave Clarke. 2012. Gradual Ownership Types. In Proceedings of the 21st European Conference on Programming Languages and Systems (Tallinn, Estonia) ( ESOP'12). Springer-Verlag, Berlin, Heidelberg, 579-599. https://doi.org/10. 1007/978-3-642-28869-2_29 Google Scholar
Digital Library
- Jeremy Siek and Walid Taha. 2007. Gradual typing for objects. In European Conference on Object-Oriented Programming. Springer, 2-27.Google Scholar
Digital Library
- Jeremy G Siek and Walid Taha. 2006. Gradual typing for functional languages. In Scheme and Functional Programming Workshop, Vol. 6. 81-92.Google Scholar
- Jeremy G Siek, Michael M Vitousek, Matteo Cimini, and John Tang Boyland. 2015. Refined criteria for gradual typing. In LIPIcs-Leibniz International Proceedings in Informatics, Vol. 32. Schloss Dagstuhl-Leibniz-Zentrum fuer Informatik.Google Scholar
- Jan Smans, Bart Jacobs, and Frank Piessens. 2009. Implicit dynamic frames: Combining dynamic frames and separation logic. In European Conference on Object-Oriented Programming. Springer, 148-172.Google Scholar
Digital Library
- Alexander J Summers and Sophia Drossopoulou. 2013. A formal semantics for isorecursive and equirecursive state abstractions. In European Conference on Object-Oriented Programming. Springer, 129-153.Google Scholar
Digital Library
- Jenna Wise, Johannes Bader, Cameron Wong, Jonathan Aldrich, Éric Tanter, and Joshua Sunshine. 2020. Gradual Verification of Recursive Heap Data Structures. Zenodo. https://doi.org/10.5281/zenodo.4085932 Google Scholar
Cross Ref
- Roger Wolf, Ronald Garcia, Éric Tanter, and Jonathan Aldrich. 2011. Gradual typestate. In European Conference on ObjectOriented Programming. Springer, 459-483.Google Scholar
Cross Ref
Index Terms
Gradual verification of recursive heap data structures
Recommendations
Implementation of an end-to-end gradual verification system
SPLASH Companion 2021: Companion Proceedings of the 2021 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for HumanityStatic verification is used to ensure the correctness of programs. While useful in critical applications, the high overhead associated with writing specifications limits its general applicability. Similarly, the run-time costs introduced by dynamic ...
Design and implementation of a gradual verifier
SPLASH Companion 2020: Companion Proceedings of the 2020 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for HumanityStatic program verification requires a large number of user-provided specifications, resulting in a significant upfront verification cost. One method for reducing this burden is gradual verification, a novel approach that enables developers to deal with ...
Automated Verification of the FreeRTOS Scheduler in HIP/SLEEK
TASE '12: Proceedings of the 2012 Sixth International Symposium on Theoretical Aspects of Software EngineeringAutomated verification of operating system kernels is a challenging problem, partly due to the use of shared mutable data structures. In this paper, we show how we can automatically verify memory safety and functional correctness of the task scheduler ...






Comments