From c to infinity and back: unbounded auto-active verification with VCC

  • Authors:
  • Michał Moskal

  • Affiliations:
  • Microsoft Research, Redmond

  • Venue:
  • CAV'12 Proceedings of the 24th international conference on Computer Aided Verification
  • Year:
  • 2012

Quantified Score

Hi-index 0.00

Visualization

Abstract

In this tutorial I'll show how to prove deep functional properties of tricky sequential and concurrent C programs using VCC. I'll get into induction, termination, algebraic data types, infinite maps, and lemmas, all unified as ghost data and C-like code manipulating it. Once these are provided, verification is automatic, but the development process of such annotations tends to be very interactive, thus "auto-active verification" using C as a proof language. VCC [1] is an industrial-strength verification environment for low-level concurrent systems code written in C. VCC takes a program (annotated with function contracts, state assertions, and type invariants) and attempts to prove the correctness of these annotations. VCC's verification methodology[3] allows global two-state invariants that restrict update of shared state and enforces simple, semantic conditions sufficient for checking those global invariants modularly. VCC works by translating C, via the Boogie intermediate verification language, to verification conditions handled by the Z3 SMT solver. The environment includes tools for monitoring proof attempts and constructing partial counterexample executions for failed proofs and has been used to verify functional correctness of tens of thousands of lines of Microsoft's Hyper-V virtualization platform and of SYSGO's embedded real-time operating system PikeOS. VCC is available with sources for non-commercial use at http://vcc.codeplex.com/ , and online at http://rise4fun.com/Vcc . A tutorial [2] is also provided.