50
Verification of Recursive Methods on Tree-like Data Structures Jyotirmoy V. Deshmukh E. Allen Emerson {deshmukh,emerson}@cs.utexas.edu University of Texas at Austin Formal Methods in Computer-Aided Design 2009 University of Texas at Austin Verifying Recursive Methods on Trees 1 / 30

Verification of Recursive Methods on Tree-like Data Structures

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Verification of Recursive Methods on Tree-like Data Structures

Verification of Recursive Methods on Tree-like DataStructures

Jyotirmoy V. Deshmukh E. Allen Emerson{deshmukh,emerson}@cs.utexas.edu

University of Texas at Austin

Formal Methods in Computer-Aided Design 2009

University of Texas at Austin Verifying Recursive Methods on Trees 1 / 30

Page 2: Verification of Recursive Methods on Tree-like Data Structures

Recursive Methods are Everywhere!

Data Structure Libraries.File Systems.BDD packages.Netlist Manipulation Routines.

University of Texas at Austin Verifying Recursive Methods on Trees 2 / 30

Page 3: Verification of Recursive Methods on Tree-like Data Structures

Recursive Method: changeData

void changeData (iter) {if ((iter->next1==∅) && (iter->next2==∅)) {

incMod3(iter->data);return;

}incMod3 (iter->data);if (iter->next1!=∅) { changeData (iter->next1); }incMod3 (iter->data);if (iter->next2!=∅) { changeData (iter->next2); }incMod3 (iter->data);return;

}

void incMod3 (x) {return (x + 1) mod 3;

}

University of Texas at Austin Verifying Recursive Methods on Trees 3 / 30

Page 4: Verification of Recursive Methods on Tree-like Data Structures

Properties of Interest

Sample Pre-Condition

Input is a binary tree, data values in {0,1,2}.

Sample Post-Condition(s)(A) Output is an acyclic data structure.(B) Output is a binary tree (subsumes (A)).(C) Leaf nodes in Output incremented by one (mod 3).(D) Non-leaf nodes in Output remain unchanged.

Verification instance of the Parameterized Reasoning problem.

University of Texas at Austin Verifying Recursive Methods on Trees 4 / 30

Page 5: Verification of Recursive Methods on Tree-like Data Structures

General Methods and Properties

In general, methods could . . .

Change links.Add nodes.Delete nodes.

For example, specifications could be . . .Sorted-ness in a list.Left key is less than Right key.Both children of every red node are black.All leaves are black.

University of Texas at Austin Verifying Recursive Methods on Trees 5 / 30

Page 6: Verification of Recursive Methods on Tree-like Data Structures

Outline

1 Scope

2 Method Automata

3 Verification Framework

4 Complexity and Results

University of Texas at Austin Verifying Recursive Methods on Trees 6 / 30

Page 7: Verification of Recursive Methods on Tree-like Data Structures

Scope

Outline

1 Scope

2 Method Automata

3 Verification Framework

4 Complexity and Results

University of Texas at Austin Verifying Recursive Methods on Trees 7 / 30

Page 8: Verification of Recursive Methods on Tree-like Data Structures

Scope

Most General Recursive Method over a Tree...

Signature:Arbitrary pointer arguments, data arguments.Pointer/Data value as return value.

Body: (in no particular order)Assignments to pointer expressions.Recursive calls.Access to global pointer/data values.

University of Texas at Austin Verifying Recursive Methods on Trees 8 / 30

Page 9: Verification of Recursive Methods on Tree-like Data Structures

Scope

Decidable Fragment

An arbitrary recursive method can simulate a Turing Machine.

Syntactic restrictions for decidability?Disallow:

Global pointer variables.(. . . else method models k -pebble automaton)

Pointers arbitrarily far apart.(. . . else method models k -headed automaton)

Unbounded destructive changes.(. . . else method models linear bounded automaton)

University of Texas at Austin Verifying Recursive Methods on Trees 9 / 30

Page 10: Verification of Recursive Methods on Tree-like Data Structures

Scope

Decidable Fragment

Syntactic restrictions for decidability?Disallow:

Global pointer variables.(. . . else method models k -pebble automata)

Pointers arbitrarily far apart.(. . . else method models k -headed automata)

Unbounded destructive changes.(. . . else method models Linear Bounded Automata)

University of Texas at Austin Verifying Recursive Methods on Trees 10 / 30

Page 11: Verification of Recursive Methods on Tree-like Data Structures

Scope

Syntactic Fragment: Updates within a bounded region

Designated pointer argument ‘iterator’ (iter).

Destructive Update relative to iter

ptr = iter, iter->nextj , iter->nextj-> . . .->nextk .

ptr->data = d;

ptr->nextj = ptr’;

ptr->nextj = new node(d, ptr1, ...ptrk);

delete(ptr);

University of Texas at Austin Verifying Recursive Methods on Trees 11 / 30

Page 12: Verification of Recursive Methods on Tree-like Data Structures

Scope

Windows: Model updates within a bounded distance

Definition (Window)Finite Encoding for neighborhood of node.Concrete address replaced by “Local” address.

a 0x60 0x80

b 0xa0 ⊥ c 0x40 0xc0

0x40:

0x60:0x60:

a 1 2

b * ⊥ c 0 *

0:

1: 2:

University of Texas at Austin Verifying Recursive Methods on Trees 12 / 30

Page 13: Verification of Recursive Methods on Tree-like Data Structures

Scope

Abstract Tree

a

Ti

b c

a d ⊥ e

⊥ ⊥ b c ⊥ c

T̃i

⊥ ⊥ ⊥

a

b c

b

a d

c

⊥ e

a

⊥ ⊥

d

b c

e

⊥ c

Obtain Ti from T̃i by eliding everything but the root of each window.

University of Texas at Austin Verifying Recursive Methods on Trees 13 / 30

Page 14: Verification of Recursive Methods on Tree-like Data Structures

Scope

Decidable Fragment

Syntactic restrictions for decidability?Disallow:

Global pointer variables.(. . . else method models k -pebble automata)

Pointers arbitrarily far apart.(. . . else method models k -headed automata)

Unbounded destructive changes.(. . . else method models Linear Bounded Automata)

University of Texas at Austin Verifying Recursive Methods on Trees 14 / 30

Page 15: Verification of Recursive Methods on Tree-like Data Structures

Scope

Syntactic Fragment: Bounded Destructive Updates

Lemma

For trees, ≤ 1 recursive invocation/child⇒ #destructive updates byM bounded.

Proof.

M can destructively update n:

(0) whenM first visits n (after invoked from parent of n),

(1) whenM returns from 1st recursive call,...

(K) whenM returns from K th recursive call.

⇒M destructively updates n at most K + 1 times.K is fixed for given K -ary tree.

University of Texas at Austin Verifying Recursive Methods on Trees 15 / 30

Page 16: Verification of Recursive Methods on Tree-like Data Structures

Scope

Decidable Fragment

Syntactic restrictions for decidability?Disallow:

Global pointer variables.(. . . else method models k -pebble automata)

Pointers arbitrarily far apart.(. . . else method models k -headed automata)

Unbounded destructive changes.(. . . else method models Linear Bounded Automata)

University of Texas at Austin Verifying Recursive Methods on Trees 16 / 30

Page 17: Verification of Recursive Methods on Tree-like Data Structures

Method Automata

Outline

1 Scope

2 Method AutomataTail Recursive MethodsNon Tail-Recursive Methods

3 Verification Framework

4 Complexity and Results

University of Texas at Austin Verifying Recursive Methods on Trees 17 / 30

Page 18: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Tail Recursive Methods

Template Tail-Recursive Method

void foo(iter) {if (cond) {

base-du;}recur-du;foo (iter->next2);foo (iter->next1);foo (iter->next3);

}

University of Texas at Austin Verifying Recursive Methods on Trees 18 / 30

Page 19: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Tail Recursive Methods

Method Automaton AM

AM accepts T̃i ◦ T̃o iff To =M(Ti).

T̃c encodes valid actions ofM.

,( )

T̃c

,( ) ,( )

,( ) ,( ) ,( ) ,( )

University of Texas at Austin Verifying Recursive Methods on Trees 19 / 30

Page 20: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Tail Recursive Methods

Method Automaton AM

AM accepts T̃i ◦ T̃o iff To =M(Ti).

T̃c encodes valid actions ofM.

,( )

T̃i

,( ) ,( )

,( ) ,( ) ,( ) ,( )

University of Texas at Austin Verifying Recursive Methods on Trees 19 / 30

Page 21: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Tail Recursive Methods

Method Automaton AM

AM accepts T̃i ◦ T̃o iff To =M(Ti).

T̃c encodes valid actions ofM.

,( )

T̃o

,( ) ,( )

,( ) ,( ) ,( ) ,( )

University of Texas at Austin Verifying Recursive Methods on Trees 19 / 30

Page 22: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Tail Recursive Methods

Method Automaton AM

AM accepts T̃i ◦ T̃o iff To =M(Ti).

T̃c encodes valid actions ofM.

,(recur-du?

)

T̃c = T̃i ◦ T̃o

,(recur-du?

) ,(recur-du?

)

,(base-du?

) ,(base-du?

) ,(base-du?

) ,(base-du?

)

University of Texas at Austin Verifying Recursive Methods on Trees 19 / 30

Page 23: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Non Tail-Recursive Methods

Template Non Tail-Recursive Method

void foo(iter) {if (cond) {

base-du;}recur-du[0];foo (iter->next2);recur-du[1];foo (iter->next1);recur-du[2];foo (iter->next3);recur-du[3];

}

University of Texas at Austin Verifying Recursive Methods on Trees 20 / 30

Page 24: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Non Tail-Recursive Methods

Action ofM

void changeData (iter) {if ((iter->next1==∅) &&

(iter->next2==∅) {incMod3(iter->data);return;

}incMod3 (iter->data);if (iter->next1!=∅) {

changeData (iter->next1);}incMod3 (iter->data);if (iter->next2!=∅) {

changeData (iter->next2);}incMod3 (iter->data);return;

}

0

1

0 2

University of Texas at Austin Verifying Recursive Methods on Trees 21 / 30

Page 25: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Non Tail-Recursive Methods

Action ofM

void changeData (iter) {if ((iter->next1==∅) &&

(iter->next2==∅) {incMod3(iter->data);return;

}incMod3 (iter->data);if (iter->next1!=∅) {

changeData (iter->next1);}incMod3 (iter->data);if (iter->next2!=∅) {

changeData (iter->next2);}incMod3 (iter->data);return;

}

1

2

0 2

University of Texas at Austin Verifying Recursive Methods on Trees 21 / 30

Page 26: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Non Tail-Recursive Methods

Action ofM

void changeData (iter) {if ((iter->next1==∅) &&

(iter->next2==∅) {incMod3(iter->data);return;

}incMod3 (iter->data);if (iter->next1!=∅) {

changeData (iter->next1);}incMod3 (iter->data);if (iter->next2!=∅) {

changeData (iter->next2);}incMod3 (iter->data);return;

}

1

2

1 2

University of Texas at Austin Verifying Recursive Methods on Trees 21 / 30

Page 27: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Non Tail-Recursive Methods

Action ofM

void changeData (iter) {if ((iter->next1==∅) &&

(iter->next2==∅) {incMod3(iter->data);return;

}incMod3 (iter->data);if (iter->next1!=∅) {

changeData (iter->next1);}incMod3 (iter->data);if (iter->next2!=∅) {

changeData (iter->next2);}incMod3 (iter->data);return;

}

1

0

1 2

University of Texas at Austin Verifying Recursive Methods on Trees 21 / 30

Page 28: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Non Tail-Recursive Methods

Action ofM

void changeData (iter) {if ((iter->next1==∅) &&

(iter->next2==∅) {incMod3(iter->data);return;

}incMod3 (iter->data);if (iter->next1!=∅) {

changeData (iter->next1);}incMod3 (iter->data);if (iter->next2!=∅) {

changeData (iter->next2);}incMod3 (iter->data);return;

}

1

0

1 0

University of Texas at Austin Verifying Recursive Methods on Trees 21 / 30

Page 29: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Non Tail-Recursive Methods

Action ofM

void changeData (iter) {if ((iter->next1==∅) &&

(iter->next2==∅) {incMod3(iter->data);return;

}incMod3 (iter->data);if (iter->next1!=∅) {

changeData (iter->next1);}incMod3 (iter->data);if (iter->next2!=∅) {

changeData (iter->next2);}incMod3 (iter->data);return;

}

1

1

1 0

University of Texas at Austin Verifying Recursive Methods on Trees 21 / 30

Page 30: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Non Tail-Recursive Methods

Action ofM

void changeData (iter) {if ((iter->next1==∅) &&

(iter->next2==∅) {incMod3(iter->data);return;

}incMod3 (iter->data);if (iter->next1!=∅) {

changeData (iter->next1);}incMod3 (iter->data);if (iter->next2!=∅) {

changeData (iter->next2);}incMod3 (iter->data);return;

}

2

1

1 0

University of Texas at Austin Verifying Recursive Methods on Trees 21 / 30

Page 31: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Non Tail-Recursive Methods

Action ofM

void changeData (iter) {if ((iter->next1==∅) &&

(iter->next2==∅) {incMod3(iter->data);return;

}incMod3 (iter->data);if (iter->next1!=∅) {

changeData (iter->next1);}incMod3 (iter->data);if (iter->next2!=∅) {

changeData (iter->next2);}incMod3 (iter->data);return;

}

0

1

1 0

University of Texas at Austin Verifying Recursive Methods on Trees 21 / 30

Page 32: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Non Tail-Recursive Methods

Depth-first action represented by Finite Annotation

2 0 2 0 2 1 2

1 211 01 0 1 0 0

0

1 1 2 2

1 1 1

1

0

1

0

1

1 1 1

20

01,2,0,1

0,1,1,1 2,0,0,0

0,1,2,0

University of Texas at Austin Verifying Recursive Methods on Trees 22 / 30

Page 33: Verification of Recursive Methods on Tree-like Data Structures

Method Automata Non Tail-Recursive Methods

Structure of AM

( , , ,. . . , , )recur-du[0]? recur-du[1]? recur-du[K]?

( , , ,. . . , , )recur-du[0]? recur-du[1]? recur-du[K]?

( , , ,. . . , , )recur-du[0]? recur-du[1]? recur-du[K]?

( , , ,. . . , , )base-du? ≡ ≡

University of Texas at Austin Verifying Recursive Methods on Trees 23 / 30

Page 34: Verification of Recursive Methods on Tree-like Data Structures

Verification Framework

Outline

1 Scope

2 Method Automata

3 Verification Framework

4 Complexity and Results

University of Texas at Austin Verifying Recursive Methods on Trees 24 / 30

Page 35: Verification of Recursive Methods on Tree-like Data Structures

Verification Framework

Properties as Automata

Pre-conditionPre-condition ϕ provided as Aϕ.

Aϕ operates on T̃c = T̃i ◦ T̃o.

Accepts T̃i if Ti |= ϕ.

Ignores T̃o component of T̃c .

Post-conditionNegated Post-condition ψ provided as A¬ψ.

A¬ψ operates on T̃c .

Accepts T̃o if To 6|= ψ.

Ignores T̃i component of T̃c .

University of Texas at Austin Verifying Recursive Methods on Trees 25 / 30

Page 36: Verification of Recursive Methods on Tree-like Data Structures

Verification Framework

Product Automaton

Ap = AM ⊗Aϕ ⊗A¬ψ.Ap is non-empty⇔:

AM accepts T̃i ◦ T̃o, i.e. To =M(Ti ),Aϕ accepts T̃i , i.e. Ti |= ϕ,A¬ψ accepts T̃o, i.e. To 6|= ψ.

Ap is empty⇔M satisfies pre/post-conditions for all input trees.

University of Texas at Austin Verifying Recursive Methods on Trees 26 / 30

Page 37: Verification of Recursive Methods on Tree-like Data Structures

Complexity and Results

Outline

1 Scope

2 Method Automata

3 Verification Framework

4 Complexity and Results

University of Texas at Austin Verifying Recursive Methods on Trees 27 / 30

Page 38: Verification of Recursive Methods on Tree-like Data Structures

Complexity and Results

Complexity

|Ap| proportional to |AM|, properties.|AM| linear in |M|, exp. in size of window.Overall complexity: polynomial in |Ap|.

University of Texas at Austin Verifying Recursive Methods on Trees 28 / 30

Page 39: Verification of Recursive Methods on Tree-like Data Structures

Complexity and Results

Experimental Results

Method Spec. Timea Mem.(secs) (MB)

AM Total

On Linked Lists:DeleteNode Acyclic 0.3 1.3 20InsertAtTail Acyclic 0.01 0.8 <1InsertNode Acyclic 0.4 1.6 48

On Binary Trees:InsertNode Acyclic 15 329 2512ReplaceAll(a,b) Acyclic 5 26 324

@iter : iter->d = a 5 27 432DeleteLeaf Acyclic 12 48 630

aExperiments were performed on an Athlon 64X2 4200+ system with 6GB RAM.

University of Texas at Austin Verifying Recursive Methods on Trees 29 / 30

Page 40: Verification of Recursive Methods on Tree-like Data Structures

Complexity and Results

Thank You!

University of Texas at Austin Verifying Recursive Methods on Trees 30 / 30

Page 41: Verification of Recursive Methods on Tree-like Data Structures

Template for Method in Decidable Fragment

void foo (iter, d1, ..., dn) {/* base case: */if (condition) {

d.u. to w(iter);return;

}/* recursive case: */d.u. to w(iter);foo (iter->3); // call to 3rd successord.u. to w(iter);foo (iter->1); // call to 1st successord.u. to w(iter);foo (iter->2); // call to 2nd successord.u. to w(iter);return;

}

University of Texas at Austin Verifying Recursive Methods on Trees 1 / 10

Page 42: Verification of Recursive Methods on Tree-like Data Structures

Structure of AM: Tail Recursive Methods

Input symbol σ = (wi ,wo).State encodes part of σ overlapping with successor.Reads new σ′; rejects if overlapping parts differ.If σ |= base-case condition, AM accepts if wo =M(wi).If σ 6|= base-case condition:

Checks wo?=M(wi ) (rejects otherwise).

Transitions to (wi |j ,wo|j ) along j th successor.

University of Texas at Austin Verifying Recursive Methods on Trees 2 / 10

Page 43: Verification of Recursive Methods on Tree-like Data Structures

Macros

w

h(w)

w|1 w|2

consistent((xi , xo)| {z }q

, (wi ,wo)| {z }σ

)def= (h(wi ) = xi )| {z }

cons. input

∧ (h(wo) = xo)| {z }cons. output

University of Texas at Austin Verifying Recursive Methods on Trees 3 / 10

Page 44: Verification of Recursive Methods on Tree-like Data Structures

AM for Tail-Recursive Methods

Transitions from the Initial State

q0

(wi ,wo)

acc acc

(w ′i ,w′o)

(wi |1,wo|1) (wi |2,wo|2)

(w ′′i ,w′′o )

rej rej

validBase(wi ,wo)

validRecur(w′i ,w′o)

invalidBase(w′′i ,w′′o )

or invalidRecur(w′′i ,w′′o )

University of Texas at Austin Verifying Recursive Methods on Trees 4 / 10

Page 45: Verification of Recursive Methods on Tree-like Data Structures

AM for Tail-Recursive Methods

Transitions from non-initial/final states

q = (wprevi |j ,wprev

o |j )

(wi ,wo)

acc acc

(w ′i ,w′o)

(wi |1,wo|1) (wi |2,wo|2)

(w ′′i ,w′′o )

rej rej

consistent(q, (wi ,wo))

and validBase(wi ,wo)

consistent(q, (w′i ,w′o))

and validRecur(w′i ,w′o)

¬consistent(q, (w′′i ,w′′o ))

or invalidBase(w′′i ,w′′o )

or invalidRecur(w′′i ,w′′o )

University of Texas at Austin Verifying Recursive Methods on Trees 5 / 10

Page 46: Verification of Recursive Methods on Tree-like Data Structures

More Macros

validBase(wi ,wo)def= (wi |= bcond)| {z }

is base case.

∧ (wo = base_du(wi ))| {z }matches base_du

invalidBase(wi ,wo)def= (wi |= bcond)| {z }

is base case.

∧ (wo 6= base_du(wi ))| {z }doesn′ t match base_du

validRecur(wi ,wo)def= (wi 6|= bcond)| {z }

not base case

∧ (wo = recur_du(wi ))| {z }matches recur_du

invalidRecur(wi ,wo)def= (wi 6|= bcond)| {z }

not base case

∧ (wo 6= recur_du(wi ))| {z }doesn′ t match recur_du

University of Texas at Austin Verifying Recursive Methods on Trees 6 / 10

Page 47: Verification of Recursive Methods on Tree-like Data Structures

Non Tail-Recursive Methods

Modified Macros:

consistent((xi , xo)| {z }q

, (w0, . . . ,wK+1)| {z }σ

)def= (h(w0) = xi )| {z }

cons. input

∧ (h(wK+1) = xo)| {z }cons. output

validBase(w0,w1, . . . ,wK+1)def= (w0 |= bcond)| {z }

is base case.

∧ (wK+1 = wK = . . . = w1 = base_du(w0))| {z }matches base_du

invalidBase(wi ,wo)def= (w0 |= bcond)| {z }

is base case.

∧¬(wK+1 = wK = . . . = w1 = base_du(w0))| {z }doesn′ t match base_du

validRecur(wi ,wo)def= (w0 6|= bcond)| {z }

not base case

∧ (w1 = recur_du[0](w0)) ∧ . . . ∧ (wK+1 = recur_du[K](wK ))| {z }matches all recur_du′s

invalidRecur(wi ,wo)def= (wi 6|= bcond)| {z }

not base case

∧¬((w1 = recur_du[0](w0)) ∧ . . . ∧ (wK+1 = recur_du[K](wK )))| {z }doesn′ t match all recur_du′s

University of Texas at Austin Verifying Recursive Methods on Trees 7 / 10

Page 48: Verification of Recursive Methods on Tree-like Data Structures

AM for Non Tail-Recursive Methods

Transitions from the Initial State

q0

(wi ,wo)

acc acc

(w ′i ,w′o)

(wi |1,wo|1) (wi |2,wo|2)

(w ′′i ,w′′o )

rej rej

validBase(wi ,wo)

validRecur(w′i ,w′o)

invalidBase(w′′i ,w′′o )

or invalidRecur(w′′i ,w′′o )

University of Texas at Austin Verifying Recursive Methods on Trees 8 / 10

Page 49: Verification of Recursive Methods on Tree-like Data Structures

AM for Non Tail-Recursive Methods

Transitions from non-initial/final states

q = (xi , xo)

(wi ,wo)

acc acc

(w ′i ,w′o)

(wi |1,wo|1) (wi |2,wo|2)

(w ′′i ,w′′o )

rej rej

consistent(q, (wi ,wo))

and validBase(wi ,wo)

consistent(q, (w′i ,w′o))

and validRecur(w′i ,w′o)

¬consistent(q, (w′′i ,w′′o ))

or invalidBase(w′′i ,w′′o )

or invalidRecur(w′′i ,w′′o )

University of Texas at Austin Verifying Recursive Methods on Trees 9 / 10

Page 50: Verification of Recursive Methods on Tree-like Data Structures

Future Work

Reduce |Σp| by clustering-based abstraction.Verify methods on dags: use single visit property.Use of Pushdown/Stack Tree Automata as Method Automata.

University of Texas at Austin Verifying Recursive Methods on Trees 10 / 10