Constraint-based Invariant Inference over Predicate Abstraction

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

description

Constraint-based Invariant Inference over Predicate Abstraction. Saurabh Srivastava University of Maryland, College Park. Sumit Gulwani Ramarathnam Venkatesan Microsoft Research, Redmond. Introduction. Last decade has seen an engineering revolution in SAT solving. - PowerPoint PPT Presentation

Transcript of Constraint-based Invariant Inference over Predicate Abstraction

Page 1: Constraint-based Invariant Inference over Predicate Abstraction

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

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

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

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

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

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

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

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

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

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

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

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

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

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

15

ff: resttt: 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

16

Program VerificationMaximally-weak Precondition InferenceInter-procedural Summary Computation

Page 17: Constraint-based Invariant Inference over Predicate Abstraction

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

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

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

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

seco

nds) • 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

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

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

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

24

Questions?

Page 25: Constraint-based Invariant Inference over Predicate Abstraction

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)