What is static analysis by abstract interpretation? Example of - - PowerPoint PPT Presentation

what is static analysis by abstract interpretation
SMART_READER_LITE
LIVE PREVIEW

What is static analysis by abstract interpretation? Example of - - PowerPoint PPT Presentation

What is static analysis by abstract interpretation? Example of static analysis (input) {n0>=0} n := n0; {n0=n,n0>=0} i := n; {n0=i,n0=n,n0>=0} while (i <> 0 ) do {n0=n,i>=1,n0>=i} j := 0; {n0=n,j=0,i>=1,n0>=i}


slide-1
SLIDE 1
slide-2
SLIDE 2

What is static analysis by abstract interpretation?

slide-3
SLIDE 3

Example of static analysis (input)

{n0>=0} n := n0; {n0=n,n0>=0} i := n; {n0=i,n0=n,n0>=0} while (i <> 0 ) do {n0=n,i>=1,n0>=i} j := 0; {n0=n,j=0,i>=1,n0>=i} while (j <> i) do {n0=n,j>=0,i>=j+1,n0>=i} j := j + 1 {n0=n,j>=1,i>=j,n0>=i}

  • d;

{n0=n,i=j,i>=1,n0>=i} i := i - 1 {i+1=j,n0=n,i>=0,n0>=i+1}

  • d

{n0=n,i=0,n0>=0}

slide-4
SLIDE 4

Example of static analysis (output)

{n0>=0} n := n0; {n0=n,n0>=0} i := n; {n0=i,n0=n,n0>=0} while (i <> 0 ) do {n0=n,i>=1,n0>=i} j := 0; {n0=n,j=0,i>=1,n0>=i} while (j <> i) do {n0=n,j>=0,i>=j+1,n0>=i} j := j + 1 {n0=n,j>=1,i>=j,n0>=i}

  • d;

{n0=n,i=j,i>=1,n0>=i} i := i - 1 {i+1=j,n0=n,i>=0,n0>=i+1}

  • d

{n0=n,i=0,n0>=0}

slide-5
SLIDE 5

Example of static analysis (safety)

{n0>=0} n := n0; {n0=n,n0>=0} i := n;

n0 must be initially nonnegative (otherwise the program does not terminate properly)

{n0=i,n0=n,n0>=0} while (i <> 0 ) do {n0=n,i>=1,n0>=i} j := 0; {n0=n,j=0,i>=1,n0>=i} while (j <> i) do {n0=n,j>=0,i>=j+1,n0>=i} j := j + 1

` j < n0 so no upper overflow

{n0=n,j>=1,i>=j,n0>=i}

  • d;

{n0=n,i=j,i>=1,n0>=i} i := i - 1

` i > 0 so no lower overflow

{i+1=j,n0=n,i>=0,n0>=i+1}

  • d

{n0=n,i=0,n0>=0}

slide-6
SLIDE 6

Static analysis by abstract interpretation

Verification: define and prove automatically a property of the possible behaviors of a complex computer pro- gram; Abstraction: the reasoning/calculus can be done on an ab- straction of these behaviors dealing only with those elements of the behaviors related to the considered property; Theory: abstract interpretation.

slide-7
SLIDE 7

Example of static analysis

Verification: absence of runtime errors; Abstraction: polyhedral abstraction (affine inequalities); Theory: abstract interpretation.

slide-8
SLIDE 8

Potential impact of runtime errors

– 50% of the security attacks on computer systems are through buffer overruns 1! – Embedded computer system crashes easily result from

  • verflows of various kinds.

1 See for example the Microsoft Security Bulletins MS02-065, MS04-011, etc.

slide-9
SLIDE 9

A very informal introduction to the principles of abstract interpretation

slide-10
SLIDE 10

Semantics

The concrete semantics of a program formalizes (is a mathematical model of) the set of all its possible execu- tions in all possible execution environments.

slide-11
SLIDE 11

Graphic example: Possible behaviors

x(t) t

slide-12
SLIDE 12

Undecidability

– The concrete mathematical semantics of a program is an “infinite” mathematical object, not computable; – All non trivial questions on the concrete program se- mantics are undecidable. Example: Kurt Gödel argument on termination – Assume termination(P) would always terminates and returns true iff P always terminates on all input data; – The following program yields a contradiction P ” while termination(P) do skip od.

slide-13
SLIDE 13

Graphic example: Safety properties

The safety properties of a program express that no possi- ble execution in any possible execution environment can reach an erroneous state.

slide-14
SLIDE 14

Graphic example: Safety property

x(t) t

slide-15
SLIDE 15

Safety proofs

– A safety proof consists in proving that the intersection

  • f the program concrete semantics and the forbidden

zone is empty; – Undecidable problem (the concrete semantics is not computable); – Impossible to provide completely automatic answers with finite computer resources and neither human in- teraction nor uncertainty on the answer 2.

2 e.g. probabilistic answer.

slide-16
SLIDE 16

Test/debugging

– consists in considering a subset of the possible execu- tions; – not a correctness proof; – absence of coverage is the main problem.

slide-17
SLIDE 17

Graphic example: Property test/simulation

x(t) t

slide-18
SLIDE 18

Abstract interpretation

– consists in considering an abstract semantics, that is to say a superset of the concrete semantics of the pro- gram; – hence the abstract semantics covers all possible con- crete cases; – correct: if the abstract semantics is safe (does not in- tersect the forbidden zone) then so is the concrete se- mantics.

slide-19
SLIDE 19

Graphic example: Abstract interpretation

x(t) t

slide-20
SLIDE 20

Formal methods

Formal methods are abstract interpretations, which dif- fer in the way to obtain the abstract semantics: – “model checking”:

  • the abstract semantics is given manually by the user;
  • in the form of a finitary model of the program exe-

cution;

  • can be computed automatically, by techniques rele-

vant to static analysis.

slide-21
SLIDE 21

– “deductive methods”:

  • the abstract semantics is specified by verification con-

ditions;

  • the user must provide the abstract semantics in the

form of inductive arguments (e.g. invariants);

  • can be computed automatically by methods relevant

to static analysis. – “static analysis”: the abstract semantics is computed automatically from the program text according to pre- defined abstractions (that can sometimes be tailored automatically/manually by the user).

slide-22
SLIDE 22

Required properties of the abstract semantics

– sound so that no possible error can be forgotten; – precise enough (to avoid false alarms); – as simple/abstract as possible (to avoid combinatorial explosion phenomena).

slide-23
SLIDE 23

Graphic example: Erroneous abstraction — I

x(t) t

slide-24
SLIDE 24

Graphic example: Erroneous abstraction — II

x(t) t

slide-25
SLIDE 25

Graphic example: Imprecision ) false alarms

x(t) t

slide-26
SLIDE 26

Abstract domains

Standard abstractions – that serve as a basis for the design of static analyzers:

  • abstract program data,
  • abstract program basic operations;
  • abstract program control (iteration, procedure, con-

currency, . . . ); – can be parametrized to allow for manual adaptation to the application domains.

slide-27
SLIDE 27

Graphic example: Standard abstraction by intervals

x(t) t

slide-28
SLIDE 28

Graphic example: A more refined abstraction

x(t) t

slide-29
SLIDE 29

A very informal introduction to static analysis algorithms

slide-30
SLIDE 30

Trace semantics

slide-31
SLIDE 31

Trace semantics

– Consider (possibly infinite) traces that is series of states corresponding to executions described by discrete tran- sitions; – The collection of all such traces, starting from the ini- tial states, is the trace semantics.

slide-32
SLIDE 32

Graphic example: Small-steps transition semantics

x(t) t

slide-33
SLIDE 33

Trace semantics, intuition

slide-34
SLIDE 34

Prefix trace semantics

slide-35
SLIDE 35

Prefixes of a finite trace

slide-36
SLIDE 36

Prefixes of an infinite trace

slide-37
SLIDE 37

Prefix trace semantics

Trace semantics: maximal finite and infinite behaviors Prefix trace semantics: finite prefixes of the maximal be- haviors

slide-38
SLIDE 38

Abstraction

This is an abstraction. For example: Trace semantics: fanb j n – 0g Prefix trace semantics: fan j n – 0g[fanb j n – 0g Is there of possible behavior with infinitely many succes- sive a? – Trace semantics: no – Prefix trace semantics: I don’t know

slide-39
SLIDE 39

Prefix trace semantics in fixpoint form

slide-40
SLIDE 40

Least Fixpoint Prefix Trace Semantics

Prefixes = f› j › is an initial stateg [ f› ` ` ` : : : ` ` ` › ` ` ` › j › ` ` ` : : : ` ` ` › 2 Prefixes & › ` ` ` › is a transition stepg

› In general, the equation Prefixes = F(Prefixes) may have multiple solutions; › Choose the least one for subset inclusion „. › Abstractions of this equation lead to effective iterative analysis algorithms.

slide-41
SLIDE 41

Collecting semantics

slide-42
SLIDE 42

Collecting semantics

– Collect all states that can appear on some trace at any given discrete time:

slide-43
SLIDE 43

Collecting abstraction

– This is an abstraction. Does the red trace exists? Trace semantics: no, collecting semantics: I don’t know.

slide-44
SLIDE 44

Graphic example: collecting semantics

x(t) t

slide-45
SLIDE 45

Collecting semantics in fixpoint form

slide-46
SLIDE 46

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-47
SLIDE 47

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-48
SLIDE 48

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-49
SLIDE 49

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-50
SLIDE 50

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-51
SLIDE 51

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-52
SLIDE 52

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-53
SLIDE 53

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-54
SLIDE 54

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-55
SLIDE 55

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-56
SLIDE 56

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-57
SLIDE 57

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-58
SLIDE 58

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-59
SLIDE 59

Graphic example: collecting semantics in fixpoint form

x(t) t

slide-60
SLIDE 60

Interval Abstraction (in iterative fixpoint form)

slide-61
SLIDE 61

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-62
SLIDE 62

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-63
SLIDE 63

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-64
SLIDE 64

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-65
SLIDE 65

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-66
SLIDE 66

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-67
SLIDE 67

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-68
SLIDE 68

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-69
SLIDE 69

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-70
SLIDE 70

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-71
SLIDE 71

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-72
SLIDE 72

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-73
SLIDE 73

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-74
SLIDE 74

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-75
SLIDE 75

Graphic example: traces of intervals in fixpoint form

x(t) t

slide-76
SLIDE 76

Abstraction by Galois connections

slide-77
SLIDE 77

Abstracting sets (i.e. properties)

– Choose an abstract domain, replacing sets of objects (states, traces, . . . ) S by their abstraction ¸(S) – The abstraction function ¸ maps a set of concrete ob- jects to its abstract interpretation; – The inverse concretization function ‚ maps an abstract set of objects to concrete ones; – Forget no concrete objects: (abstraction from above) S „ ‚(¸(S)).

slide-78
SLIDE 78

Interval abstraction ¸

  • fx : [1; 99]; y : [2; 77]g
slide-79
SLIDE 79

Interval concretization ‚

  • fx : [1; 99]; y : [2; 77]g
slide-80
SLIDE 80

The abstraction ¸ is monotone

  • fx : [33; 89]; y : [48; 61]g

v fx : [1; 99]; y : [2; 90]g X „ Y ) ¸(X) v ¸(Y )

slide-81
SLIDE 81

The concretization ‚ is monotone

fx : [33; 89]; y : [48; 61]g v fx : [1; 99]; y : [2; 90]g X v Y ) ‚(X) „ ‚(Y )

slide-82
SLIDE 82

The ‚ ‹ ¸ composition is extensive

  • fx : [1; 99]; y : [2; 77]g

X „ ‚ ‹ ¸(X)

slide-83
SLIDE 83

The ¸ ‹ ‚ composition is reductive

  • fx : [1; 99]; y : [2; 77]g

==v fx : [1; 99]; y : [2; 77]g ¸ ‹ ‚(Y ) ==v Y

slide-84
SLIDE 84

Correspondance between concrete and abstract properties

– The pair h¸; ‚i is a Galois connection: h}(S); „i ` ` ` ! ` ` `

¸ ‚

hD; vi – h}(S); „i ` ` `! ` ! ` ` ` `

¸ ‚

hD; vi when ¸ is onto (equivalently ¸ ‹ ‚ = 1 or ‚ is one-to-one).

slide-85
SLIDE 85

Galois connection

hD; „i ` ` ` ! ` ` `

¸ ‚

hD; vi iff 8x; y 2 D : x „ y = ) ¸(x) v ¸(y) ^ 8x; y 2 D : x v y = ) ‚(x) „ ‚(y) ^ 8x 2 D : x „ ‚(¸(x)) ^ 8y 2 D : ¸(‚(y)) v x iff 8x 2 D; y 2 D : ¸(x) v y ( ) x „ ‚(y)

slide-86
SLIDE 86

Example: Set of traces to trace of intervals abstraction

Set of traces: ¸1 # Trace of sets: ¸2 # Trace of intervals

slide-87
SLIDE 87

Example: Set of traces to reachable states abstraction

Set of traces: ¸1 # Trace of sets: ¸3 # Reachable states

slide-88
SLIDE 88

Composition of Galois Connections

The composition of Galois connections: hL; »i ` ` ` ! ` ` `

¸1 ‚1

hM; vi and: hM; vi ` ` ` ! ` ` `

¸2 ‚2

hN; —i is a Galois connection: hL; »i ` ` ` ` ` ` ! ` ` ` ` ` `

¸2‹¸1 ‚1‹‚2

hN; —i

slide-89
SLIDE 89

Convergence acceleration by widening/narrowing

slide-90
SLIDE 90

Graphic example: upward iteration with widening

x(t) t

slide-91
SLIDE 91

Graphic example: upward iteration with widening

x(t) t

slide-92
SLIDE 92

Graphic example: upward iteration with widening

x(t) t

slide-93
SLIDE 93

Graphic example: upward iteration with widening

x(t) t

slide-94
SLIDE 94

Graphic example: stability of the upward iteration

x(t) t

slide-95
SLIDE 95

Interval widening

– L = f?g[f[‘; u] j ‘; u 2 Z[f`1g^u 2 Z[fg^‘ » ug – The widening extrapolates unstable bounds to infinity: ?

  • X = X

X

  • ? = X

[‘0; u0]

  • [‘1; u1] = [if ‘1 < ‘0 then ` 1 else ‘0;

if u1 > u0 then + 1 else u0] Not monotone. For example [0; 1] v [0; 2] but [0; 1]

  • [0; 2] = [0; +1] 6v [0; 2] = [0; 2]
  • [0; 2]
slide-96
SLIDE 96

Example: Interval analysis (1975)

Program to be analyzed: x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1]

slide-97
SLIDE 97

Example: Interval analysis (1975)

Equations (abstract interpretation of the semantics): x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1]

slide-98
SLIDE 98

Example: Interval analysis (1975)

Resolution by chaotic increasing iteration: x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = ; X2 = ; X3 = ; X4 = ;

slide-99
SLIDE 99

Example: Interval analysis (1975)

Increasing chaotic iteration: x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = ; X3 = ; X4 = ;

slide-100
SLIDE 100

Example: Interval analysis (1975)

Increasing chaotic iteration: x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 1] X3 = ; X4 = ;

slide-101
SLIDE 101

Example: Interval analysis (1975)

Increasing chaotic iteration: x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 1] X3 = [2; 2] X4 = ;

slide-102
SLIDE 102

Example: Interval analysis (1975)

Increasing chaotic iteration: x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 2] X3 = [2; 2] X4 = ;

slide-103
SLIDE 103

Example: Interval analysis (1975)

Increasing chaotic iteration: convergence ! x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 2] X3 = [2; 3] X4 = ;

slide-104
SLIDE 104

Example: Interval analysis (1975)

Increasing chaotic iteration: convergence !! x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 3] X3 = [2; 3] X4 = ;

slide-105
SLIDE 105

Example: Interval analysis (1975)

Increasing chaotic iteration: convergence !!! x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 3] X3 = [2; 4] X4 = ;

slide-106
SLIDE 106

Example: Interval analysis (1975)

Increasing chaotic iteration: convergence !!!! x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 4] X3 = [2; 4] X4 = ;

slide-107
SLIDE 107

Example: Interval analysis (1975)

Increasing chaotic iteration: convergence !!!!! x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 4] X3 = [2; 5] X4 = ;

slide-108
SLIDE 108

Example: Interval analysis (1975)

Increasing chaotic iteration: convergence !!!!!! x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 5] X3 = [2; 5] X4 = ;

slide-109
SLIDE 109

Example: Interval analysis (1975)

Increasing chaotic iteration: convergence !!!!!!! x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 5] X3 = [2; 6] X4 = ;

slide-110
SLIDE 110

Example: Interval analysis (1975)

Convergence speed-up by widening: x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; +1] ( widening X3 = [2; 6] X4 = ;

slide-111
SLIDE 111

Example: Interval analysis (1975)

Decreasing chaotic iteration: x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; +1] X3 = [2; +1] X4 = ;

slide-112
SLIDE 112

Example: Interval analysis (1975)

Decreasing chaotic iteration: x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 9999] X3 = [2; +1] X4 = ;

slide-113
SLIDE 113

Example: Interval analysis (1975)

Decreasing chaotic iteration: x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 9999] X3 = [2; +10000] X4 = ;

slide-114
SLIDE 114

Example: Interval analysis (1975)

Final solution: x := 1; 1: while x < 10000 do 2: x := x + 1 3:

  • d;

4: 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 9999] X3 = [2; +10000] X4 = [+10000; +10000]

slide-115
SLIDE 115

Example: Interval analysis (1975)

Result of the interval analysis: x := 1; 1: {x = 1} while x < 10000 do 2: {x 2 [1; 9999]} x := x + 1 3: {x 2 [2; +10000]}

  • d;

4: {x = 10000} 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : X1 = [1; 1] X2 = [1; 9999] X3 = [2; +10000] X4 = [+10000; +10000]

slide-116
SLIDE 116

Example: Interval analysis (1975)

Checking absence of runtime errors with interval analysis: x := 1; 1: {x = 1} while x < 10000 do 2: {x 2 [1; 9999]} x := x + 1 3: {x 2 [2; +10000]}

  • d;

4: {x = 10000} 8 > > > < > > > : X1 = [1; 1] X2 = (X1 [ X3) \ [`1; 9999] X3 = X2 ˘ [1; 1] X4 = (X1 [ X3) \ [10000; +1] 8 > > > < > > > : ` no overflow X2 = [1; 9999] X3 = [2; +10000] X4 = [+10000; +10000]

slide-117
SLIDE 117

Refinement of abstractions

slide-118
SLIDE 118

Approximations of an [in]finite set of points: from above

x y

f: : : ; h19; 77i; : : : ; h20; 03i; : : :g

slide-119
SLIDE 119

Approximations of an [in]finite set of points: from above

x y

f: : : ; h19; 77i; : : : ; h20; 03i; h?; ?i; : : :g

From Below: dual 3 + combinations.

3 Trivial for finite states (liveness model-checking), more difficult for infinite states (variant functions).

slide-120
SLIDE 120

Effective computable approximations of an [in]finite set of points; Signs

4

x y

 x – 0 y – 0

4 P. Cousot & R. Cousot. Systematic design of program analysis frameworks. ACM POPL’79, pp. 269–282, 1979.

slide-121
SLIDE 121

Effective computable approximations of an [in]finite set of points; Intervals

5

x y

 x 2 [19; 77] y 2 [20; 03]

5 P. Cousot & R. Cousot. Static determination of dynamic properties of programs. Proc. 2nd Int. Symp. on Programming, Dunod, 1976.

slide-122
SLIDE 122

Effective computable approximations of an [in]finite set of points; Octagons

6

x y

8 > > > < > > > : 1 » x » 9 x + y » 77 1 » y » 9 x ` y » 99

6 A. Miné. A New Numerical Abstract Domain Based on Difference-Bound Matrices. PADO ’2001. LNCS 2053,

  • pp. 155–172.

Springer 2001. See the The Octagon Abstract Domain Library

  • n

http://www.di.ens.fr/~mine/oct/

slide-123
SLIDE 123

Effective computable approximations of an [in]finite set of points; Polyhedra

7

x y

 19x + 77y » 2004 20x + 03y – 0

7 P. Cousot & N. Halbwachs. Automatic discovery of linear restraints among variables of a program. ACM POPL, 1978, pp. 84–97.

slide-124
SLIDE 124

Effective computable approximations of an [in]finite set of points; Simple congruences

8

x y

 x = 19 mod 77 y = 20 mod 99

8 Ph. Granger. Static Analysis of Arithmetical Congruences. Int. J. Comput. Math. 30, 1989, pp. 165–190.

slide-125
SLIDE 125

Effective computable approximations of an [in]finite set of points; Linear congruences

9

x y

 1x + 9y = 7 mod 8 2x ` 1y = 9 mod 9

9 Ph. Granger. Static Analysis of Linear Congruence Equalities among Variables of a Program. TAPSOFT ’91, pp. 169–192. LNCS 493, Springer, 1991.

slide-126
SLIDE 126

Effective computable approximations of an [in]finite set of points; Trapezoidal lin- ear congruences

10

x y

 1x + 9y 2 [0; 77] mod 10 2x ` 1y 2 [0; 99] mod 11

10 F. Masdupuy. Array Operations Abstraction Using Semantic Analysis of Trapezoid Congruences. ACM ICS ’92.

slide-127
SLIDE 127

Refinement of iterates

slide-128
SLIDE 128

Graphic example: Refinement required by false alarms

x(t) t

slide-129
SLIDE 129

Graphic example: Partitionning

x(t) t

slide-130
SLIDE 130

Graphic example: partitionned upward itera- tion with widening

x(t) t

slide-131
SLIDE 131

Graphic example: partitionned upward itera- tion with widening

x(t) t

slide-132
SLIDE 132

Graphic example: partitionned upward itera- tion with widening

x(t) t

slide-133
SLIDE 133

Graphic example: partitionned upward itera- tion with widening

x(t) t

slide-134
SLIDE 134

Graphic example: partitionned upward itera- tion with widening

x(t) t

slide-135
SLIDE 135

Graphic example: partitionned upward itera- tion with widening

x(t) t

slide-136
SLIDE 136

Graphic example: partitionned upward itera- tion with widening

x(t) t

slide-137
SLIDE 137

Graphic example: partitionned upward itera- tion with widening

x(t) t

slide-138
SLIDE 138

Graphic example: partitionned upward itera- tion with widening

x(t) t

slide-139
SLIDE 139

Graphic example: partitionned upward itera- tion with widening

x(t) t

slide-140
SLIDE 140

Graphic example: partitionned upward itera- tion with widening

x(t) t

slide-141
SLIDE 141

Graphic example: safety verification

x(t) t

slide-142
SLIDE 142

Interval widening with threshold set

– The threshold set T is a finite set of numbers (plus +1 and `1), – [a; b]

  • T [a0; b0] = [if a0 < a then maxf‘ 2 T j ‘ » a0g

else a; if b0 > b then minfh 2 T j h – b0g else b] : – Examples (intervals):

  • sign analysis: T = f`1; 0; +1g;
  • strict sign analysis: T = f`1; `1; 0; +1; +1g;

– T is a parameter of the analysis.

slide-143
SLIDE 143

Combinations of abstractions

slide-144
SLIDE 144

Forward/reachability analysis

I I

slide-145
SLIDE 145

Backward/ancestry analysis

I I F

slide-146
SLIDE 146

Iterated forward/backward analysis

I F I

slide-147
SLIDE 147

Example of iterated forward/backward analysis

Arithmetical mean of two integers x and y:

{x>=y} while (x <> y) do {x>=y+2} x := x - 1; {x>=y+1} y := y + 1 {x>=y}

  • d

{x=y}

Necessarily x – y for proper termination

slide-148
SLIDE 148

Example of iterated forward/backward analysis

Adding an auxiliary counter k decremented in the loop body and asserted to be null on loop exit:

{x=y+2k,x>=y} while (x <> y) do {x=y+2k,x>=y+2} k := k - 1; {x=y+2k+2,x>=y+2} x := x - 1; {x=y+2k+1,x>=y+1} y := y + 1 {x=y+2k,x>=y}

  • d

{x=y,k=0} assume (k = 0) {x=y,k=0}

Moreover the differ- ence of x and y must be even for proper ter- mination

slide-149
SLIDE 149

Applications of abstract interpretation

slide-150
SLIDE 150

Theoretical applications of abstract interpretation

– Static Program Analysis [POPL ’77,78,79] inluding Data- flow Analysis [POPL ’79,00], Set-based Analysis [FPCA ’95], etc – Syntax Analysis [TCS 290(1) 2002] – Hierarchies of Semantics (including Proofs) [POPL ’92, TCS 277(1–2) 2002] – Typing [POPL ’97] – Model Checking [POPL ’00] – Program Transformation [POPL ’02] – Software watermarking [POPL ’04]

slide-151
SLIDE 151

Industrial applications of abstract interpretation

– Program analysis and manipulation: a small rate of false alarms is acceptable

  • AiT: worst case execution time 11
  • StackAnalyzer: stack usage analysis 11

– Program verification: no false alarms is acceptable

  • TVLA: A system for generating abstract interpreters
  • Astrée: verification of absence of run-time errors 11

11 applied to the primary flight control software of the Airbus A340/600 and A380 fly-by-wire systems

slide-152
SLIDE 152

Bibliography

slide-153
SLIDE 153

Seminal papers

– Patrick Cousot & Radhia Cousot. Abstract interpretation: a unified lattice model for static analysis of programs by con- struction or approximation of fixpoints. In 4th Symp. on Prin- ciples of Programming Languages, pages 238—252. ACM Press, 1977. – Patrick Cousot & Nicolas Halbwachs. Automatic discovery of linear restraints among variables of a program. In 5th Symp.

  • n Principles of Programming Languages, pages 84—97. ACM

Press, 1978. – Patrick Cousot & Radhia Cousot. Systematic design of pro- gram analysis frameworks. In 6th Symp. on Principles of Pro- gramming Languages pages 269—282. ACM Press, 1979.

slide-154
SLIDE 154

Recent surveys

– Patrick Cousot. Interprétation abstraite. Technique et Science Informatique, Vol. 19, Nb 1-2-3. Janvier 2000, Hermès, Paris,

  • France. pp. 155-164.

– Patrick Cousot. Abstract Interpretation Based Formal Meth-

  • ds and Future Challenges. In Informatics, 10 Years Back —

10 Years Ahead, R. Wilhelm (Ed.), LNCS 2000, pp. 138-156, 2001. – Patrick Cousot & Radhia Cousot. Abstract Interpretation Based Verification of Embedded Software: Problems and Per-

  • spectives. In Proc. 1st Int. Workshop on Embedded Software,

EMSOFT 2001, T.A. Henzinger & C.M. Kirsch (Eds.), LNCS 2211, pp. 97–113. Springer, 2001.

slide-155
SLIDE 155
slide-156
SLIDE 156

Anticipated Content of Course 16.399: Abstract Interpretation

– Today : an informal overview of abstract interpreta- tion; – The software verification problem (undecidability, com- plexity, test, simulation, specification, formal methods (deductive methods, model-checking, static analysis) and their limitations, intuitive notion of approxima- tion, false alarms); – Mathematical foundations (naive set theory, first order classical logic, lattice theory, fixpoints);

slide-157
SLIDE 157

– Semantics of programming languages (abstract syntax,

  • perational semantics, inductive definitions, example
  • f a simple imperative language, grammar and inter-

pretor of the language, trace semantics); – Program specification and manual proofs (safety prop- erties, Hoare logic, predicate transformers, liveness prop- erties, linear-time temporal logic (LTL)); – Order-theoretic approximation (abstraction, closures, Galois connections, fixpoint abstraction, widening, nar- rowing, reduced product, absence of best approxima- tion, refinement);

slide-158
SLIDE 158

– Principle of static analysis by abstract interpretation (reachability analysis of a transition system, finite ap- proximation, model-checking, infinite approximation, static analysis, program-based versus language-based analysis, limitations of finite approximations); – Design of a generic structural abstract interpreter (col- lecting semantics, non-relational and relational analy- sis, convergence acceleration by wideing/narrowing); – Static analysis (forward reachability analysis, back- ward analysis, iterated forward/backward analysis, in- evitability analysis, termination)

slide-159
SLIDE 159

– Numerical abstract domains (intervals, affine equali- ties, congruences, octagons, polyhedra); – Symbolic abstract domains (abstraction of sequences, trees and graphs, BDDs, word and tree automata, pointer analysis); – Case studies (abstractions used in ASTREE and TVLA);

slide-160
SLIDE 160

Anticipated Home Work of Course 16.399: Abstract Interpretation

– A reading assignment of the slides for each course and

  • f a recommanded recently published research article

related to that course; – A personnal project on the design and implementa- tion of a static analyzer of numerical programs (which frontend will be provided)

slide-161
SLIDE 161

Assigned reading for course 1

Patrick Cousot. Abstract Interpretation Based Formal Methods and Future Challenges. In Informatics, 10 Years Back — 10 Years Ahead,

  • R. Wilhelm (Ed.), Lecture Notes in Computer Science

2000, pp. 138–156, 2001.

slide-162
SLIDE 162
slide-163
SLIDE 163