+ All Categories
Home > Documents > Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop,...

Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop,...

Date post: 04-Jan-2016
Category:
Upload: candace-holmes
View: 213 times
Download: 0 times
Share this document with a friend
37
Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos Novacek, Malte Schwerhoff , Alex Summers (and several students)
Transcript
Page 1: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

ViperA Verification

Infrastructure for Permission-Based

Reasoning

24th March 2015, JML Workshop, Leiden

Uri Juhasz, Ioannis Kassios, Peter Müller, Milos Novacek,Malte Schwerhoff, Alex Summers (and several students)

Page 2: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

2

Automatic Program Verification

−Safety (memory accesses, non-null, …)−Correctness (functional

specs)−Termination, message

replies, …

Our Vision

Page 3: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

3

Verification using Automatic Provers

Automatic prover

+Automatic first-order logic tools – major progress in the last decade (SAT, SMT)

+Intermediate verification languages - Boogie, Why, …

+Back-end: verifier (verification condition generator)

=Common infrastructure for building front-end verifiers

✔✘

Back-end

IVL

Front-end

Prog. language+ specifications

Front-end

Prog. language+ specifications

Front-ends

Prog. languages+ specifications

Page 4: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

4

✔✘

Verification using Automatic Provers

+Automatic first-order logic tools – major progress in the last decade (SAT, SMT)

+Intermediate verification languages - Boogie, Why, …

+Back-ends: verifiers - but also inference engines, slicers, static analysers, …

=Common infrastructure for building front-end verifiers

Automatic prover

Back-end

IVL

Front-end

Prog. language+ specifications

Automatic prover

Back-end

Automatic provers

Back-ends

Front-end

Prog. language+ specifications

Front-ends

Prog. languages+ specifications

Page 5: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

5

✔✘

Verification using Automatic Provers

Common infrastructure enabled many success stories and tools

−Microsoft Hypervisor (VCC)

−Device drivers (Corral)−Spec#, Dafny−Krakatoa, Jessie−Frama-C, Why3−…

Automatic prover

Back-end

IVL

Front-end

Prog. language+ specifications

Automatic prover

Back-end

Automatic provers

Back-ends

Front-end

Prog. language+ specifications

Front-ends

Prog. languages+ specifications

Page 6: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

6

Permission-Based Reasoning

Separation logic and others permission logics:−Locally reason about shared mutable state−Many successful applications, including−Device driver safety (Microsoft)−Belgian Electronic Identity Card

−Many ongoing developments(esp. fine-grained concurrency)

Not a first-order logic→ Significantly complicates using existing provers

Page 7: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

7

Permission-Based Reasoning

Consequence: many custom verification engines(usually based on symbolic execution): Smallfoot, VeriFast, jStar, …

Prog. language A+ specifications

Automatic prover

Back-end B

Prog. language B+ specifications

Back-end C

Prog. language C+ specifications

Back-end A

Alternative: Encoding SL into FOL (e.g. Chalice)

Page 8: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

8

Viper: Our Verification Infrastructure

Silver:−Native support for

permissions−Few (but expressive)

constructs−Designed with verification

and inference in mind

Back-ends: Two verifiers;plans to develop inference, slicer

Front-ends (proof of concept):−Chalice (concurrency

research)−Scala (very small subset)− Java (VerCors, U Twente)−OpenCL (VerCors, U Twente)

Silver(IVL)

Front-endBack-ends

Automaticprover

Front-endFront-endFront-ends

Page 9: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

9

Modular Static Verification + Shared State

foo(x) bar(x)

Page 10: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

10

Modular Static Verification + Shared State

foo(x) bar(x)

?

Page 11: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

11

Modular Static Verification + Shared State

foo(x) bar(x)

?

?

?

Page 12: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

12

Permissions

foo(x) bar(x)

Page 13: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

13

Permission Transfer

foo(x) bar(x)

?

Page 14: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

14

Permission Transfer

foo(x) bar(x)

?

?

Page 15: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

15

Fractional Permissions

foo(x) bar(x)

Page 16: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

16

Splitting Fractional Permissions

foo(x) bar(x)

?

Page 17: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

17

Merging Fractional Permissions

foo(x) bar(x)

?

Page 18: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

18

Permission Transfer

Idea of permission transfer generalises−Fork-join (transfer between threads)−Locks (transfer to/from lock invariant)−Message passing (pass permissions)

Common operations−Gain permissions−Lose permissions

foo(x) bar(x)

?

Page 19: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

19

Silver: Inhale and Exhale Statements

Statement exhale A means−Assert and remove permissions required by A−Assert logical constraints in A (e.g. c.f == 0)−Havoc locations to which all permissions is lost

(i.e. forget their values)

Statement inhale A means−Gain permissions required by A−Assume logical constraints in A

Page 20: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

20

Silver: Assertion Language Basics

Based on implicit dynamic frames

Accessibility predicates denote permissions

Assertions may be heap-dependent

Fractional permissions

Conjunction sums up permissions(similar to ∗ in separation logic)

acc(c.f, ½) && acc(c.f,

½)

acc(c.f)

acc(c.f) && c.f == 0

acc(c.f, ½)

Based on implicit dynamic frames

Page 21: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

21

Demo

Page 22: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

22

Silver: Language Features

Objects and fields, if-then-else, methods (with pre/post specs), loops (with invariants)

No notion of concurrency (encode via inhale/exhale)

Simple type system−Int, Bool, Ref, Perm−Mathematical sets Set[T] and sequences Seq[T]

Page 23: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

23

Silver: Unbounded Data Structures

Unbounded data structures via recursive predicates

fold/unfold statements exchange predicate instances for their bodies (not automatic due to recursion)

Heap-dependent, pure abstraction functions

predicate list(x: Ref) { acc(x.val) && acc(x.next) && (x.next != null ==> list(x.next))}

function elems(x: Ref): Seq[Int] requires list(x){ unfolding list(x) in [x.val] ++ (x.next == null ? [] : elems(x.next))}

Page 24: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

24

Silver: Custom Mathematical Domains

Domains to specify custom mathematical types−Type-parametric domains−Domain functions−Domain axioms

domain Pair[X,Y] { function pair(x: X, y: Y): Pair[X,Y] function first(p: Pair[X,Y]): X

axiom forall x: X, y: Y • first(pair(x,y)) == x}...method foo(x: Ref, p: Pair[Int, Int]) requires acc(x.f){ x.f := first(p) }

Page 25: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

25

Silver: Other Cool Features

Abstract read permissions−Alternative to fractional permissions−No need to commit to concrete fractions, e.g. ½

Allows unbounded splitting and counting

method foo(x: Ref, p: Perm) requires 0 < p && acc(x.f, p){ // read x.f if (∗) { var q: Perm constraining (q) { foo(x, q) // give away q < p } }}

Page 26: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

26

Silver: Other Cool Features

Paired assertions [A, B]−When inhale, A is used−When exhaled, B is used−Asymmetry justified elsewhere

(type system, soundness proof, induction schema, …)[ forall x: Nat • P(x),

forall x: Nat • (forall y: Nat • y < x ==> P(y)) ==> P(x)]

Page 27: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

27

Magic Wands

—∗

Page 28: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

28

Boolean implication A B⇒

Modus Ponens A (A B) ∧ ⇒ B⊨

Separating implication A —∗ B

Modus Ponens A ∗ (A —∗ B) B⊨

A —∗ B can be understood as an exchange promise

“ If A and A —∗ B are given up, then B is guaranteed to hold“

Magic Wands Primer

Page 29: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

29

Semantics of the magic wand:

h ⊨ A —∗ B h’ h · (h’ ⇔ ∀ A ⊨ h h’ ⇒ ⊎ ⊨B)

Quantification over state; typically not supported in automated verifiers

Used in proofs by hand (e.g. data structure modifications, barrier synchronization)

Magic Wands Primer

Page 30: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

30

Permission Bookkeeping and Recursive Predicates

predicate list(xs: Ref) { acc(xs.next) && (xs.next != null ==> list(xs.next))}

method rec(xs: Ref) requires list(xs) ensures list(xs){ unfold list(xs) rec(xs.next) // Ignoring base case fold list(xs)}

Page 31: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

31

Permission Bookkeeping and Recursive Predicates

predicate list(xs: Ref) { acc(xs.next) && (xs.next != null ==> list(xs.next))}

method rec(xs: Ref) requires list(xs) ensures list(xs){ unfold list(xs) rec(xs.next) // Ignoring base case fold list(xs)}

unfold

unfold

unfold

unfold

fold

fold

fold

fold

recursivedescent

recursiveascent

Bookkeeping implicitly done by the call stack

Page 32: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

32

Permission Bookkeeping and Recursive Predicates

predicate list(xs: Ref) { acc(xs.next) && (xs.next != null ==> list(xs.next))}

method it(xs: Ref) requires list(xs) ensures list(xs){ var cur := xs while (*)

{ unfold list(cur) cur := cur.next } }

unfold

unfold

unfold

unfold

iteration

Page 33: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

33

Permission Bookkeeping and Recursive Predicates

predicate list(xs: Ref) { acc(xs.next) && (xs.next != null ==> list(xs.next))}

method it(xs: Ref) requires list(xs) ensures list(xs){ var cur := xs while (*) inv ??? { unfold list(xs) cur := cur.next } ???}

unfold

unfold

unfold

unfold

iteration

?

Page 34: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

34

Permission Bookkeeping and Recursive Predicates

predicate list(xs: Ref) { acc(xs.next) && (xs.next != null ==> list(xs.next))}

method it(xs: Ref) requires list(xs) ensures list(xs){ var cur := xs while (*) inv list(cur) --* list(xs) { unfold list(xs) cur := cur.next // Update wand } // Get list(xs) from wand}

unfold

unfold

unfold

unfold

iteration

Page 35: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

35

Magic Wands in Silver

Specifying partial data structures is just one application

We support arbitrary* wands

Main contribution: automatic footprint computation−Recall A ∗ (A —∗ B) B⊨−Footprint = permission delta between A and B

Examples− true —∗ acc(x.f) | acc(x.f)− acc(x.f) —∗ acc(x.f) | emp− acc(x.f, 1/3) —∗ acc(x.f, 1/1) | acc(x.f, 2/3)− acc(x.f) —∗ acc(y.f) | x != y ==> acc(y.f)

Page 36: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

36

Demo

Page 37: Viper A Verification Infrastructure for Permission-Based Reasoning 24 th March 2015, JML Workshop, Leiden Uri Juhasz, Ioannis Kassios, Peter Müller, Milos.

37

Silver AST

http://bitbucket.org/viperproject/

SiliconCarbon

Boogie(Microsoft)

Z3(Microsoft)

verified by

encodes in

queries

queries

generate

Static Analysis

infer additional

specifications

ChaliceOpenCL

(U Twente)

ScalaJava(U

Twente)


Recommended