Viper
A Verification Infrastructure for Permission based Reasoning
Peter Müller, ETH Zurich
Joint work with Pietro Ferrara, Uri Juhasz, Ioannis Kassios, Milos Novacek, Malte Schwerhoff, and Alex Summers
Viper A Verification Infrastructure for Permission based Reasoning - - PowerPoint PPT Presentation
Viper A Verification Infrastructure for Permission based Reasoning Peter Mller, ETH Zurich Joint work with Pietro Ferrara, Uri Juhasz, Ioannis Kassios, Milos Novacek, Malte Schwerhoff, and Alex Summers 2 Automatic Program Verification
Joint work with Pietro Ferrara, Uri Juhasz, Ioannis Kassios, Milos Novacek, Malte Schwerhoff, and Alex Summers
2
Peter Müller – Dagstuhl, May 04, 2015
Intermediate verification language Verification condition generator Prover Front-end Programming & specification language Front-end Programming & specification language Front-end Programming & specification language
3
Peter Müller – Dagstuhl, May 04, 2015
Symbolic execution Prover Programming & specification language Symbolic execution Programming & specification language Symbolic execution Programming & specification language
4
Peter Müller – Dagstuhl, May 04, 2015
Silver
Intermediate Language
Carbon
Boogie Encoding
Silicon
Symbolic Execution
Sample
Specification Inference
Boogie
VC Generation (Microsoft Research)
Z3
SMT solver (Microsoft Research)
Frontend Frontend Frontend
5
functions
(uninterpreted functions and quantified axioms)
conditionals, loops
domains
Peter Müller – Dagstuhl, May 04, 2015
6
Peter Müller – Dagstuhl, May 04, 2015
class C { int[ ] data; monitor invariant data_; void Foo( ) { acquire this; int i = data.length; while( 0 < i ) invariant data_; invariant holds( this ); { …; i = i – 1; } release this; } }
7
Peter Müller – Dagstuhl, May 04, 2015
class C { int[ ] data; monitor invariant data_; void Foo( ) { acquire this; int i = data.length; while( 0 < i ) invariant data_; invariant holds( this ); { …; i = i – 1; } release this; } }
8
Peter Müller – Dagstuhl, May 04, 2015
class C { int[ ] data; monitor invariant data_; void Foo( ) { acquire this; int i = data.length; while( 0 < i ) invariant data_; invariant holds( this, i ); { …; i = i – 1; } release this; } }
9
Peter Müller – Dagstuhl, May 04, 2015
Silver
Intermediate Language
OpenCL
Frontend (University of Twente)
Java
Frontend (University of Twente)
Scala
Frontend
Chalice
Frontend
Carbon
Boogie Encoding
Silicon
Symbolic Execution
Sample
Specification Inference
Boogie
VC Generation (Microsoft Research)
Z3
SMT solver (Microsoft Research)
10
certain liveness properties (via ranking functions)
weak memory models, higher-order idioms
Peter Müller – Dagstuhl, May 04, 2015