Proving and Disproving Programs with Shared Mutable Data
Georg Schmid, Viktor Kun\v{c}ak

TL;DR
This paper introduces a verification tool for deterministic programs with shared mutable references, using a novel SMT-based encoding that improves automation and efficiency in proving safety and termination.
Contribution
The paper presents a new quantifier-free translation of programs with mutable references into purely functional forms, enabling effective use of SMT solvers for verification.
Findings
Effective verification of programs with shared mutable data.
Ability to report counterexamples and prove safety.
Maintains efficiency for purely functional data structures.
Abstract
We present a tool for verification of deterministic programs with shared mutable references against specifications such as assertions, preconditions, postconditions, and read/write effects. We implement our tool by encoding programs with mutable references into annotated purely functional recursive programs. We then rely on function unfolding and the SMT solver Z3 to prove or disprove safety and to establish program termination. Our tool uses a new translation of programs where frame conditions are encoded using quantifier-free formulas in first-order logic (instead of relying on quantifiers or separation logic). This quantifier-free encoding enables SMT solvers to prove safety or report counterexamples relative to the semantics of procedure specifications. Our encoding is possible thanks to the expressive power of the extended array theory of the Z3 SMT solver. In addition to the…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsLogic, programming, and type systems · Formal Methods in Verification · Security and Verification in Computing
