Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build...

123
Logic-Flow Analysis of Higher-Order Programs Matt Might http://matt.might.net/ POPL 2007 1

Transcript of Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build...

Page 1: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Logic-Flow Analysis of Higher-Order Programs

Matt Might

http://matt.might.net/

POPL 2007

1

Page 2: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Why?

Tim Sweeney, POPL 2006Static array-bounds checking.

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

2

Page 3: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Why?

Tim Sweeney, POPL 2006Static array-bounds checking.

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Wait...Hasn’t this been done already? (Range analysis, etc.)

3

Page 4: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Why?

Tim Sweeney, POPL 2006Static array-bounds checking.

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Wait...Hasn’t this been done already? (Range analysis, etc.)Yeah, but not for permutation/vertex array code.

4

Page 5: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Why?

Tim Sweeney, POPL 2006Static array-bounds checking.

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Wait...Hasn’t this been done already? (Range analysis, etc.)Yeah, but not for permutation/vertex array code.

Not the big ideaLFA is not about array-bounds checking.

5

Page 6: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

The Idea

Theorem Proving Flow Analysis

6

Page 7: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

The Idea

Theorem Proving Flow Analysis

7

Page 8: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

The Idea

Theorem Proving Flow Analysis

8

Page 9: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

How?

Abstract interpretation

Mechanical (flow): ς // ς ′ // ς ′′ // · · ·

Propositional (logic): Π // Π′ // Π′′ // · · ·

9

Page 10: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

How?

Abstract interpretation

Mechanical (flow): ς //

��

ς ′ //

ς ′′ //

· · ·

Propositional (logic): Π //

??��������Π′ //

>>~~~~~~~~Π′′ //

>>}}}}}}}}}· · ·

10

Page 11: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Higher-order flow analysis fails

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

11

Page 12: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Higher-order flow analysis fails

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Flow analysis results

◮ a is an array.

12

Page 13: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Higher-order flow analysis fails

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Flow analysis results

◮ a is an array from line 10 or line 30.

13

Page 14: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Higher-order flow analysis fails

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Flow analysis results

◮ a is an array from line 10 or line 30.◮ i is an integer.

14

Page 15: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Higher-order flow analysis fails

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Flow analysis results

◮ a is an array from line 10 or line 30.◮ i is a non-negative integer.

15

Page 16: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Higher-order flow analysis fails

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Flow analysis results

◮ a is an array from line 10 or line 30.◮ i is a non-negative integer.◮ a.length is a positive integer.

16

Page 17: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Higher-order flow analysis fails

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Flow analysis results

◮ a is an array from line 10 or line 30.◮ i is a non-negative integer.◮ a.length is a positive integer.

Insufficiently rich informationFrequently can’t show i < a.length.

17

Page 18: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

First attempt: Enrich flow values with relations

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

18

Page 19: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

First attempt: Enrich flow values with relations

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Hypothetical results

◮ a is an array from line 10 or line 30.◮ i is a non-negative integer.◮ a.length is a positive integer.

19

Page 20: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

First attempt: Enrich flow values with relations

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Hypothetical results

◮ a is an array from line 10 or line 30.◮ i is in {x : 0 ≤ x < a.length}.◮ a.length is a positive integer.

20

Page 21: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

First attempt: Enrich flow values with relations

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Hypothetical results

◮ a is an array from line 10 or line 30.◮ i is in {x : 0 ≤ x < a.length}.◮ a.length is a positive integer.

Problems

1. What does a.length mean where a is out of scope?

2. How did this set get there in the first place?

21

Page 22: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

First attempt: Enrich flow values with relations

Example

... a[i] ...

Will 0 ≤ i < a.length always hold?

Hypothetical results

◮ a is an array from line 10 or line 30.◮ i is in {x : 0 ≤ x < a.length}.◮ a.length is a positive integer.

Problems

1. What does a.length mean where a is out of scope?

2. How did this set get there in the first place?

22

Page 23: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Problem 1: Meaning of variables

Ambiguity problem

◮ Need environment-independent identities for values.

23

Page 24: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Problem 1: Meaning of variables

Ambiguity problem

◮ Need environment-independent identities for values.

Solutions

◮ Constants. E.g. 5 means 5 anywhere.

24

Page 25: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Problem 1: Meaning of variables

Ambiguity problem

◮ Need environment-independent identities for values.

Solutions

◮ Constants. E.g. 5 means 5 anywhere.◮ Heap locations. E.g. Heap location 10 offset 3.

25

Page 26: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Problem 1: Meaning of variables

Ambiguity problem

◮ Need environment-independent identities for values.

Solutions

◮ Constants. E.g. 5 means 5 anywhere.◮ Heap locations. E.g. Heap location 10 offset 3.◮ Bindings. [Shivers 1988]

26

Page 27: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Bindings

DefinitionA binding is a variable-time pairing, e.g. (x, 3).

27

Page 28: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Bindings

DefinitionA binding is a variable-time pairing, e.g. (x, 3).

Example (Variable v. binding)

◮ Value of variable x depends on environment.◮ Value of x bound at time 3: Same in any environment/state.

28

Page 29: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Bindings

DefinitionA binding is a variable-time pairing, e.g. (x, 3).

Example (Variable v. binding)

◮ Value of variable x depends on environment.◮ Value of x bound at time 3: Same in any environment/state.

Example (Abstract bindings)

◮ 0CFA: All values of x bound at any time.◮ 1CFA: All values of x bound at a time while calling foo.

29

Page 30: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Strategy

◮ Build binding-sensitive flow analysis.

30

Page 31: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Strategy

◮ Build binding-sensitive flow analysis.◮ Build binding-sensitive logic.

31

Page 32: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Strategy

◮ Build binding-sensitive flow analysis.◮ Build binding-sensitive logic.◮ Build binding-sensitive propositional abstract interpretation.

32

Page 33: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Strategy

◮ Build binding-sensitive flow analysis.◮ Build binding-sensitive logic.◮ Build binding-sensitive propositional abstract interpretation.◮ Weave.

33

Page 34: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Tool 1: Continuation-passing style (CPS)

Contract

◮ Calls never return.◮ Continuations are passed to receive the result.

ExampleDirect-style identity function:

(define (id x)

x)

ExampleCPS identity function:

(define (id x return)

(return x))

34

Page 35: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

CPS simplifies

In CPS,fun call,fun return,conditional branch,sequencing,iteration,exception throw,coroutine switch,continuation invocation...

35

Page 36: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

CPS simplifies

In CPS,fun call,fun return,conditional branch,sequencing,iteration,exception throw,coroutine switch,continuation invocation...

...all become call to λ

36

Page 37: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

CPS simplifies

In CPS,fun call,fun return,conditional branch,sequencing,iteration,exception throw,coroutine switch,continuation invocation...

...all become call to λ

Machine state without CPS

ς ∈ State = CALL × Env × Store × Stack × Time

37

Page 38: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

CPS simplifies

In CPS,fun call,fun return,conditional branch,sequencing,iteration,exception throw,coroutine switch,continuation invocation...

...all become call to λ

Machine state without CPS

ς ∈ State = CALL × Env × Store × Stack × Time

38

Page 39: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

CPS simplifies

In CPS,fun call,fun return,conditional branch,sequencing,iteration,exception throw,coroutine switch,continuation invocation...

...all become call to λ

Machine state with CPS

ς ∈ State = CALL × Env × Store × Time

39

Page 40: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Tool 2: Machine-based abstract interpretation

IdeaAbstract machine states component-wise.

Machine state

◮ A call site.◮ An environment for variable lookup.◮ A heap.◮ A time.

More formally

ς ∈ State = CALL × Env × Store × Time

40

Page 41: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Tool 2: Machine-based abstract interpretation

IdeaAbstract machine states component-wise.

Abstract machine state

◮ An abstract call site.◮ An abstract environment for variable lookup.◮ An abstract heap.◮ An abstract time.

More formally

ς ∈ State = CALL × Env × Store × Time

41

Page 42: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Tool 2: Machine-based abstract interpretation

IdeaAbstract machine states component-wise.

Abstract machine state

◮ An abstract call site.◮ An abstract environment for variable lookup.◮ An abstract heap.◮ An abstract time.

More formally

ς ∈ State = CALL × Env × Store × Time

42

Page 43: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Binding-factored environment

DefinitionAn environment maps variables to values.

43

Page 44: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Binding-factored environment

DefinitionAn environment maps variables to values.

DefinitionA binding-factored environment (β, ve) [Shivers 1988] maps:

◮ variables to their binding times. (β)◮ and then, variables plus times (bindings) to values. (ve)

44

Page 45: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Tool 3: Restricted first-order logic for states

Features

◮ Propositions are facts about concrete machine states.◮ Ground terms are identities (bindings, locations, constants).

45

Page 46: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Tool 3: Restricted first-order logic for states

Features

◮ Propositions are facts about concrete machine states.◮ Ground terms are identities (bindings, locations, constants).

Restrictions

◮ No existential quantifiers.◮ Only outer-level universal quantifiers.◮ Quantifiers range over abstract identities.

46

Page 47: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Proposition

Example“Every value of x bound while calling foo

is less than the length of every array bound to a.”

47

Page 48: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Proposition

Example“Every value of x bound while calling foo

is less than the length of every array bound to a.”

In longhand:

(forall x : (x, tfoo)(forall a : (a,⊤)(< x (alen a))))

48

Page 49: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Proposition

Example“Every value of x bound while calling foo

is less than the length of every array bound to a.”

In longhand:

(forall x : (x, tfoo)(forall a : (a,⊤)(< x (alen a))))

Or, in convenient (but incomplete) shorthand:

(< (x, tfoo) (alen (a,⊤)))

49

Page 50: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Logic syntax

Features

◮ S-Expressions.◮ Just or, not.◮ Relations encoded as functions.

50

Page 51: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Logic semantics

QuestionHow do we know when proposition φ is true for state ς?

51

Page 52: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Logic semantics

QuestionHow do we know when proposition φ is true for state ς?

AnswerWhen ς |= φ holds.

52

Page 53: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Logic semantics

QuestionHow do we know when proposition φ is true for state ς?

AnswerWhen ς |= φ holds.

Means exactly what you think it means.

53

Page 54: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Filtered concretization

Set of conrete states (State)

54

Page 55: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Filtered concretization

ς

Set of conrete states (State) {ς : |ς| ⊑ ς }

55

Page 56: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Filtered concretization

Π

Set of conrete states (State) {ς : ς |= Π}

56

Page 57: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Filtered concretization

ς Πς/Π

Set of conrete states (State) {ς : |ς| ⊑ ς and ς |= Π}

57

Page 58: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Deriving new propositions

ExampleIf ς |= (= x y)

and ς |= (= y z),does ς |= (= x z) hold?

58

Page 59: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Deriving new propositions

ExampleIf ς |= (= x y)

and ς |= (= y z),does ς |= (= x z) hold?

AnswerYes, if {(= x y), (= y z)} ⊢ (= x z) holds.

59

Page 60: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Deriving new propositions

ExampleIf ς |= (= x y)

and ς |= (= y z),does ς |= (= x z) hold?

AnswerYes, if {(= x y), (= y z)} ⊢ (= x z) holds.

(Assm)ψ ∈ ΠΠ ⊢ ψ

(∨Ant)Π ∪ {φ1} ⊢ φ3 Π ∪ {φ2} ⊢ φ3

Π ∪ {(or φ1 φ2)} ⊢ φ3

(Subst)Π ⊢ (= ι ι′) Π ⊢ ψ[ι/x]

Π ⊢ ψ[ι′/x]

(Ant)Π ⊢ φΠ ⊆ Π′

Π′ ⊢ φ

(Cases)Π ∪ {φ1} ⊢ φ2

Π ∪ {(not φ1)} ⊢ φ2

Π ⊢ φ2

(Contr)Π ∪ {(not φ1)} ⊢ φ2

Π ∪ {(not φ1)} ⊢ (not φ2)

Π ⊢ φ1

(Eq) Π ⊢ (= ι ι) (∨Cons)Π ⊢ φ1

Π ⊢ (or φ1 φ2), (or φ2 φ1)(Int)

Π ⊢ (forall x : ι φ) {φ} ⊢ φ′

Π ⊢ (forall x : ι (and φ φ′))

(∀Intro)Π ⊢ ψ x 6∈ free(ψ)Π ⊢ (forall x : ι ψ)

(∀Swap)Π ⊢ (forall 〈x1, x2〉 : 〈ι1, ι2〉 ψ)Π ⊢ (forall 〈x2, x1〉 : 〈ι2, ι1〉 ψ)

60

Page 61: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Trusting the theorem prover

Summary

◮ |= : What a proposition means.◮ ⊢ : What a proposition implies.

61

Page 62: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Trusting the theorem prover

Summary

◮ |= : What a proposition means.◮ ⊢ : What a proposition implies.

QuestionHow can we trust an external theorem prover?

62

Page 63: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Trusting the theorem prover

Summary

◮ |= : What a proposition means.◮ ⊢ : What a proposition implies.

QuestionHow can we trust an external theorem prover?

Theorem (Syntactic soundness)

If Π ⊢ φ holds, then Π |= φ holds.

63

Page 64: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

All together now

64

Page 65: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Woven state

Example (Machine, ς)call site (f x k)

local env f 7→ tfook 7→ tfoox 7→ tfoo

global env (f, tfoo) 7→ · · ·

(k, tfoo) 7→ · · ·

(x, tfoo) 7→ positive

(z, tbar) 7→ positive

time tf

Example (Assumptions, Π)

(forall x : (x, tfoo)(forall z : (z, tbar)(< x z)))

65

Page 66: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Woven state

Example (Machine, ς)call site (f x k)

local env f 7→ tfook 7→ tfoox 7→ tfoo

global env (f, tfoo) 7→ · · ·

(k, tfoo) 7→ · · ·

(x, tfoo) 7→ positive

(z, tbar) 7→ positive

time tf

Example (Assumptions, Π)

(forall x : (x, tfoo)(forall z : (z, tbar)(< x z)))

66

Page 67: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Woven transition relation

Old machine state New machine state

(ς ,Π) |=> (ς ′,Π′)

Old assumption base New assumption base

67

Page 68: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Transition

Examplecall site (f x k)

time tf

68

Page 69: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Transition

Examplecall site (f x k)

local env f 7→ tfoo

time tf

69

Page 70: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Transition

Examplecall site (f x k)

local env f 7→ tfoo

global env (f, tfoo) 7→ a closure over (λ (a q) ...)

time tf

70

Page 71: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Transition

Examplecall site (f x k)

local env f 7→ tfoox 7→ tfoo

global env (f, tfoo) 7→ a closure over (λ (a q) ...)

time tf

71

Page 72: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Transition

Examplecall site (f x k)

local env f 7→ tfoox 7→ tfoo

global env (f, tfoo) 7→ a closure over (λ (a q) ...)

time tf

New fact?

(forall 〈x, a〉 : 〈(x, tfoo), (a, tf)〉 (= x a))

72

Page 73: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

It depends.

73

Page 74: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Chaining equal values

Candidate for Π′

φ = (forall 〈x, a〉 : 〈(x, tfoo), (a, tf)〉 (= x a))

PrerequisitesCan add it if Π ⊢ φ.

Chicken and eggHow can φ be in there already?

74

Page 75: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

ΓCFA: Abstract counting

IdeaKeep count of concrete counterparts to abstract identities.

75

Page 76: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

ΓCFA: Abstract counting

IdeaKeep count of concrete counterparts to abstract identities.

Mechanism

◮ Add counter to every abstract machine state.◮ Counter maps each binding to times allocated.◮ Stop counting after 1.

76

Page 77: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

ΓCFA: Abstract counting

IdeaKeep count of concrete counterparts to abstract identities.

Mechanism

◮ Add counter to every abstract machine state.◮ Counter maps each binding to times allocated.◮ Stop counting after 1.

TheoremIf {binding1} = {binding2},then binding1 = binding2.

77

Page 78: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Chaining equal values

Candidate for Π′

φ = (forall 〈x, a〉 : 〈(x, tfoo), (a, tf)〉 (= x a))

Prerequisites

◮ Can add it if Π ⊢ φ.◮ Or, if count of (x, tfoo) is 1 and count of (a, tf) is 0.

78

Page 79: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

ΓCFA: Abstract garbage collection

IdeaDiscard unreachable bindings.

79

Page 80: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

ΓCFA: Abstract garbage collection

IdeaDiscard unreachable bindings.

Mechanism

◮ Start with bindings touched by current state.◮ Take transitive closure.◮ Can reset unreachable bindings’ counts to 0.

80

Page 81: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Chaining equal values

Candidate for Π′

φ = (forall 〈x, a〉 : 〈(x, tfoo), (a, tf)〉 (= x a))

Prerequisites

◮ Can add it if Π ⊢ φ.◮ Or, if count of (x, tfoo) is 1 and count of (a, tf) is 0.◮ Or, if count of (x, tfoo) is 1 and (a, tf) is unreachable.◮ (More in paper.)

81

Page 82: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Invertible rebinding

Examplecall site (f (+ x 1) k)

local env f 7→ tfoox 7→ tf

global env (f, tfoo) 7→ a closure over (λ (x q) ...)

time tf

Updating assumption baseCan replace (x, tf) with (- (x, tf) 1) in Π?

82

Page 83: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Invertible rebinding

Examplecall site (f (+ x 1) k)

local env f 7→ tfoox 7→ tf

global env (f, tfoo) 7→ a closure over (λ (x q) ...)

time tf

Updating assumption baseCan replace (x, tf) with (- (x, tf) 1) in Π?

Yes, if (x, tf) is unreachable and its count is 1.

(E.g. tail recursion, for loops.)

(More on this in the paper.)83

Page 84: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Conditional

Examplecall site (if (< i (alen a)) ... ...)

84

Page 85: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Conditional

Examplecall site (if (< i (alen a)) ... ...)

Case 1Π can (dis)prove (< i (alen a)). Branch one way.

ςtrue

ς

AAA

AAAA

A

ςfalse

85

Page 86: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Conditional

Examplecall site (if (< i (alen a)) ... ...)

Case 2(< i (alen a)) has one counterpart. Branch both ways & assert.

ςtrue

ς

(< i (alen a))>>||||||||

(not (< i (alen a))) AAA

AAAA

A

ςfalse

86

Page 87: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Example: Conditional

Examplecall site (if (< i (alen a)) ... ...)

Case 3None of the above. Branch both ways. Don’t touch Π′.

ςtrue

ς

>>||||||||

AAA

AAAA

A

ςfalse

87

Page 88: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

Example

for (i = 0; i < a.length; i++)

print(a[i]) ;

Example (CPS)

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Parameters

◮ 0CFA contour set. (Bindings = Variables.)

88

Page 89: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a))

89

Page 90: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a))

90

Page 91: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (= 0 i)

91

Page 92: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (= 0 i)

92

Page 93: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (= 0 i)

Safe0 ≤ i < (alen a) holds!

93

Page 94: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (= 0 i)

94

Page 95: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (= 0 i)

95

Page 96: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (= 0 (- i 1))

96

Page 97: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (≤ 0 i)

97

Page 98: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (≤ 0 i), (< i (alen a))

Safe0 ≤ i < (alen a) holds!

98

Page 99: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (≤ 0 i), (< i (alen a))

99

Page 100: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (≤ 0 i), (< i (alen a))

100

Page 101: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (≤ 0 (- i 1)), (< (- i 1) (alen a))

101

Page 102: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (≤ 0 i), (< (- i 1) (alen a)), (< i (alen a))

Safe0 ≤ i < (alen a) holds!

102

Page 103: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Walkthrough: Simple for loop

(letrec ((loop (λ (i)

(if (< i (alen a))

(print (aget a i) (λ ()

(loop (+ i 1))))

...))))

(loop 0))

Assumption base, Π

(< 0 (alen a)), (≤ 0 i), (< i (alen a))

FinishedState already visited.

103

Page 104: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

More in the paper

◮ Formal treatment.◮ Flow analysis as oracle inference rules.◮ More rules for assumption base management.◮ Rules for handling arrays.◮ Three-page worked example for vertex arrays.

104

Page 105: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & inspiring work

◮ Cousot & Cousot. (Abstract interpretation)

105

Page 106: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & inspiring work

◮ Cousot & Cousot. (Abstract interpretation)◮ Cousot & Cousot. (Invariant synthesis)

106

Page 107: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & inspiring work

◮ Cousot & Cousot. (Abstract interpretation)◮ Cousot & Cousot. (Invariant synthesis)◮ Cousot & Cousot. (Widening & narrowing)

107

Page 108: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & inspiring work

◮ Cousot & Cousot. (Abstract interpretation)◮ Cousot & Cousot. (Invariant synthesis)◮ Cousot & Cousot. (Widening & narrowing)◮ Cousot & Cousot. (Relational abstract domains)

108

Page 109: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & inspiring work

◮ Cousot & Cousot. (Abstract interpretation)◮ Cousot & Cousot. (Invariant synthesis)◮ Cousot & Cousot. (Widening & narrowing)◮ Cousot & Cousot. (Relational abstract domains)◮ Shivers. (Control-flow analysis w/ factored environment)

109

Page 110: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & inspiring work

◮ Cousot & Cousot. (Abstract interpretation)◮ Cousot & Cousot. (Invariant synthesis)◮ Cousot & Cousot. (Widening & narrowing)◮ Cousot & Cousot. (Relational abstract domains)◮ Shivers. (Control-flow analysis w/ factored environment)◮ Hudak. (Abstract reference counting)

110

Page 111: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & inspiring work

◮ Cousot & Cousot. (Abstract interpretation)◮ Cousot & Cousot. (Invariant synthesis)◮ Cousot & Cousot. (Widening & narrowing)◮ Cousot & Cousot. (Relational abstract domains)◮ Shivers. (Control-flow analysis w/ factored environment)◮ Hudak. (Abstract reference counting)◮ Nanevski & Morrisett. (Soundness of theorem prover interaction)

111

Page 112: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & inspiring work

◮ Cousot & Cousot. (Abstract interpretation)◮ Cousot & Cousot. (Invariant synthesis)◮ Cousot & Cousot. (Widening & narrowing)◮ Cousot & Cousot. (Relational abstract domains)◮ Shivers. (Control-flow analysis w/ factored environment)◮ Hudak. (Abstract reference counting)◮ Nanevski & Morrisett. (Soundness of theorem prover interaction)◮ Ball. (Predicate abstraction)

112

Page 113: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & inspiring work

◮ Cousot & Cousot. (Abstract interpretation)◮ Cousot & Cousot. (Invariant synthesis)◮ Cousot & Cousot. (Widening & narrowing)◮ Cousot & Cousot. (Relational abstract domains)◮ Shivers. (Control-flow analysis w/ factored environment)◮ Hudak. (Abstract reference counting)◮ Nanevski & Morrisett. (Soundness of theorem prover interaction)◮ Ball. (Predicate abstraction)◮ ...

113

Page 114: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & future work

∆CFA

��LFA

ΓCFA

99ttttttttt

114

Page 115: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & future work

∆CFA

��LFA

ΓCFA

99ttttttttt��

FF

115

Page 116: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Related & future work

∆CFA

��LFA

ΓCFA

99ttttttttt

ΘCFA

eeKKKKKKKKK

116

Page 117: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Conclusion

HOFA + FOL = LFA

117

Page 118: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

Conclusion

HOFA + FOL = LFAMerci

118

Page 119: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

QuestionWhat are some other applications of LFA?

Answer

◮ Improving flow precision.◮ Static checks of assert statements.◮ Pre- and post-condition checks.

119

Page 120: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

QuestionDo you have an implementation?

AnswerHalf of one:

◮ Modified ACL/2 for theorem prover.◮ Modified ΓCFA.

Goal: Meet in the middle.

120

Page 121: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

QuestionDoes a backward version exist?

Answer

◮ Not yet.◮ Start by widening into constraint-solving form.

121

Page 122: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

QuestionWhat is the complexity of LFA?

AnswerExponential in theory.Usually much friendlier in pratice.It depends on......the contour set....the degree of widening to assumption base & abstract heap.

122

Page 123: Logic-Flow Analysis of Higher-Order Programsmatt.might.net/papers/might2007lfa-slides.pdf · Build binding-sensitive propositional abstract interpretation. ... Tool 2: Machine-based

QuestionDo you support floats?

AnswerPatrick, not yet.

123