Building Deductive Program Verifiers: Lecture Notes
Péter Müller · Repository for Publications and Research Data (ETH Zurich) · 2019
Deductive program verifiers attempt to construct a proof that a given program satisfies a given specification.Their implementations reflect the semantics of the programming language and the specification language, and often include elaborate proof search strategies to automate verification.Each of these components is intricate, which makes building a verifier from scratch complex and costly.In these lecture notes, we will present an approach to build program verifiers as a sequence of translations from the source language and specification via intermediate languages down to a logic for which automatic solvers exist.This architecture reduces the overall complexity by dividing the verification process into simpler, well-defined tasks, and enables the reuse of essential elements of a program verifier such as parts of the proof search, specification inference, and counterexample generation.We will use the intermediate verification language Viper to demonstrate how to encode interesting verification problems.