ICFP 2022
Sun 11 - Fri 16 September 2022 Ljubljana, Slovenia
Tue 13 Sep 2022 13:40 - 14:00 at Linhart - Program Verification & Synthesis Chair(s): Arthur Azevedo de Amorim

Verifying soundness of symbolic execution-based program verifiers is a significant challenge. This is especially true if the resulting tool needs to be usable outside of the proof assistant, in which case we cannot rely on shallowly embedded assertion logics and meta-programming. The tool needs to manipulate deeply embedded assertions, and it is crucial for efficiency to eagerly prune unreachable paths and simplify intermediate assertions in a way that can be justified towards the soundness proof. Only a few such tools exist in the literature, and their soundness proofs are intricate and hard to generalize or reuse. We contribute a novel, systematic approach for the construction and soundness proof of such a symbolic execution-based verifier. We first implement a shallow verification condition generator as an object language interpreter in a specification monad, using an abstract interface featuring angelic and demonic nondeterminism. Next, we build a symbolic executor by implementing a similar interpreter, in a symbolic specification monad. This symbolic monad lives in a universe that is Kripke-indexed by variables in scope and a path condition. Finally, we reduce the soundness of the symbolic execution to the soundness of the shallow execution by relating both executors using a Kripke logical relation. We report on the practical application of these techniques in Katamaran, a tool for verifying security guarantees offered by instruction set architectures (ISAs). The tool is fully verified by combining our symbolic execution machinery with a soundness proof of the shallow verification conditions against an axiomatized separation logic, and an Iris-based implementation of the axioms, proven sound against the operational semantics. Based on our experience with Katamaran, we can report good results on practicality and efficiency of the tool, demonstrating practical viability of our symbolic execution approach.

Tue 13 Sep

Displayed time zone: Belgrade, Bratislava, Budapest, Ljubljana, Prague change

13:40 - 15:20
Program Verification & SynthesisICFP Papers and Events at Linhart
Chair(s): Arthur Azevedo de Amorim Boston University
13:40
20m
Talk
Verified Symbolic Execution with Kripke Specification Monads (and no Meta-Programming)
ICFP Papers and Events
Steven Keuchel Vrije Universiteit Brussel, Sander Huyghebaert Vrije Universiteit Brussel, Georgy Lukyanov Newcastle University, UK, Dominique Devriese KU Leuven
DOI
14:00
20m
Talk
Safe Couplings: Coupled Refinement Types
ICFP Papers and Events
Lisa Vasilenko IMDEA Software Institute, Niki Vazou IMDEA Software Institute, Gilles Barthe MPI-SP, Germany / IMDEA Software Institute, Spain
DOI
14:20
20m
Talk
Aeneas: Rust Verification by Functional Translation
ICFP Papers and Events
Son Ho INRIA, Jonathan Protzenko Microsoft Research, Redmond
DOI
14:40
20m
Talk
Searching Entangled Program Spaces
ICFP Papers and Events
James Koppel Massachusetts Institute of Technology, USA, Zheng Guo University of California, San Diego, Edsko de Vries Well-Typed LLP, Armando Solar-Lezama Massachusetts Institute of Technology, Nadia Polikarpova University of California at San Diego
DOI
15:00
20m
Talk
Iterating on multiple collections in synchronyJFP Presentation
ICFP Papers and Events
Stefano Perna , Val Tannen University of Pennsylvania, USA, Limsoon Wong National University of Singapore