Viper Roots

Formal Foundations of Translational Verifiers  

Logo

This project aims at providing formal foundations for the Viper verification infrastructure and similar verification tools. This effort includes developing a formal semantics for Viper and extending the Viper verifier to produce certificates for successful verification attempts - self-contained proofs that can be checked by independent tools.

Analogous to the architecture of compilers, many verification tools are implemented as a sequence of translation steps from programs and specifications to proof obligations in a suitable logic. Proof obligations in such translational verifiers are often expressed via intermediate verification languages (IVL). The IVL of a translational verifier decouples the front-end (which encodes the semantics of the input program) from the back-end (which automates the proof search). Thus, back-ends can be re-used across many verifiers, which drastically reduces the effort of building verifiers and facilitates the use of a portfolio of reasoning approaches. Examples of translational verifiers include Prusti (for Rust), Nagini (for Python), Gobra (for Go), and external pageVerCors (for Java) based on the Viper IVL, external pageCorral and external pageDafny based on the external pageBoogie IVL, as well as external pageFrama-C (for C) and external pageKrakatoa (for Java) based on the external pageWhy3 IVL.


Our goal is to increase the reliability of translational verifiers. To guarantee correctness of a translational verifier, one must guarantee correctness of its underlying logic justifying the translations, as well as the implementation of the verifier itself, which often consists of multiple thousands of lines of code. To address these points, we aim to find solutions to the following challenges: (1) The development of a meta-theoretical framework for soundness proofs justifying the verifier translations, and (2) the automatic generation of foundational proofs that reduce the trusted code base of translational verifier implementations.

To enable solutions for both of these challenges, a formal semantics for the IVL used in the translational verifier is required. The development of such a semantics is non-trivial for the Viper IVL, which can directly express resources via permissions in the style of separation logic. For instance, Viper supports the manipulation and inspection of permissions, which can lead to subtle errors in program verifiers when applying standard techniques such as method inlining without additional checks. As part of our efforts, we aim to give a formal semantics for Viper and to solve the challenges outlined above for translational verifiers based on Viper. We formalize our results in the Isabelle/HOL theorem prover.

Project Members

Thibault Dardinier
Peter Müller
Gaurav Parthasarathy
external pageAlex Summer (UBC)

 

Key Publications

Completed Student Projects

Acknowledgments

The project is being funded by the external pageSwiss National Science Foundation.

JavaScript has been disabled in your browser