Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan...

25
Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University of Maryland, College Park

Transcript of Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan...

Page 1: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

Constraint-based Invariant Inference over Predicate Abstraction

Sumit GulwaniRamarathnam Venkatesan

Microsoft Research, Redmond

Saurabh Srivastava

University of Maryland,College Park

Page 2: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

2

Introduction

• Last decade has seen an engineering revolution in SAT solving.

• Can we bring the technology to program analysis?– This talk shows how to do that for predicate abstraction by

using off-the-shelf SAT solvers, e.g. Z3

• We have developed constraint-based techniques:– Program Verification– Maximally-weak Precondition Inference– Inter-procedural Summary Computation– Inferring the Maximally-general Counterexamples to Safety

(i.e. finding the best descriptions of bugs).

Page 3: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

3

Introduction

• Last decade has seen an engineering revolution in SAT solving.

• Can we bring the technology to program analysis?– This talk shows how to do that for predicate abstraction by

using off-the-shelf SAT solvers, e.g. Z3

• We have developed constraint-based techniques:– Program Verification– Maximally-weak Precondition Inference– Inter-procedural Summary Computation– Inferring the Maximally-general Counterexamples to Safety

(i.e. finding the best descriptions of bugs).

Page 4: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

4

Predicate Abstraction

• Given a fixed finite set of n predicates, associate with each predicate pi a boolean indicator bi.

• Sound over-approximation of the invariant at each program point represented by a boolean expression involving the indicators.

° (exp(b1,…,bn)) = exp[p1/b1, …, pn/bn]

® (Ã) = Æ{exp(b1,…,bn)| Ã ) exp[p1/b1, …, pn/bn]}

Boolean expression

®’ (Ã) = Æi=1…n {bi| Ã ) pi}

®(Ã) in general, not computable

Page 5: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

5

Constraint-based Invariant Inference

• Guess a DNF template: k disjuncts(…)Ç(…)Ç(…) : k=3

• Task: Fill out each disjunct with a boolean monomial (conjunction of indicator literals)

• Approach: Generate boolean constraints over indicators using the program semantics and directly solve using off-the-shelf solvers.

Page 6: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

6

Example: Cut-points

loop (int m) { assume(m > 0) x:=0; y:=0;

while (x<m) { x++; y++; }

assert(y = m)}

x:=0; y:=0

x++; y++

x<m

assume(m > 0)

assert(y = m)

I

Invariants at cut-points*

(at loop header)

*Cut-set: Set of cut-points such that each cyclein CFG passes through at least one cut-point

Page 7: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

7

Example: Simple paths and VCs

x:=0; y:=0

x++; y++

x<m

assume(m > 0)

assert(y = m)

I

Page 8: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

8

Example: Simple paths and VCs

x:=0; y:=0

x++; y++

x<m

assume(m > 0)

assert(y = m)

I

Page 9: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

9

Example: Simple paths and VCs

x:=0; y:=0

x++; y++

assume(m > 0)

assert(y = m)

I

assume(x¸m)assume(x<m)

*

Page 10: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

10

Example: Simple paths and VCs

• Verification condition induced by each simple path (sequence of stmt)

• VC computed using standard backwards weakest precondition operator !:

!(x:=e, Á) = Á [e/x]!(assume(p), Á) = p)Á!(assert(p), Á) = p Æ Á!(¿1;¿2, Á) = !(¿1, !(¿2, Á))

x:=0; y:=0

x++; y++

assume(m > 0)

assert(y = m)

I

assume(x¸m)assume(x<m)

*

Page 11: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

11

Example: Simple paths and VCs

!(x:=e, Á) = Á [e/x]!(assume(p), Á) = p)Á!(assert(p), Á) = p Æ Á!(¿1;¿2, Á) = !(¿1, !(¿2, Á)

x:=0; y:=0

x++; y++

assume(m > 0)

assert(y = m)

I

assume(x¸m)assume(x<m)

*

m>0 ) I[y! 0, x! 0]I Æ x¸m ) y=mI Æ x<m ) I[y! y+1, x! x+1]

11

23

2

3

Page 12: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

12

Example: Simple paths and VCs

m>0 ) I[y! 0, x! 0]I Æ x¸m ) y=mI Æ x<m ) I[y! y+1, x! x+1

1

2

3

Page 13: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

13

Example: Boolean Constraint Generation

m>0 ) I[y! 0, x! 0]1

2

3 I Æ x<m ) I[y! y+1, x! x+1]

Unknown invariant on the RHS;constrains how strong I can be

Unknown invariant on the LHS;constrains how weak I can be

Unknown on both sides;combination of above cases

I Æ x¸m ) y=m

Page 14: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

14

Example: Boolean Constraint Generation

m>0 ) I[y! 0, x! 0]1

Unknown invariant on the RHS;constrains how strong I can be

Unknown invariant on the LHS;constrains how weak I can be

2 I Æ x¸m ) y=m

x·y, x¸y, x<yx·m, x¸m, x<my·m, y¸m, y<m

0·0, 0¸0, 0<00·m, 0¸m, 0<m0·m, 0¸m, 0<m

:x·y, x¸y, x<yx·m, x¸m, x<my·m, y¸m, y<m

: bx¸m Æ : bx<y Æ : by¸m(bx<m) Ç (by·m Æ by¸m) Ç (bx·y Æ by·m)

y·m Æ y¸mx<m

x·y Æ y·m

1:2:3:

Maximally-weak ways of satisfying the constraint using the given preds.(Computed using Predicate Cover)

Page 15: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

15

ff: rest

tt: by·x ; by·m ; bx·y

SAT Solver(fixed point computation)

Example: Solving using SAT

: bx¸m Æ : bx<y Æ : by¸m(bx<m) Ç (by·m Æ by¸m) Ç (bx·y Æ by·m)

(by·m ) (by<m Ç by·x)) Æ :bx<m Æ :by<m

loop (int m) { assume(m > 0) x:=0; y:=0; while (x<m) { x++; y++; } assert(y = m)}

I: y=x Æ y·m

Individual local

computations

Page 16: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

16

Program VerificationMaximally-weak Precondition InferenceInter-procedural Summary Computation

Page 17: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

17

Maximally-weak preconditions

• Instead of the precondition true as in PV, treat precondition as an unknown PRE

• Generate constraints as for PV—now in terms of PRE and the unknowns invariant I’s

• Solving these yields a precondition PRE, but not necessarily the maximally-weakest

• Iteratively, improve the current precondition T by adding the following constraint:

T) PRE Æ :(PRE) T)

Page 18: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

18

Context-sensitive Inter-procedural Analysis

• Compute context-sensitive procedure summaries as (Ai, Bi) pre/post pairs in assume-guarantee style reasoning

• Constraint generation– Procedure body (guarantee):

– Calls (assume):

P(x) { S; return y; }assume(Ai); S; assert(Bi)

v = P(u);

assert(Ai[u/x]); assume(Bi[u/x, t/y]); v:=t

Page 19: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

19

Experiments: Overview

• Our benchmarks are academic/small benchmark programs that demonstrate the feasibility of the technique

• We ran our tool in two modes: program verification and weakest precondition

• We are able to easily generate disjunctive invariants for which specialized techniques have been proposed earlier

• We collected three performance statistics:– Time for verification condition generation (weakest precondition over

simple paths)– Time for boolean constraint generation (includes the predicate cover

operation)– Time for SAT solving (fixed point computation)

Page 20: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

20

Experiments: Results

• VC generation: 0.23sec• SAT solving: 0.06sec• Boolean formula generation:

0 1000 2000 3000 4000 5000 6000 7000 80000

2

4

6

8

10

12

14

16

Number of clauses in generated formula

Tim

e (in

sec

onds

) • Overall time for invariant generation is low

• Predicate cover called on small formulas. Our unoptimised version performs reasonably

Page 21: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

21

Related Work

• Constraint-based invariant inference:– Cousot / Sankarnarayanan et.al.: LIA using mathematical

solvers– Beyer et.al.: LIA+UFS by compiling away UFS to LIA– Podelski et.al. / Bradley et.al.: Discover ranking functions

We describe a reduction over the very successful domain of predicate abstraction

• Application of SAT to program analysis:– SATURN: bit accurate modeling of loop-free programs with

complicated data structures– Bounded model checking etc.

Use SAT for validation; in contrast, we use it for inference of invariants that are sound over-approximations

Page 22: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

22

Conclusions

• Constraint-based techniques offer two advantages over iterative fixed-point techniques:– Goal directed (may buy efficiency)– Do not require widening (may buy precision)

• For predicate abstraction, we have shown how to reduce various program analysis problems to constraint solving.

• In addition to program verification, constraint-based encoding facilitates easy extensions to inter-procedural summary computation, maximally-weak preconditions, counter-examples to safety.

Page 23: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

23

Future Work

• We are exploring extensions to quantifiers and other analysis problems as future work.

• We are exploring the scalability of this technique along two directions:– Encodings that yield simpler SAT instances, e.g. exploiting

symmetry information for the case of disjunctive solutions– Reducing programmer burden by automatically inferring

predicate sets and templates

• VS3: Verification and Synthesis using SMT Solvershttp://www.cs.umd.edu/~saurabhs/pacs/

Page 24: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

24

Questions?

Page 25: Constraint-based Invariant Inference over Predicate Abstraction Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond Saurabh Srivastava University.

25

Best Description of Bugs

Err (int m) { error := 0; while (x<m) { x++; y++; if (y¸m) error:=1; goto L; } L: assert(error = 1)}

Err (int m) { while (x<m) { x++; y++; assert (y<m); }}

• Instrument

• Run maximally-weak precondition

x<m Æ y¸ x

(x<m Æ y¸ x) Ç (error=1Æ y¸ x)