ABSTRACT
Static 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 verification limit its practicality. Gradual verification validates partially specified code statically where possible and dynamically where necessary. As a result, software developers gain granular control over the trade-offs between static and dynamic verification. This paper contains an end-to-end presentation of gradual verification in action, with a focus on applying it to C0 (a safe subset of C) and implementing the required dynamic verification.
- Rob Arnold. 2010. C0, an imperative programming language for novice computer scientists. Ph.D. Dissertation. Master’s thesis, Department of Computer Science, Carnegie Mellon University.Google Scholar
- Vytautas Astrauskas, Peter Müller, Federico Poli, and Alexander J Summers. 2019. Leveraging Rust types for modular specification and verification. Proceedings of the ACM on Programming Languages, 3, OOPSLA (2019), 1–30. https://doi.org/10.1145/3360573 Google ScholarDigital Library
- J. Bader, J. Aldrich, and É. Tanter. 2018. Gradual Program Verification. In VMCAI. https://doi.org/10.1007/978-3-319-73721-8_2 Google ScholarCross Ref
- Marco Eilers and Peter Müller. 2018. Nagini: a static verifier for Python. In International Conference on Computer Aided Verification. 596–603. https://doi.org/10.1007/978-3-319-96145-3_33 Google ScholarCross Ref
- 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 (POPL ’16). ACM, New York, NY, USA. 429–442. isbn:978-1-4503-3549-2 https://doi.org/10.1145/2837614.2837670 Google ScholarDigital Library
- Peter Müller, Malte Schwerhoff, and Alexander J Summers. 2016. Viper: A verification infrastructure for permission-based reasoning. In International Conference on Verification, Model Checking, and Abstract Interpretation. 41–62. https://doi.org/10.1007/978-3-662-49122-5_2 Google ScholarDigital Library
- Malte H Schwerhoff. 2016. Advancing Automated, Permission-Based Program Verification Using Symbolic Execution. Ph.D. Dissertation. ETH Zurich. https://doi.org/10.3929/ethz-a-010835519 Google ScholarCross Ref
- Jan Smans, Bart Jacobs, and Frank Piessens. 2009. Implicit dynamic frames: Combining dynamic frames and separation logic. In European Conference on Object-Oriented Programming. 148–172. https://doi.org/10.1007/978-3-642-03013-0_8 Google ScholarDigital Library
- Jenna Wise, Johannes Bader, Cameron Wong, Jonathan Aldrich, Éric Tanter, and Joshua Sunshine. 2020. Gradual Verification of Recursive Heap Data Structures.. In OOPSLA. https://doi.org/10.1145/3428296 Google ScholarDigital Library
- Felix A Wolf, Linard Arquint, Martin Clochard, Wytse Oortwijn, João C Pereira, and Peter Müller. 2021. Gobra: Modular Specification and Verification of Go Programs. In International Conference on Computer Aided Verification. 367–379. https://doi.org/10.1007/978-3-030-81685-8_17 Google ScholarDigital Library
- Mona Zhang and Jacob Gorenburg. 2020. Design and implementation of a gradual verifier. In Companion Proceedings of the 2020 ACM SIGPLAN International Conference on Systems, Programming, Languages, and Applications: Software for Humanity. 31–33. https://doi.org/10.1145/3426430.3428137 Google ScholarDigital Library
Index Terms
- Implementation of an end-to-end gradual verification system
Recommendations
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 ...
Gradual verification of recursive heap data structures
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 ...
Sound Gradual Verification with Symbolic Execution
Gradual verification, which supports explicitly partial specifications and verifies them with a combination of static and dynamic checks, makes verification more incremental and provides earlier feedback to developers. While an abstract, weakest ...
Comments