91
Software Architecture and Engineering: Part II ETH Zurich, Spring 2017 Prof. Martin Vechev http://www.srl.inf.ethz.ch /

Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Software Architecture and

Engineering: Part II

ETH Zurich, Spring 2017

Prof. Martin Vechevhttp://www.srl.inf.ethz.ch/

Page 2: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

Motivation for Material

• Programs are everywhere– e.g., cars, smart phones, mobile apps, software-defined

networks, spreadsheets, probabilistic programs, etc.

• Hard to manually reason about programs and get right– e.g.,: see Heartbleed bug, drivers, concurrency, etc.

• Defects have a massive economic effect– ~60 billion USD annually and growing

Wanted: Automated techniques that find bugs, ensurecorrectness and performance, and even repair code

Page 3: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

SAE: Part II

StaticAnalysis

SecondProject

AliasAnalysis

RelationalAnalysis

IntervalAnalysis

Semantics &

Theory

Assertions

Framework

SMT solver

SymbolicReasoning

ProgramRepair

ConcolicExecution

SymbolicExecution

Web & Mobile

Apps

RaceDetection

ContextBounded Dynamic

Analysis

3

Today

Page 4: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 4

Question

Can you build an automatic analyzer which takes as input an arbitrary program and an arbitrary property such that if the analyzer answers:

• “Yes” , then it is certain that the property holds

• “No” , then it is certain that the property does not hold

?

Page 5: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 5

Question

Can you build an automatic analyzer which takes as input an arbitrary program and an arbitrary property such that if the analyzer answers:

• “Yes” , then it is certain that the property holds

• “No” , then it is certain that the property does not hold

Answer:

No. The problem is undecidable

Alan Turing

Page 6: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 6

What now?

Change the question

Page 7: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 7

New Question

Can you build an automatic analyzer which takes as input an arbitrary program and an arbitrary property such that if the analyzer answers:

• “Yes” , then it is certain that the property holds

• “No” , then it is certain that the property does not holdunknown if the property holds or not

?

Page 8: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 8

Trivial Solution

StaticAnalyzer(Program, Property)

{

return “No”;

}

Page 9: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 9

Static Program Analysis: Challenge

The challenge is to build a static analyzer that is able to answer “Yes” for as many programs which satisfy the property.

Page 10: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

All behaviors inthe universe

program behaviorsover-approximation(e.g. static analysis)

under-approximation(e.g. dynamic analysis)

Approaches to Program Analysis

10

over and underapproximation(e.g. symbolic execution)

Page 11: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

Plan for Today

• Informal introduction to static program analysis

• Goal: get an intuition

• Understand why we need the math later

11

Page 12: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

Static Program Analysis: cool facts

• Can automatically prove interesting properties such as– absence of null pointer dereferences, assertions at a program point,

termination, absence of data races, information flow,…

• Can automatically find bugs in large scale programs, or detect bad patterns– for instance: the program fails to call the API “close” on a File object– or detect stylistic patterns..– what else?

• Nice combination of math and system building– combines program semantics, data structures, discrete math, logic,

algorithms, decision procedures, …

12

Page 13: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

• Can run the program without giving a concrete input

– abstractly execute a piece of code from any point

• No need for manual annotations such as loop invariants

– they are automatically inferred

– what is a loop invariant ?

Lets look at a couple of examples what static analysis can do for us…

13

Static Program Analysis: cool facts

Page 14: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 14

proc MC(n:int) returns (r:int)var t1:int, t2:int; begin if (n>100) then r = n-10; else t1 = n + 11; t2 = MC(t1); r = MC(t2); endif; end

var a:int, b:int; begin b = MC(a); end

What is the result of this program ?

Page 15: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 15

proc MC(n:int) returns (r:int)var t1:int, t2:int; begin if (n>100) then r = n-10; else t1 = n + 11; t2 = MC(t1); r = MC(t2); endif; end

var a:int, b:int; begin b = MC(a); end

The McCarthy 91 function: if (n 101) then n - 10 else 91

top

n-101 0

-n+r+10 = 0; n-101 0

-n+100 0

-n+t1-11 = 0; -n+100 0

-n+t1-11 =0; -n+100 0;

-n+t2-1 0; t2-91 0

-n+t1-11=0;-n+100 0;-n+t2-1 0;

t2-91 0; r-t2+10 0; r-91 0

-n+r+10 0; r-91 0

top

-a+b+10 0; b-91 0

Automatically inferred using numerical abstract domains

Invariants per program point (automatically computed):

Page 16: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 16

enum {Locked,Unlocked}

initlock() {s = Unlocked;}

lock() {

if (s == Locked) abort;

else s = Locked; }

unlock() {

if (s == Unlocked) abort;

else s = Unlocked; }

Unlocked Locked

Errorunlock lock

lock

unlock

driver(int req) {

1: initlock();

2: lock();

3: old = packets;

4: if (req) {

5: req = req->next;

6: unlock();

7: packets++;

}

8: if (packets != old)

goto 2;

9: unlock();

}

Property we want to check:

Network driver: does it do what it is supposed to?

Page 17: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 17

enum {Locked,Unlocked}

initlock() {s = Unlocked;}

lock() {

if (s == Locked) abort;

else s = Locked; }

unlock() {

if (s == Unlocked) abort;

else s = Unlocked; }

Unlocked Locked

Errorunlock lock

lock

unlock

driver(int req) {

1: initlock();

2: lock();

3: old = packets;

4: if (req) {

5: req = req->next;

6: unlock();

7: packets++;

}

8: if (packets != old)

goto 2;

9: unlock();

}

Property we want to check:

Network driver: does it do what it is supposed to?

Automatically verified using SLAM based on predicate abstraction

Page 18: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

Real-World Program Analyzers (small sample)

A significantly increased interest in the last few years

18

Page 19: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

Facebook: last 2 years...

19

INFER: http://fbinfer.com/

Infer is an automated code review toolbased on deep program analysis.

It is fully integrated and is a key part ofFB’s software development process.Fast and precise, it fits FB’s culture onmove fast and break things

Flow: http://flowtype.org/

Flow is a static type checker and canautomatically infer types of JavaScriptprograms, both user code and libraries.

Both tools are open sourced and areused by companies beyond Facebook.

Page 20: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

Questions

20

• What are the core principles behind these tools? Isthere a general theory?

• What kind of properties/defects/issues can thesetools detect?

• How do you go about building one these tools?

• What concerns should be addressed to have suchtools be practically adopted by software engineers?

Page 21: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

Lets begin…

21

Page 22: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

• We will learn a style called abstract interpretation

– a general theory of how to do approximation systematically

• Abstract interpretation is a very useful thinking framework

– relate the concrete with the abstract, the infinite with the finite

• Many existing analyses can be seen as abstract interpreters

– type systems, data-flow analysis, model checking, etc…

22

Static Analysis via Abstract Interpretation

Page 23: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 23

1. select/define an abstract domain• selected based on the type of properties you want to prove

2. define abstract semantics for the language w.r.t. to the domain• prove sound w.r.t concrete semantics• involves defining abstract transformers

• that is, effect of statement / expression on the abstract domain

3. iterate abstract transformers over the abstract domain• until we reach a fixed point

Abstract Interpretation: step-by-step

The fixed point is the over-approximation of the program

Page 24: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 24

Lets prove an assertion…

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

There are infinitely many executions here. We cannot just enumerate them all.

And even if they were finite, it would still take us a long time to enumerate them all…

Instead, let us do some over-approximation, so that we can reduce the space of what we need to enumerate…

Page 25: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 25

Step 1: Select abstraction

Lets pick the sign abstraction

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

TT

0

+ -

Why this abstract domain ?

Page 26: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

Question: what does + represent in the sign abstraction?

26

Page 27: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

Question: what does + represent in the sign abstraction?

Answer: + represents all positive numbers and 0.

What about -, what does it mean ?

27

Page 28: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 28

2 + T

An abstract program state is a map from variables to elements in the domain

pc x y i

Example Abstract StateT

Step 1: Select abstraction

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

TT

0

+ -

Page 29: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 2: Define Transformers

An abstract transformer describes the effect of statement and expression evaluation on an abstract state

pc x y i

1 ? ? ?

pc x y i

3 ? ? ?

pc x y i

4 ? ? ?

pc x y i

7 ? ? ?

. . . ( )STATEMENT/EXPRESSION

. . .

pc x y i

1 ? ? ?

pc x y i

3 ? ? ?

pc x y i

4 ? ? ?

pc x y i

7 ? ? ?

. . . ( )

. . .

29

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 30: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 30

Important Point

It is important to remember that abstract transformers are defined per programming language once and for all, and not per-program !

That is, they essentially define the new (abstract) semantics of the language (we will see them formally defined later)

This means that any program in the programming language can use the same transformers.

Page 31: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

pc x y i

1 T 0 T

pc x y i

3 0 T T

pc x y i

4 T + T

pc x y i

7 T - T. . .

( )

4: y := y + 1;

. . .

31

Step 2: Define Transformers

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 32: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

pc x y i

1 T 0 T

pc x y i

3 0 T T

pc x y i

4 T + T

pc x y i

7 T - T. . .

( )

4: y := y + 1;

. . .

32

Step 2: Define Transformers

pc x y i

1 T 0 T

pc x y i

4 T + T

pc x y i

5 T + T

pc x y i

7 T - T. . .

( ). . .

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 33: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

pc x y i

1 T 0 T

pc x y i

3 0 T T

pc x y i

4 T - T

pc x y i

7 T - T. . .

( )

4: y := y + 1;

. . .

33

Step 2: Define Transformers

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 34: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

pc x y i

1 T 0 T

pc x y i

3 0 T T

pc x y i

4 T - T

pc x y i

7 T - T. . .

( )

4: y := y + 1;

. . .

34

Step 2: Define Transformers

is this correct ?

pc x y i

1 T 0 T

pc x y i

4 T - T

pc x y i

5 T 0 T

pc x y i

7 T - T. . .

( ). . .

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 35: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

pc x y i

1 T 0 T

pc x y i

3 0 T T

pc x y i

4 T - T

pc x y i

7 T - T. . .

( )

4: y := y + 1;

. . .

35

Step 2: Define Transformers

What does correct mean ?

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 36: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Transformer Correctness

A correct abstract transformer should always produce results that are a superset of what a concrete transformer would produce

36

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 37: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Unsound Transformer

pc x y i

4 T - TThis abstract state:

represents infinitely many concrete states including:

If we perform y := y + 1 on this concrete state, we get:

However, the abstract transformer producedan abstract state:

This abstract state does not represent any state where y = - 2

pc x y i

4 1 -3 2

pc x y i

5 1 -2 2

pc x y i

5 T 0 T

The abstract transformer is unsound ! 37

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 38: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

How about this ?

This is correct, why?

38

pc x y i

1 T 0 T

pc x y i

3 0 T T

pc x y i

4 T - T

pc x y i

7 T - T. . .

( )

4: y := y + 1;

. . .

pc x y i

1 T 0 T

pc x y i

4 T - T

pc x y i

5 T T T

pc x y i

7 T - T. . .

( ). . .

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 39: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

How about this ?

Is this sound ? YesIs it precise ? No

39

pc x y i

1 T 0 T

pc x y i

3 0 T T

pc x y i

4 T 0 T

pc x y i

7 T - T. . .

( )

4: y := y + 1;

. . .

pc x y i

1 T 0 T

pc x y i

4 T 0 T

pc x y i

5 T T T

pc x y i

7 T - T. . .

( ). . .

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 40: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Imprecise Transformer

pc x y i

4 T 0 TThis abstract state:

represents infinitely many concrete states where y is always 0, including:

If we perform y := y + 1 on any of these concrete states, we will always get states wherey is always positive, such as:

However, the abstract transformer producesan abstract state where y canbe any value, such as:

pc x y i

4 1 0 2

pc x y i

5 1 1 2

pc x y i

5 T T T

The abstract transformer is imprecise ! 40

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 41: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

How about this ?

Is this sound ? Is it precise ?

41

pc x y i

1 T 0 T

pc x y i

3 0 T T

pc x y i

4 T 0 T

pc x y i

7 T - T. . .

( )

4: y := y + 1;

. . .

pc x y i

1 T 0 T

pc x y i

4 T 0 T

pc x y i

5 T + T

pc x y i

7 T - T. . .

( ). . .

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 42: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

How about this ?

Is this sound ? YesIs it precise ? Yes

42

pc x y i

1 T 0 T

pc x y i

3 0 T T

pc x y i

4 T 0 T

pc x y i

7 T - T. . .

( )

4: y := y + 1;

. . .

pc x y i

1 T 0 T

pc x y i

4 T 0 T

pc x y i

5 T + T

pc x y i

7 T - T. . .

( ). . .

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 43: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

43

Abstract Transformers

It is easy to be sound and imprecise: simply output T

It is desirable to be both sound and precise. If we lose precision, it needs to be clear why and where:

• sometimes, computing the most precise transformer (also called the best transformer) is impossible

• for efficiency reasons, we may sacrifice some precision

Page 44: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

Start with the least abstract element

pc x y i

T TT

pc x y i

T TT

pc x y i

T TT1 2

6

pc x y i

T TT3

pc x y i

T TT

pc x y i

T TT

4 5

pc x y i

T TT

7

Lets do some iterations…

44

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 45: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

int i

pc x y i

T TT

pc x y i

T TT

pc x y i

T TT

1 2

6

pc x y i

T TT

3

pc x y i

T TT

pc x y i

T TT

4 5

pc x y i

T TT

7

45

Step 3: Iterate to a fixed point

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 46: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

46

int i

pc x y i

T TT

pc x y i

T TT

pc x y i

T TT

1 2

6

pc x y i

T TT

3

pc x y i

T TT

pc x y i

T TT

4 5

pc x y i

T TT

7

pc x y i

T TT

pc x y i

T TT

2

6

pc x y i

T TT

3

pc x y i

T TT

pc x y i

T TT

4 5

pc x y i

T TT

7

pc x y i

T T

1 T

Step 3: Iterate to a fixed point

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 47: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

1: int x :=5;

47

pc x y i

T TT

pc x y i

T TT

2

6

pc x y i

T TT

3

pc x y i

T TT

pc x y i

T TT

4 5

pc x y i

T TT

7

pc x y i

T T

1 T

Step 3: Iterate to a fixed point

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 48: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

1: int x :=5;

pc x y i

T TT

pc x y i

T TT

2

6

pc x y i

T TT

3

pc x y i

T TT

pc x y i

T TT

4 5

pc x y i

T TT

7

pc x y i

T T

1 T

pc x y i

T +

2 T

pc x y i

T TT

3

pc x y i

T T

1 T

pc x y i

T TT

6

pc x y i

T TT

pc x y i

T TT

4 5

pc x y i

T TT

7

Step 3: Iterate to a fixed point

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 49: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

2: int y :=7;

pc x y i

T +

2 T

pc x y i

T TT

3

pc x y i

T T

1 T

pc x y i

T TT

6

pc x y i

T TT

pc x y i

T TT

4 5

pc x y i

T TT

7

Step 3: Iterate to a fixed point

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 50: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

2: int y :=7;

pc x y i

T +

2 T

pc x y i

T TT

3

pc x y i

T T

1 T

pc x y i

T TT

6

pc x y i

T TT

pc x y i

T TT

4 5

pc x y i

T TT

7

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T TT

7

pc x y i

T TT

pc x y i

T TT

5 6

pc x y i

T T

1 T

pc x y i

T T T

4

Step 3: Iterate to a fixed point

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 51: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

+ +

3: if (i ≥ 0)

51

pc x y i

3 T

pc x y i

T +

2 T

pc x y i

T TT

7

pc x y i

T TT

pc x y i

T TT

5 6

pc x y i

T T

1 T

pc x y i

T T T

4

Step 3: Iterate to a fixed point

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 52: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

3: if (i ≥ 0)

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T TT

7

pc x y i

T TT

pc x y i

T TT

5 6

pc x y i

T T

1 T

pc x y i

T T T

4

pc x y i

+ +

4 +

pc x y i

+ +

7 -

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T TT

pc x y i

T TT

5 6

pc x y i

T T

1 T

Step 3: Iterate to a fixed point

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 53: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

4: y := y + 1;

pc x y i

+ +

4 +

pc x y i

+ +

7 -

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T TT

pc x y i

T TT

5 6

pc x y i

T T

1 T

Step 3: Iterate to a fixed point

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 54: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

+ + +

5

4: y := y + 1;

pc x y i

+ +

4 +

pc x y i

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T TT

pc x y i

T TT

5 6

pc x y i

T T

1 T

pc x y ipc x y i

+ +

4 +

pc x y i

+ +

7 -

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T TT

6

pc x y i

T T

1 T

Step 3: Iterate to a fixed point

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

-+ +

7

Page 55: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

-+ ++ + + + + +

5: i := i - 1;

55

Step 3: Iterate to a fixed point

pc x y i

5

pc x y i

4

pc x y i

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T TT

6

pc x y i

T T

1 Tfoo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

7

Page 56: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

+ + +

5: i := i - 1;

56

Step 3: Iterate to a fixed point

pc x y i

+ + +

5

pc x y i

+ + +

4

pc x y i

-+ +

7

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T TT

6

pc x y i

T T

1 T

pc x y i

+ +

6 T

pc x y i

5

pc x y i

+ + +

4

pc x y i

+ +

7

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T T

1 T

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

-

Page 57: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

-+ +

7

6: goto 3;

57

Step 3: Iterate to a fixed point

pc x y i

+ +

6 T

pc x y i

+ +

5 +

pc x y i

+ +

4 +

pc x y i

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T T

1 Tfoo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

Page 58: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

+ +

7

6: goto 3;

58

Step 3: Iterate to a fixed point

pc x y i

+ +

6 T

pc x y i

+ +

5 +

pc x y i

+ +

4 +

pc x y i

+ +

7

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T T

1 T

pc x y i

+ +

6 T

pc x y i

+ +

5 +

pc x y i

+ +

4 +

pc x y i

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T T

1 T

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

-

-

Page 59: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

ANY STATEMENT

No matter what statement we execute from this state, we reach that same state

What is the loop invariant ?59

Step 3: Iterate to a fixed point

pc x y i

+ +

6 T

pc x y i

+ + +

5

pc x y i

+ + +

4

pc x y i

+ +

7

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T T

1 Tfoo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

-

Page 60: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 4: Check property

P (0 ≤ x + y)sign

P (0 ≤ x + y)

sign domain precise enough to prove property

60

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x + y

}

pc x y i

+ +

6 T

pc x y i

+ + +

5

pc x y i

+ + +

4

pc x y i

+ +

7

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T T

1 T

-

Page 61: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Lets change the property

P (0 ≤ x - y)sign

P (0 ≤ x - y)

sign domain is sound: property does not hold and it confirms it

61

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ x - y

}

pc x y i

+ +

6 T

pc x y i

+ + +

5

pc x y i

+ + +

4

pc x y i

+ +

7

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T T

1 T

-

Page 62: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Lets change the property again

sign domain too imprecise to prove property

P (0 ≤ y - x)sign

P (0 ≤ y - x)

62

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

pc x y i

+ +

6 T

pc x y i

+ + +

5

pc x y i

+ + +

4

pc x y i

+ +

7

pc x y i

+ +

3 T

pc x y i

T +

2 T

pc x y i

T T

1 T

-

Page 63: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Lets try another abstraction

This time, instead of abstracting variable values using the sign of the variable, we will abstract the values using an interval

63

Page 64: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev

[0,0][-1,-1][-2,-2]

[-2,-1]

[-2,0]

[1,1] [2,2]

[-1,0] [0,1] [1,2]

[-1,1] [0,2]

[-2,1] [-1,2]

[-2,2]

……

[2,]

[1,]

[0,]

[-1,]

[-2,]

[- ,]

[- ,-2]

[-,-1]

[- ,0]

[-,1]

[- ,2]

Step 1: Select interval domain

64

Page 65: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 1: Select abstract domain

An abstract program state now looks like:

pc x y i

2 [-2,∞] [1,7] [1,2]

65

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 66: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

. . . ( )

4: y := y + 1;

Step 2: Define Transformers

pc x y i

4 [-2,∞] [1,7] [1,2]. . .

?66

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 67: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

. . . ( )

4: y := y + 1;

Step 2: Define Transformers

pc x y i

4 [-2,∞] [1,7] [1,2]. . .

. . . ( )pc x y i

5 [-2,∞] [2,8] [1,2]. . .

why is this correct?

67

Page 68: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

. . . ( )

5: i := i - 1;

Step 2: Define Transformers

pc x y i

5 [-2,∞] [1,7] [1,2]. . .

?68

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 69: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

. . . ( )

5: i := i - 1;

Step 2: Define Transformers

pc x y i

5 [-2,∞] [1,7] [1,2]. . .

. . . ( )pc x y i

6 [-2,∞] [1,7] [0,1]. . .

69

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 70: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

Again, we start with the least abstract element

pc x y i

T TTpc x y i

T TTpc x y i

T TT

1 2

6

pc x y i

T TT

3

pc x y i

T TT

pc x y i

T TT

4 5

pc x y i

T TT

7

Lets the iterations begin !

Note: we only show the change of 1 component

70

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 71: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

int i

... ( )pc x y i

1...

T T T

71

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 72: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

[-∞,∞]

Step 3: Iterate to a fixed point

int i

... ( )

...

... ( )

...

pc x y i

1

T T

72

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

pc x y i

1

T T T

Page 73: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

1: int x :=5;

[-∞,∞]...

( )...

pc x y i

1

T T

73

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 74: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

[-∞,∞]

Step 3: Iterate to a fixed point

1: int x :=5;

... ( )

...

pc x y i

1

T T

[-∞,∞]...

( )...

pc x y i

2

T

[5, 5]

74

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 75: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

2: int y :=7;

[-∞,∞]...

( )...

pc x y i

2

T

[5, 5]

75

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 76: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

2: int y :=7;

[-∞,∞]...

( )...

pc x y i

2

T

[5, 5]

[-∞,∞]...

( )...

pc x y i

3 [5, 5] [7,7]

76

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 77: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

3: if (i ≥ 0)

[-∞,∞]...

( )...

pc x y i

3 [5, 5] [7,7]

77

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 78: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

3: if (i ≥ 0)

[-∞,∞]...

( )...

pc x y i

3 [5, 5] [7,7]

[0,∞]

... ( )...

pc x y i

4 [5, 5] [7,7]

[-∞, -1]

pc x y i

7 [5, 5] [7,7] 78

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 79: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

4: y := y + 1;

[0,∞] ... ( )...

pc x y i

4 [5, 5] [7,7]

79

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 80: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

4: y := y + 1;

[0,∞] ... ( )...

pc x y i

4 [5, 5] [7,7]

[0,∞] ... ( ...

pc x y i

5 [5, 5] [8,8] )80

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 81: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

5: i := i - 1;

[0,∞] ... ( ...

pc x y i

5 [5, 5] [8,8] )

81

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 82: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

5: i := i - 1;

[0,∞] ... ( ...

pc x y i

5 [5, 5] [8,8] )

[-1,∞] ... ( ...

pc x y i

6 [5, 5] [8,8] )82

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 83: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

6: goto 3;

[-1,∞] ... ( ...

pc x y i

6 [5, 5] [8,8] )

[-1,∞] ... ( ...

pc x y i

3 [5, 5] [8,8] )83

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 84: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

join

[-∞,∞] ... (...

pc x y i

3 [5, 5] [7,8] )

[-∞,∞]

pc x y i

3 [5, 5] [7,7]

[-1,∞]

pc x y i

3 [5, 5] [8,8]

What is going on here ?

84

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 85: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

When we have two abstract elements A and B, we can join them to produce their (least) upper bound

denoted by: A B

we have that A A B and B A B

D E means that E is more abstract than D

In our example, we join the abstract states that occur at the same program label

Joins

85

Page 86: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

[-∞,∞] ... ( ...

pc x y i

3 [5, 5] [7,8] )3: if (i ≥ 0)

[0,∞]

... ( )...

pc x y i

4 [5, 5] [7,8]

[-∞, -1]

pc x y i

7 [5, 5] [7,8] 86

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 87: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Step 3: Iterate to a fixed point

[0,∞] ... ( ...

pc x y i

4 [5, 5] [7,8] )

4: y := y + 1

This will never terminate !

y will keep increasing forever !

But states reaching label 7 will always satisfy the assertion !

87

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 88: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Cannot reach a Fixed point

With the interval abstraction we could not reach a fixed point.

The domain has infinite height.

What should we do ?

Introduce a special operator called the widening operator !

It ensures termination at the expense of precision

88

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 89: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Widening instead of Join

widen

[-∞,∞] ... ( ...

pc x y i

3 [5, 5] [7,∞] )

[0,∞]

pc x y i

3 [5, 5] [8,8]

y is increasing, go directly to ∞

89

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

[-∞,∞]

pc x y i

3 [5, 5] [7,7]

Page 90: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Fixed Point after Widening

With widening, our iteration now reaches a fixed point, where at label 7 we have:

(... [-∞,-1]

... pc x y i

7 [5, 5] [7,∞] )

P (0 ≤ y - x)Interval

P (0 ≤ y - x)

interval domain precise enough to prove property !

90

foo (int i) {

1: int x :=5;

2: int y :=7;

3: if (i ≥ 0) {

4: y := y + 1;

5: i := i - 1;

6: goto 3;

}

7: assert 0 ≤ y - x

}

Page 91: Software Architecture and Engineering: Part II · •Programs are everywhere –e.g., cars, smart phones, mobile apps, software-defined networks, spreadsheets, probabilistic programs,

Martin Vechev 91

Questions that should bother you

What are we abstracting exactly?

What are abstract domains mathematically?

How do we discover best/sound abstract transformers? What does best mean?

What is the function that we iterate to a fixed point?

How do we ensure termination of the analysis?