• No se han encontrado resultados

Incremental and Modular Context-Sensitive Analysis

N/A
N/A
Protected

Academic year: 2022

Share "Incremental and Modular Context-Sensitive Analysis"

Copied!
25
0
0

Texto completo

(1)

Incremental and Modular Context-Sensitive Analysis

Isabel Garcia-Contreras 1,2 Jose F. Morales 1,2 Manuel V. Hermenegildo 1,2

1 IMDEA Software Institute

2 T. U. Madrid (UPM)

HCVS: Horn Clauses for Verification and Synthesis — March 28th, 2021

(2)

Introduction

Context: Analyzing/Verifying software projects during development in order to:

• Detect and report of bugs as early as possible (e.g., on-the-fly, at commit, …).

• Optimize code and libraries globally for the program being developed.

Problem: Context-sensitive analysis can be quite precise but also expensive, specially for interactive uses.

Make it incremental! – successive changes during development are often comparatively small and localized.

So far, in abstract interpretation, this was achieved by:

• Fine-grain (clause-level) incremental analysis for non-modular programs.

[SAS’96, TOPLAS’00]

• Coarse-grain (module-level) analysis aimed at reducing memory consumption . [ENTCS’00, LOPSTR’01]

We propose an extension of the modular algorithm to react to module changes , and

a way to combine it with fine-grain incrementality .

(3)

Motivation - (Incremental) Static On-the-fly verification

2

(4)

General idea

1. Take “snapshots” of the program sources

(e.g., at each editor save/pause while developing, each commit, ...).

2. Detect the changes w.r.t. the previous snapshot.

3. Reanalyze :

• Annotate and remove potentially outdated information .

• (Re-)Analyze incrementally (only the parts needed) module by module until an intermodular fixpoint is reached again.

→ Recheck assertions/Reoptimize.

(5)

Analysis Basics

Abstract Interpretation

• Simulates the execution of the program using an abstract domain D α , simpler than the contrete one.

• Guarantees:

• Analysis termination, provided that D α meets some conditions.

• Results are safe approximations of the concrete semantics.

We use Prolog syntax for Horn Clauses Head k :- B k,1 , . . . , B k,n k



1 list([]). % fact

2 list([X|Xs]) :- % rule head

3 list(Xs). % rule body

 

4

(6)

Concrete (Top-down) Semantics – AND trees



1 par([], P, P).

2 par([C|Cs], P0, P) :-

3 xor(C, P0, P1),

4 par(Cs, P1, P).

 



5 xor(0,0,0).

6 xor(0,1,1).

7 xor(1,0,1).

8 xor(1,1,0).

 

AND tree of :- par([0, 1], 0,P).:

true par([0, 1], 0,P) }query par([C|Cs],P0,P) :- }head

C = 0, Cs = [1],

P0 = 0

xor(C,P0,P1), xor(0, 0, 0).

C = 0, Cs = [1],

P0 = 0, P1 = 0

par( Cs, P1, P).

par([C|Cs], P1, P) :-

C = 1, Cs = [],

P0 = 0

xor(C,P0,P1), xor(1, 0, 1).

C = 1, Cs = [],

P0 = 0, P1 = 1

par(Cs, P1, P).

par([], P , P).

C = 1, Cs = [],

P0 = 0, P1 = 1 P = 1 C = 0, Cs = [1],

P0 = 0, P1 = 0, P = 1 P = 1

2,1 2,2

2,1 2,2

(7)

PLAI Analysis output

A PLAI [NACLP’89] analysis graph has a set of nodes hA, λ c i 7→ λ s for every potentially reachable predicate, where:

• A is an atom, the predicate identifier.

• λ c is an abstract call to A.

• λ s is the abstract answer for A and λ c if it succeeds.

Example



1 par([], P, P).

2 par([C|Cs], P0, P) :-

3 xor(C, P0, P1),

4 par(Cs, P1, P).

5

6 xor(0,0,0).

7 xor(0,1,1).

8 xor(1,0,1).

9 xor(1,1,0).

 

Example nodes:

hpar(L, P0, P), >i 7→ (P0/ bit , P/ bit )

For any call to par that succeeds, P0 and P are either 1 or 0.

hpar(L, P0, P), (P0/−)i 7→ ⊥

If par is called with P0 a negative number, it always fails.

Edges : hP, λi i,j −→ λp

λr hQ, λ i, calling P with λ causes Q to be called with λ .

Analysis is interprocedural, multivariant, and context sensitive. 6

(8)

Analysis graph – example

Initial query ⟨par(M, X, P), (X/z)⟩

Entry: :- par(M,0,P).



1 par([], P, P).

2 par([C|Cs], P0, P) :-

3 xor(C, P0, P1),

4 par(Cs, P1, P).

5

6 xor(0,0,0).

7 xor(0,1,1).

8 xor(1,0,1).

9 xor(1,1,0).

 

bit

z o

hpar(M,X,P), ( X/ z ) i 7→

(X/ z ,P/ bit )

hxor(C,P0,P1), (P0/ z ) i 7→

( C/ bit , P0/ z , P1/ bit )

hpar(M,X,P), X/ bit i 7→

( X/ bit , P/ bit )

hxor(C,P0,P1), ( P0/ bit ) i 7→

( C/ bit , P0/ bit , P1/ bit )

2, 1 2, 2

2, 1

2, 2

(9)

Modular CHC Programs

Strict module system

• Modules define an interface of exported and imported predicates.

• Non-exported predicates cannot be seen or used in other modules.

Modular program



1 :- module(main, [main/2]).

2

3 :- use_module(bitops, [xor/3]).

4

5 main(L,P) :-

6 par(L,0,P).

7

8 par([], P, P).

9 par([C|Cs], P0, P) :-

10 xor(C, P0, P1),

11 par(Cs, P1, P).

 



1 :- module(bitops, [xor/3]).

2

3 xor(0,0,0).

4 xor(0,1,1).

5 xor(1,0,1).

6 xor(1,1,0).

 

8

(10)

Graphs for Incremental and Modular Analysis

hmain(M,P),

>i 7→

(P/ bit )

hpar(M,X,P), ( X/z)i 7→

( X/z, P/ bit )

hxor(C,P0,P1), (P0/z)i 7→

(C/ bit , P0/z, P1/ bit )

hpar(M,X,P), X/ bit i 7→

(X/ bit ,P/ bit )

hxor(C,P0,P1), (P0/ bit ) i 7→

(C/ bit , P0/ bit , P1/ bit ) 1, 1

2, 1

2, 2

2, 1

2, 2

bitops main

We have:

• A global analysis graph G : call dependencies among imported/exported predicates.

• A local analysis graph L M

per module M: limited to

the predicates used in M.

(11)

test

warplan

robot_operations prolog_sys

Id162 test1/0

Id163 plans/2 C1 L1 Id160 test2/0

Id161 plans/2 C1 L1

Id158 test3/0

Id159 plans/2 C1 L1 Id80 test4/0

Id81 plans/2 C1 L1

Id77 output/1 C2 L5

Id18 time/1 C2 L3 Id95 plan/4

C2 L2 Id82 not/1

C1 L1

Id78 output1/1

C1 L1 Id19 statistics/2

C1 L1

Id96 solve/5 C2 L1 Id136 plan/4

C1 L2 C2 L5 C2 L3 C2 L2

C1 L1 C1 L1 C2 L2 C2 L5 C2 L3

Id12 imposs/1

Id126 achieve/5 C2 L3

Id45 preserves/2 C1 L5

Id50 consistent/2 C1 L3 Id127 retrace/3

C2 L2 Id117 plan/4

C1 L4

Id122 preserved/2 C2 L4

Id49 can/2 C1 L2 Id118 solve/5

C3 L2

Id22 always/1 C1 L1 Id112 and/3

C2 L2

Id119 holds/2 C2 L1

Id43 add/2 C3 L1 Id149 achieve/5

Id150 achieve/5 C2 L3

Id71 retrace/3

C2 L2C1 L5

Id142 plan/4

C1 L4

Id33 preserved/2

C2 L4

Id147 preserved/2 C2 L1 C1 L3

C1 L2 Id143 solve/5

C3 L2

C1 L1

Id144 holds/2 C2 L1

Id39 and/3 C2 L2

C3 L1

C2 L5 C2 L3

C2 L2 C1 L1

C2 L2 Id97 always/1

C1 L1 Id116 achieve/5

C3 L2

Id104 holds/2 C2 L1

Id115 add/2 C3 L1 C1 L2

Id137 solve/5 C2 L1

Id141 achieve/5 C3 L2

C2 L2

Id138 holds/2 C2 L1 C1 L1

C3 L1 Id46 preserved/2

C2 L4

Id157 achieve/5 C2 L3

C2 L2C1 L5 C1 L4

C1 L3

C1 L2

Id47 mkground/3 C1 L1

Id48 del/2 C1 L2 C2 L4

C2 L3

Id61 retrace/3 C2 L2

Id60 preserves/2 C1 L5 Id153 plan/4 C1 L4

Id152 consistent/2 C1 L3

Id151 preserves/2 C1 L1

C1 L2

Id66 conjoin/3 C1 L3

Id62 retrace1/4 C1 L2

C1 L1 C1 L2

C1 L1 Id154 solve/5 C2 L1 Id155 plan/4

C1 L2

Id14 implied/2 C1 L4 Id13 not/1

C1 L3

C1 L2 Id148 mkground/3

C1 L1 C1 L2

C1 L1 C3 L2 Id56 and/3

C2 L2 C1 L1 C2 L1

C3 L1 Id156 solve/5

C2 L1 Id68 plan/4

C1 L2

Id69 solve/5 C1 L1

C2 L2 C1 L5

C1 L4

C1 L3 C1 L1 C2 L3

C2 L4 C2 L1

C1 L2 Id76 conjoin/3

C1 L3

Id72 retrace1/4 C1 L2

C1 L1 C1 L1

C1 L2 C2 L1

Id54 plan/4 C1 L2

C1 L2

Id55 solve/5 C2 L1

Id8 mkground/3 C1 L1

Id34 del/2 C1 L2

C1 L1

C1 L2 C1 L3

C1 L2

Id51 mkground/3 C1 L1

Id52 implied/2 C1 L4

Id70 achieve/5

C3 L2 C2 L2

Id29 holds/2

C2 L1 C1 L1

C3 L1 C2 L2C1 L5

C2 L4 C1 L4 Id67 achieve/5

C2 L3

Id11 consistent/2 C1 L3

C1 L2

Id5 elem/2 C1 L1

Id57 equiv/2 C1 L2 C2 L3

C2 L2

Id31 given/2 C3 L1

Id30 add/2 C1 L1 Id26 always/1

C3 L1

Id23 connects1/3 C2 L1 C1 L2

C2 L1

C3 L2 C2 L1C2 L2 C1 L1

C3 L1

C2 L3 C2 L1

C2 L2

Id146 given/2 C3 L1

Id145 add/2 C1 L1

Id16 implied/2 C1 L2

Id15 elem/2 C2 L1 Id3 my_call/1 C1 L1

Id9 mkgroundlist/3 C3 L2 Id41 equiv/2

C1 L2

C1 L2

Id10 mkground/3 C1 L1

Id32 range/3 C3 L1

Id25 range/3 C2 L3 Id113 equiv/2

C1 L2

C2 L3 C2 L2

Id140 given/2

C3 L1

Id139 add/2 C1 L1 Id107 range/3

C3 L1

Id100 range/3 C2 L3 Id101 always/1 C3 L1

Id98 connects1/3 C2 L1

C1 L5 C1 L3

C2 L3

Id108 preserved/2 C2 L4 C2 L2

C1 L4

C1 L2 Id133 conjoin/3

C1 L3 Id129 retrace1/4 C1 L2

Id128 can/2 C1 L1 C2 L1

C1 L2

Id134 plan/4 C1 L2

C1 L2

Id135 solve/5 C2 L1 C1 L1

C1 L1

Id123 del/2 C1 L2 C2 L2

C2 L1 C1 L1

Id59 achieve/5 C3 L2

C3 L1 C2 L2 C1 L5

C1 L4

C2 L4 C2 L3

C1 L3

C1 L2 C2 L2

C2 L1 C1 L1

C3 L2

C3 L1

C1 L1 C3 L1

Id132 equiv/2 C2 L2 Id131 equiv/2

C1 L2

Id130 add/2 C1 L1 Id114 not/1

C1 L1 C1 L1

C2 L3 C2 L1

C2 L2

Id121 given/2 C3 L1

Id120 add/2 C1 L1

C3 L2 C3 L1 C1 L1

C2 L3 C2 L2

Id106 given/2 C3 L1

Id105 add/2 C1 L1 C3 L1

C2 L3 Id103 connects1/3

C2 L1 Id102 connects1/3 C1 L1

Id99 range/3 C1 L1

C2 L3 C1 L1 C1 L1

C3 L2 Id17 not/1 C1 L1 Id53 plan/4

C1 L2 Id21 solve/5

C2 L1 Id44 achieve/5

C2 L2 C1 L5

C2 L4 C1 L3

C1 L4

C2 L3

C1 L2 Id1 plans/2

C2 L5C2 L3

Id20 plan/4 C2 L2

Id2 not/1 C1 L1

C1 L1

C1 L2 C2 L1

C2 L1 C1 L1

C2 L2 C3 L2

C3 L1

C2 L2C1 L5 C2 L4

C1 L4 C2 L3

C1 L3

C1 L2 C1 L1

C3 L1

Id75 equiv/2 C2 L2

C2 L1 Id73 equiv/2

C1 L2 Id63 add/2

C1 L1

Id74 not/1 C1 L1

C1 L1

C2 L1 C1 L1

C5 L1 C4 L1 Id7 nonequiv/2

C2 L1 Id4 intersect/2

C1 L1

C1 L4 C1 L3

C1 L2 C1 L1

C1 L1

C2 L1 C3 L1

Id65 equiv/2 C2 L2 Id64 equiv/2

C1 L2

C1 L1

Id58 not/1 C1 L1 C1 L1

C1 L1

C3 L2 C1 L1

C1 L2

C2 L1 C1 L2

C2 L1 C2 L1

C3 L2 Id42 not/1

C1 L1

C1 L1

C3 L1

C2 L3 Id28 connects1/3 C2 L1

Id27 connects1/3 C1 L1

Id24 range/3 C1 L1

C2 L3 C1 L1 C1 L1

C1 L1

C1 L1 C1 L1

Id6 elem/2 C1 L2 C2 L1

Id35 moved/2 C8 L1 Id36 del/2 C2 L1

Id79 can/2

Id38 del/2 C2 L1

Id37 moved/2 C8 L1 C2 L1 C7 L1

C7 L1 C2 L1 C6 L1 test10

test20 test40 test30

del0 add0

moved0 can0 plans0

Id114 not/1

Id83 my_call/1

Id89 mkground/3 Id88 mkgroundlist/3

C3 L2 Id91 not/1

C1 L1Id90 consistent/2 C1 L3

Id87 mkground/3 C1 L1 Id92 implied/2

C1 L4 Id94 not/1 C1 L1

Id40 elem/2 Id114 not/1 C1 L1

C2 L1

C4 L1 C5 L1

Id86 nonequiv/2 C2 L1

Id84 intersect/2 C1 L1

C3 L2

Id93 implied/2 C1 L2

Id85 elem/2

C2 L1 C1 L2

C2 L1 C2 L1

C1 L1

C1 L1 C1 L2 C1 L1

C1 L2

lib planner

Snapshot of Analysis Graphs

Changes detected!

planner.pl



100 %%

101 - explore(P,Map,[P|Map]) :-

102 - safe(P).

103 %%

 

lib.pl



41 %%

42 + add(Node,Graph) :-

43 + %% implementation

44 + %% implementation

45 %%

 

10

(12)

test

warplan

robot_operations prolog_sys

Id162 test1/0

Id163 plans/2 C1 L1 Id160 test2/0

Id161 plans/2 C1 L1

Id158 test3/0

Id159 plans/2 C1 L1 Id80 test4/0

Id81 plans/2 C1 L1

Id77 output/1 C2 L5

Id18 time/1 C2 L3 Id95 plan/4

C2 L2 Id82 not/1

C1 L1

Id78 output1/1

C1 L1 Id19 statistics/2

C1 L1

Id96 solve/5 C2 L1 Id136 plan/4

C1 L2 C2 L5 C2 L3 C2 L2

C1 L1 C1 L1 C2 L2 C2 L5 C2 L3

Id12 imposs/1

Id126 achieve/5 C2 L3

Id45 preserves/2 C1 L5

Id50 consistent/2 C1 L3 Id127 retrace/3

C2 L2 Id117 plan/4

C1 L4

Id122 preserved/2 C2 L4

Id49 can/2 C1 L2 Id118 solve/5

C3 L2

Id22 always/1 C1 L1 Id112 and/3

C2 L2

Id119 holds/2 C2 L1

Id43 add/2 C3 L1 Id149 achieve/5

Id150 achieve/5 C2 L3

Id71 retrace/3

C2 L2C1 L5

Id142 plan/4

C1 L4

Id33 preserved/2

C2 L4

Id147 preserved/2 C2 L1 C1 L3

C1 L2 Id143 solve/5

C3 L2

C1 L1

Id144 holds/2 C2 L1

Id39 and/3 C2 L2

C3 L1

C2 L5 C2 L3

C2 L2 C1 L1

C2 L2 Id97 always/1

C1 L1 Id116 achieve/5

C3 L2

Id104 holds/2 C2 L1

Id115 add/2 C3 L1 C1 L2

Id137 solve/5 C2 L1

Id141 achieve/5 C3 L2

C2 L2

Id138 holds/2 C2 L1 C1 L1

C3 L1 Id46 preserved/2

C2 L4

Id157 achieve/5 C2 L3

C2 L2C1 L5 C1 L4

C1 L3

C1 L2

Id47 mkground/3 C1 L1

Id48 del/2 C1 L2 C2 L4

C2 L3

Id61 retrace/3 C2 L2

Id60 preserves/2 C1 L5 Id153 plan/4 C1 L4

Id152 consistent/2 C1 L3

Id151 preserves/2 C1 L1

C1 L2

Id66 conjoin/3 C1 L3

Id62 retrace1/4 C1 L2

C1 L1 C1 L2

C1 L1 Id154 solve/5 C2 L1 Id155 plan/4

C1 L2

Id14 implied/2 C1 L4 Id13 not/1

C1 L3

C1 L2 Id148 mkground/3

C1 L1 C1 L2

C1 L1 C3 L2 Id56 and/3

C2 L2 C1 L1 C2 L1

C3 L1 Id156 solve/5

C2 L1 Id68 plan/4

C1 L2

Id69 solve/5 C1 L1

C2 L2 C1 L5

C1 L4

C1 L3 C1 L1 C2 L3

C2 L4 C2 L1

C1 L2 Id76 conjoin/3

C1 L3

Id72 retrace1/4 C1 L2

C1 L1 C1 L1

C1 L2 C2 L1

Id54 plan/4 C1 L2

C1 L2

Id55 solve/5 C2 L1

Id8 mkground/3 C1 L1

Id34 del/2 C1 L2

C1 L1

C1 L2 C1 L3

C1 L2

Id51 mkground/3 C1 L1

Id52 implied/2 C1 L4

Id70 achieve/5

C3 L2 C2 L2

Id29 holds/2

C2 L1 C1 L1

C3 L1 C2 L2C1 L5

C2 L4 C1 L4 Id67 achieve/5

C2 L3

Id11 consistent/2 C1 L3

C1 L2

Id5 elem/2 C1 L1

Id57 equiv/2 C1 L2 C2 L3

C2 L2

Id31 given/2 C3 L1

Id30 add/2 C1 L1 Id26 always/1

C3 L1

Id23 connects1/3 C2 L1 C1 L2

C2 L1

C3 L2 C2 L1C2 L2 C1 L1

C3 L1

C2 L3 C2 L1

C2 L2

Id146 given/2 C3 L1

Id145 add/2 C1 L1

Id16 implied/2 C1 L2

Id15 elem/2 C2 L1 Id3 my_call/1 C1 L1

Id9 mkgroundlist/3 C3 L2 Id41 equiv/2

C1 L2

C1 L2

Id10 mkground/3 C1 L1

Id32 range/3 C3 L1

Id25 range/3 C2 L3 Id113 equiv/2

C1 L2

C2 L3 C2 L2

Id140 given/2

C3 L1

Id139 add/2 C1 L1 Id107 range/3

C3 L1

Id100 range/3 C2 L3 Id101 always/1 C3 L1

Id98 connects1/3 C2 L1

C1 L5 C1 L3

C2 L3

Id108 preserved/2 C2 L4 C2 L2

C1 L4

C1 L2 Id133 conjoin/3

C1 L3 Id129 retrace1/4 C1 L2

Id128 can/2 C1 L1 C2 L1

C1 L2

Id134 plan/4 C1 L2

C1 L2

Id135 solve/5 C2 L1 C1 L1

C1 L1

Id123 del/2 C1 L2 C2 L2

C2 L1 C1 L1

Id59 achieve/5 C3 L2

C3 L1 C2 L2 C1 L5

C1 L4

C2 L4 C2 L3

C1 L3

C1 L2 C2 L2

C2 L1 C1 L1

C3 L2

C3 L1

C1 L1 C3 L1

Id132 equiv/2 C2 L2 Id131 equiv/2

C1 L2

Id130 add/2 C1 L1 Id114 not/1

C1 L1 C1 L1

C2 L3 C2 L1

C2 L2

Id121 given/2 C3 L1

Id120 add/2 C1 L1

C3 L2 C3 L1 C1 L1

C2 L3 C2 L2

Id106 given/2 C3 L1

Id105 add/2 C1 L1 C3 L1

C2 L3 Id103 connects1/3

C2 L1 Id102 connects1/3 C1 L1

Id99 range/3 C1 L1

C2 L3 C1 L1 C1 L1

C3 L2 Id17 not/1 C1 L1 Id53 plan/4

C1 L2 Id21 solve/5

C2 L1 Id44 achieve/5

C2 L2 C1 L5

C2 L4 C1 L3

C1 L4

C2 L3

C1 L2 Id1 plans/2

C2 L5C2 L3

Id20 plan/4 C2 L2

Id2 not/1 C1 L1

C1 L1

C1 L2 C2 L1

C2 L1 C1 L1

C2 L2 C3 L2

C3 L1

C2 L2C1 L5 C2 L4

C1 L4 C2 L3

C1 L3

C1 L2 C1 L1

C3 L1

Id75 equiv/2 C2 L2

C2 L1 Id73 equiv/2

C1 L2 Id63 add/2

C1 L1

Id74 not/1 C1 L1

C1 L1

C2 L1 C1 L1

C5 L1 C4 L1 Id7 nonequiv/2

C2 L1 Id4 intersect/2

C1 L1

C1 L4 C1 L3

C1 L2 C1 L1

C1 L1

C2 L1 C3 L1

Id65 equiv/2 C2 L2 Id64 equiv/2

C1 L2

C1 L1

Id58 not/1 C1 L1 C1 L1

C1 L1

C3 L2 C1 L1

C1 L2

C2 L1 C1 L2

C2 L1 C2 L1

C3 L2 Id42 not/1

C1 L1

C1 L1

C3 L1

C2 L3 Id28 connects1/3 C2 L1

Id27 connects1/3 C1 L1

Id24 range/3 C1 L1

C2 L3 C1 L1 C1 L1

C1 L1

C1 L1 C1 L1

Id6 elem/2 C1 L2 C2 L1

Id35 moved/2 C8 L1 Id36 del/2 C2 L1

Id79 can/2

Id38 del/2 C2 L1

Id37 moved/2 C8 L1 C2 L1 C7 L1

C7 L1 C2 L1 C6 L1 test10

test20 test40 test30

del0 add0

moved0 can0 plans0

add

Id83 my_call/1

Id89 mkground/3 Id88 mkgroundlist/3

C3 L2 Id91 not/1

C1 L1Id90 consistent/2 C1 L3

Id87 mkground/3 C1 L1 Id92 implied/2

C1 L4 Id94 not/1 C1 L1

Id40 elem/2 Id114 not/1

C1 L1

C2 L1

C4 L1 C5 L1

Id86 nonequiv/2 C2 L1

Id84 intersect/2 C1 L1

C3 L2

Id93 implied/2 C1 L2

Id85 elem/2

C2 L1 C1 L2

C2 L1 C2 L1

C1 L1

C1 L1 C1 L2 C1 L1

C1 L2

delete

lib planner

Snapshot of Analysis Graphs

(13)

test

warplan

robot_operations prolog_sys

Id162 test1/0

Id163 plans/2 C1 L1 Id160 test2/0

Id161 plans/2 C1 L1

Id158 test3/0

Id159 plans/2 C1 L1 Id80 test4/0

Id81 plans/2 C1 L1

Id77 output/1 C2 L5

Id18 time/1 C2 L3 Id95 plan/4

C2 L2 Id82 not/1

C1 L1

Id78 output1/1

C1 L1 Id19 statistics/2

C1 L1

Id96 solve/5 C2 L1 Id136 plan/4

C1 L2 C2 L5 C2 L3 C2 L2

C1 L1 C1 L1 C2 L2 C2 L5 C2 L3

Id12 imposs/1

Id126 achieve/5 C2 L3

Id45 preserves/2 C1 L5

Id50 consistent/2 C1 L3 Id127 retrace/3

C2 L2 Id117 plan/4

C1 L4

Id122 preserved/2 C2 L4

Id49 can/2 C1 L2 Id118 solve/5

C3 L2

Id22 always/1 C1 L1 Id112 and/3

C2 L2

Id119 holds/2 C2 L1

Id43 add/2 C3 L1 Id149 achieve/5

Id150 achieve/5 C2 L3

Id71 retrace/3

C2 L2C1 L5

Id142 plan/4

C1 L4

Id33 preserved/2

C2 L4

Id147 preserved/2 C2 L1 C1 L3

C1 L2 Id143 solve/5

C3 L2

C1 L1

Id144 holds/2 C2 L1

Id39 and/3 C2 L2

C3 L1

C2 L5 C2 L3

C2 L2 C1 L1

C2 L2 Id97 always/1

C1 L1 Id116 achieve/5

C3 L2

Id104 holds/2 C2 L1

Id115 add/2 C3 L1 C1 L2

Id137 solve/5 C2 L1

Id141 achieve/5 C3 L2

C2 L2

Id138 holds/2 C2 L1 C1 L1

C3 L1 Id46 preserved/2

C2 L4

Id157 achieve/5 C2 L3

C2 L2C1 L5 C1 L4

C1 L3

C1 L2

Id47 mkground/3 C1 L1

Id48 del/2 C1 L2 C2 L4

C2 L3

Id61 retrace/3 C2 L2

Id60 preserves/2 C1 L5 Id153 plan/4 C1 L4

Id152 consistent/2 C1 L3

Id151 preserves/2 C1 L1

C1 L2

Id66 conjoin/3 C1 L3

Id62 retrace1/4 C1 L2

C1 L1 C1 L2

C1 L1 Id154 solve/5 C2 L1 Id155 plan/4

C1 L2

Id14 implied/2 C1 L4 Id13 not/1

C1 L3

C1 L2 Id148 mkground/3

C1 L1 C1 L2

C1 L1 C3 L2 Id56 and/3

C2 L2 C1 L1 C2 L1

C3 L1 Id156 solve/5

C2 L1 Id68 plan/4

C1 L2

Id69 solve/5 C1 L1

C2 L2 C1 L5

C1 L4

C1 L3 C1 L1 C2 L3

C2 L4 C2 L1

C1 L2 Id76 conjoin/3

C1 L3

Id72 retrace1/4 C1 L2

C1 L1 C1 L1

C1 L2 C2 L1

Id54 plan/4 C1 L2

C1 L2

Id55 solve/5 C2 L1

Id8 mkground/3 C1 L1

Id34 del/2 C1 L2

C1 L1

C1 L2 C1 L3

C1 L2

Id51 mkground/3 C1 L1

Id52 implied/2 C1 L4

Id70 achieve/5

C3 L2 C2 L2

Id29 holds/2

C2 L1 C1 L1

C3 L1 C2 L2C1 L5

C2 L4 C1 L4 Id67 achieve/5

C2 L3

Id11 consistent/2 C1 L3

C1 L2

Id5 elem/2 C1 L1

Id57 equiv/2 C1 L2 C2 L3

C2 L2

Id31 given/2 C3 L1

Id30 add/2 C1 L1 Id26 always/1

C3 L1

Id23 connects1/3 C2 L1 C1 L2

C2 L1

C3 L2 C2 L1C2 L2 C1 L1

C3 L1

C2 L3 C2 L1

C2 L2

Id146 given/2 C3 L1

Id145 add/2 C1 L1

Id16 implied/2 C1 L2

Id15 elem/2 C2 L1 Id3 my_call/1 C1 L1

Id9 mkgroundlist/3 C3 L2 Id41 equiv/2

C1 L2

C1 L2

Id10 mkground/3 C1 L1

Id32 range/3 C3 L1

Id25 range/3 C2 L3 Id113 equiv/2

C1 L2

C2 L3 C2 L2

Id140 given/2

C3 L1

Id139 add/2 C1 L1 Id107 range/3

C3 L1

Id100 range/3 C2 L3 Id101 always/1 C3 L1

Id98 connects1/3 C2 L1

C1 L5 C1 L3

C2 L3

Id108 preserved/2 C2 L4 C2 L2

C1 L4

C1 L2

Id109 del/2 C1 L2 Id133 conjoin/3

C1 L3 Id129 retrace1/4 C1 L2

Id128 can/2 C1 L1 C2 L1

C1 L2

Id134 plan/4 C1 L2

C1 L2

Id135 solve/5 C2 L1 C1 L1

C1 L1

Id123 del/2 C1 L2 C2 L2

C2 L1 C1 L1

Id59 achieve/5 C3 L2

C3 L1 C2 L2 C1 L5

C1 L4

C2 L4 C2 L3

C1 L3

C1 L2 C2 L2

C2 L1 C1 L1

C3 L2

C3 L1

C1 L1 C3 L1

Id132 equiv/2 C2 L2 Id131 equiv/2

C1 L2

Id130 add/2 C1 L1 Id114 not/1

C1 L1 C1 L1

C2 L3 C2 L1

C2 L2

Id121 given/2 C3 L1

Id120 add/2 C1 L1

C3 L2 C3 L1 C1 L1

C2 L3 C2 L2

Id106 given/2 C3 L1

Id105 add/2 C1 L1 C3 L1

C2 L3 Id103 connects1/3

C2 L1 Id102 connects1/3 C1 L1

Id99 range/3 C1 L1

C2 L3 C1 L1 C1 L1

C3 L2 Id17 not/1 C1 L1 Id53 plan/4

C1 L2 Id21 solve/5

C2 L1 Id44 achieve/5

C2 L2 C1 L5

C2 L4 C1 L3

C1 L4

C2 L3

C1 L2 Id1 plans/2

C2 L5C2 L3

Id20 plan/4 C2 L2

Id2 not/1 C1 L1

C1 L1

C1 L2 C2 L1

C2 L1 C1 L1

C2 L2 C3 L2

C3 L1

C2 L2C1 L5 C2 L4

C1 L4 C2 L3

C1 L3

C1 L2 C1 L1

C3 L1

Id75 equiv/2 C2 L2

C2 L1 Id73 equiv/2

C1 L2 Id63 add/2

C1 L1

Id74 not/1 C1 L1

C1 L1

C2 L1 C1 L1

C5 L1 C4 L1 Id7 nonequiv/2

C2 L1 Id4 intersect/2

C1 L1

C1 L4 C1 L3

C1 L2 C1 L1

C1 L1

C2 L1 C3 L1

Id65 equiv/2 C2 L2 Id64 equiv/2

C1 L2

C1 L1

Id58 not/1 C1 L1 C1 L1

C1 L1

C3 L2 C1 L1

C1 L2

C2 L1 C1 L2

C2 L1 C2 L1

C3 L2 Id42 not/1

C1 L1

C1 L1

C3 L1

C2 L3 Id28 connects1/3 C2 L1

Id27 connects1/3 C1 L1

Id24 range/3 C1 L1

C2 L3 C1 L1 C1 L1

C1 L1

C1 L1 C1 L1

Id6 elem/2 C1 L2 C2 L1

Id35 moved/2 C8 L1 Id36 del/2 C2 L1

Id125 del/2 C2 L1

Id124 moved/2 C8 L1

Id111 del/2 C2 L1 C7 L1

Id110 moved/2

C6 L1 C2 L1

C7 L1 C2 L1

C8 L1 Id79 can/2

Id38 del/2 C2 L1

Id37 moved/2 C8 L1 C2 L1 C7 L1

C7 L1 C2 L1 C6 L1 test10

test20 test40 test30

del0 add0

moved0 can0 plans0

recompute delete

lib planner

Snapshot of Analysis Graphs

12

(14)

test

warplan

robot_operations prolog_sys

Id162 test1/0

Id163 plans/2 C1 L1 Id160 test2/0

Id161 plans/2 C1 L1

Id158 test3/0

Id159 plans/2 C1 L1 Id80 test4/0

Id81 plans/2 C1 L1

Id77 output/1 C2 L5

Id18 time/1 C2 L3 Id95 plan/4

C2 L2 Id82 not/1

C1 L1

Id78 output1/1

C1 L1 Id19 statistics/2

C1 L1

Id96 solve/5 C2 L1 Id136 plan/4

C1 L2

Id83 my_call/1 C1 L1

C2 L5 C2 L3 C2 L2

C1 L1 C1 L1 C2 L2 C2 L5 C2 L3

Id89 mkground/3 Id88 mkgroundlist/3

C3 L2 Id91 not/1

C1 L1 Id90 consistent/2 C1 L3

Id12 imposs/1 C1 L2

Id87 mkground/3 C1 L1 Id92 implied/2

C1 L4 Id94 not/1 C1 L1

Id126 achieve/5 C2 L3

Id45 preserves/2 C1 L5

Id50 consistent/2 C1 L3 Id127 retrace/3

C2 L2 Id117 plan/4

C1 L4

Id122 preserved/2 C2 L4

Id49 can/2 C1 L2 Id118 solve/5

C3 L2

Id22 always/1 C1 L1 Id112 and/3

C2 L2

Id119 holds/2 C2 L1

Id43 add/2 C3 L1 Id149 achieve/5

Id150 achieve/5 C2 L3

Id71 retrace/3

C2 L2C1 L5

Id142 plan/4

C1 L4

Id33 preserved/2

C2 L4

Id147 preserved/2 C2 L1 C1 L3

C1 L2 Id143 solve/5

C3 L2

C1 L1

Id144 holds/2 C2 L1

Id39 and/3 C2 L2

C3 L1

C2 L5 C2 L3

C2 L2 C1 L1

C2 L2 Id97 always/1

C1 L1 Id116 achieve/5

C3 L2

Id104 holds/2 C2 L1

Id115 add/2 C3 L1 C1 L2

Id137 solve/5 C2 L1

Id141 achieve/5 C3 L2

C2 L2

Id138 holds/2 C2 L1 C1 L1

C3 L1 Id46 preserved/2

C2 L4

Id157 achieve/5 C2 L3

C2 L2C1 L5 C1 L4

C1 L3

C1 L2

Id47 mkground/3 C1 L1

Id48 del/2 C1 L2 C2 L4

C2 L3

Id61 retrace/3 C2 L2

Id60 preserves/2 C1 L5 Id153 plan/4 C1 L4

Id152 consistent/2 C1 L3

Id151 preserves/2 C1 L1

C1 L2

Id66 conjoin/3 C1 L3

Id62 retrace1/4 C1 L2

C1 L1 C1 L2

C1 L1 Id154 solve/5 C2 L1 Id155 plan/4

C1 L2

Id14 implied/2 C1 L4 Id13 not/1

C1 L3

C1 L2 Id148 mkground/3

C1 L1 C1 L2

C1 L1 C3 L2 Id56 and/3

C2 L2 C1 L1 C2 L1

C3 L1 Id156 solve/5

C2 L1 Id68 plan/4

C1 L2

Id69 solve/5 C1 L1

C2 L2 C1 L5

C1 L4

C1 L3 C1 L1 C2 L3

C2 L4 C2 L1

C1 L2 Id76 conjoin/3

C1 L3

Id72 retrace1/4 C1 L2

C1 L1 C1 L1

C1 L2 C2 L1

Id54 plan/4 C1 L2

C1 L2

Id55 solve/5 C2 L1

Id8 mkground/3 C1 L1

Id34 del/2 C1 L2

C1 L1

C1 L2 C1 L3

C1 L2

Id51 mkground/3 C1 L1

Id52 implied/2 C1 L4

Id70 achieve/5

C3 L2 C2 L2

Id29 holds/2

C2 L1 C1 L1

C3 L1 C2 L2C1 L5

C2 L4 C1 L4 Id67 achieve/5

C2 L3

Id11 consistent/2 C1 L3

C1 L2

Id5 elem/2 C1 L1

Id57 equiv/2 C1 L2 C2 L3

C2 L2

Id31 given/2 C3 L1

Id30 add/2 C1 L1 Id26 always/1

C3 L1

Id23 connects1/3 C2 L1 C1 L2

C2 L1

C3 L2 C2 L1C2 L2 C1 L1

C3 L1

C2 L3 C2 L1

C2 L2

Id146 given/2 C3 L1

Id145 add/2 C1 L1

Id16 implied/2 C1 L2

Id15 elem/2 C2 L1 Id3 my_call/1 C1 L1

Id9 mkgroundlist/3 C3 L2 Id40 elem/2

C1 L1 Id41 equiv/2 C1 L2

C1 L2

Id10 mkground/3 C1 L1

Id32 range/3 C3 L1

Id25 range/3 C2 L3 C1 L1

Id113 equiv/2 C1 L2

C2 L3 C2 L2

Id140 given/2

C3 L1

Id139 add/2 C1 L1 Id107 range/3

C3 L1

Id100 range/3 C2 L3 Id101 always/1 C3 L1

Id98 connects1/3 C2 L1

C1 L5 C1 L3

C2 L3

Id108 preserved/2 C2 L4 C2 L2

C1 L4

C1 L2

C1 L1

Id109 del/2 C1 L2 Id133 conjoin/3

C1 L3 Id129 retrace1/4 C1 L2

Id128 can/2 C1 L1 C2 L1

C1 L2

Id134 plan/4 C1 L2

C1 L2

Id135 solve/5 C2 L1 C1 L1

C1 L1

Id123 del/2 C1 L2 C2 L2

C2 L1 C1 L1

Id59 achieve/5 C3 L2

C3 L1 C2 L2 C1 L5

C1 L4

C2 L4 C2 L3

C1 L3

C1 L2 C2 L2

C2 L1 C1 L1

C3 L2

C3 L1

C1 L1 C3 L1

Id132 equiv/2 C2 L2

C2 L1 Id131 equiv/2 C1 L2

Id130 add/2 C1 L1 Id114 not/1

C1 L1

C1 L1

C2 L1 C1 L1

C2 L3 C2 L1

C2 L2

Id121 given/2 C3 L1

Id120 add/2 C1 L1

C3 L2 C3 L1 C1 L1

C4 L1 C5 L1

Id86 nonequiv/2 C2 L1

Id84 intersect/2 C1 L1

C2 L3 C2 L2

Id106 given/2 C3 L1

Id105 add/2 C1 L1

C3 L2

C3 L1

C2 L3 Id103 connects1/3

C2 L1 Id102 connects1/3 C1 L1

Id99 range/3 C1 L1

C2 L3 C1 L1 C1 L1

Id93 implied/2 C1 L2

Id85 elem/2

C2 L1 C1 L2

C2 L1 C2 L1

C1 L1

C1 L1 C1 L2 C1 L1

C1 L2

C3 L2 Id17 not/1 C1 L1 Id53 plan/4

C1 L2 Id21 solve/5

C2 L1 Id44 achieve/5

C2 L2 C1 L5

C2 L4 C1 L3

C1 L4

C2 L3

C1 L2 Id1 plans/2

C2 L5C2 L3

Id20 plan/4 C2 L2

Id2 not/1 C1 L1

C1 L1

C1 L2 C2 L1

C2 L1 C1 L1

C2 L2 C3 L2

C2 L2C1 L5 C2 L4

C1 L4 C2 L3

C1 L3

C1 L2 C1 L1

C3 L1

Id75 equiv/2 C2 L2

C2 L1 Id73 equiv/2

C1 L2 Id63 add/2

C1 L1

Id74 not/1 C1 L1

C1 L1

C2 L1 C1 L1

C5 L1 C4 L1 Id7 nonequiv/2

C2 L1 Id4 intersect/2

C1 L1

C1 L4 C1 L3

C1 L2 C1 L1

C1 L1

C2 L1 C3 L1

Id65 equiv/2 C2 L2 Id64 equiv/2

C1 L2

C1 L1

Id58 not/1 C1 L1 C1 L1

C1 L1

C3 L2 C1 L1

C1 L2

C2 L1 C1 L2

C2 L1 C2 L1

C3 L2 Id42 not/1

C1 L1

C1 L1

C3 L1

C2 L3 Id28 connects1/3 C2 L1

Id27 connects1/3 C1 L1

Id24 range/3 C1 L1

C2 L3 C1 L1 C1 L1

C1 L1

C1 L1 C1 L1

Id6 elem/2 C1 L2 C2 L1

Id35 moved/2 C8 L1 Id36 del/2 C2 L1

Id125 del/2 C2 L1

Id124 moved/2 C8 L1

Id111 del/2 C2 L1 C7 L1

Id110 moved/2

C6 L1 C2 L1

C7 L1 C2 L1

C8 L1 Id79 can/2

Id38 del/2 C2 L1

Id37 moved/2 C8 L1 C2 L1 C7 L1

C7 L1 C2 L1 C6 L1 test10

test20 test40 test30

del0 add0

moved0 can0 plans0

lib planner

Snapshot of Analysis Graphs

(15)

test

warplan

robot_operations prolog_sys

Id162 test1/0

Id163 plans/2 C1 L1 Id160 test2/0

Id161 plans/2 C1 L1

Id158 test3/0

Id159 plans/2 C1 L1 Id80 test4/0

Id81 plans/2 C1 L1

Id77 output/1 C2 L5

Id18 time/1 C2 L3 Id95 plan/4

C2 L2 Id82 not/1

C1 L1

Id78 output1/1

C1 L1 Id19 statistics/2

C1 L1

Id96 solve/5 C2 L1 Id136 plan/4

C1 L2

Id83 my_call/1 C1 L1

C2 L5 C2 L3 C2 L2

C1 L1 C1 L1 C2 L2 C2 L5 C2 L3

Id89 mkground/3 Id88 mkgroundlist/3

C3 L2 Id91 not/1

C1 L1 Id90 consistent/2 C1 L3

Id12 imposs/1 C1 L2

Id87 mkground/3 C1 L1 Id92 implied/2

C1 L4 Id94 not/1 C1 L1

Id126 achieve/5 C2 L3

Id45 preserves/2 C1 L5

Id50 consistent/2 C1 L3 Id127 retrace/3

C2 L2 Id117 plan/4

C1 L4

Id122 preserved/2 C2 L4

Id49 can/2 C1 L2 Id118 solve/5

C3 L2

Id22 always/1 C1 L1 Id112 and/3

C2 L2

Id119 holds/2 C2 L1

Id43 add/2 C3 L1 Id149 achieve/5

Id150 achieve/5 C2 L3

Id71 retrace/3

C2 L2C1 L5

Id142 plan/4

C1 L4

Id33 preserved/2

C2 L4

Id147 preserved/2 C2 L1 C1 L3

C1 L2 Id143 solve/5

C3 L2

C1 L1

Id144 holds/2 C2 L1

Id39 and/3 C2 L2

C3 L1

C2 L5 C2 L3

C2 L2 C1 L1

C2 L2 Id97 always/1

C1 L1 Id116 achieve/5

C3 L2

Id104 holds/2 C2 L1

Id115 add/2 C3 L1 C1 L2

Id137 solve/5 C2 L1

Id141 achieve/5 C3 L2

C2 L2

Id138 holds/2 C2 L1 C1 L1

C3 L1 Id46 preserved/2

C2 L4

Id157 achieve/5 C2 L3

C2 L2C1 L5 C1 L4

C1 L3

C1 L2

Id47 mkground/3 C1 L1

Id48 del/2 C1 L2 C2 L4

C2 L3

Id61 retrace/3 C2 L2

Id60 preserves/2 C1 L5 Id153 plan/4 C1 L4

Id152 consistent/2 C1 L3

Id151 preserves/2 C1 L1

C1 L2

Id66 conjoin/3 C1 L3

Id62 retrace1/4 C1 L2

C1 L1 C1 L2

C1 L1 Id154 solve/5 C2 L1 Id155 plan/4

C1 L2

Id14 implied/2 C1 L4 Id13 not/1

C1 L3

C1 L2 Id148 mkground/3

C1 L1 C1 L2

C1 L1 C3 L2 Id56 and/3

C2 L2 C1 L1 C2 L1

C3 L1 Id156 solve/5

C2 L1 Id68 plan/4

C1 L2

Id69 solve/5 C1 L1

C2 L2 C1 L5

C1 L4

C1 L3 C1 L1 C2 L3

C2 L4 C2 L1

C1 L2 Id76 conjoin/3

C1 L3

Id72 retrace1/4 C1 L2

C1 L1 C1 L1

C1 L2 C2 L1

Id54 plan/4 C1 L2

C1 L2

Id55 solve/5 C2 L1

Id8 mkground/3 C1 L1

Id34 del/2 C1 L2

C1 L1

C1 L2 C1 L3

C1 L2

Id51 mkground/3 C1 L1

Id52 implied/2 C1 L4

Id70 achieve/5

C3 L2 C2 L2

Id29 holds/2

C2 L1 C1 L1

C3 L1 C2 L2C1 L5

C2 L4 C1 L4 Id67 achieve/5

C2 L3

Id11 consistent/2 C1 L3

C1 L2

Id5 elem/2 C1 L1

Id57 equiv/2 C1 L2 C2 L3

C2 L2

Id31 given/2 C3 L1

Id30 add/2 C1 L1 Id26 always/1

C3 L1

Id23 connects1/3 C2 L1 C1 L2

C2 L1

C3 L2 C2 L1C2 L2 C1 L1

C3 L1

C2 L3 C2 L1

C2 L2

Id146 given/2 C3 L1

Id145 add/2 C1 L1

Id16 implied/2 C1 L2

Id15 elem/2 C2 L1 Id3 my_call/1 C1 L1

Id9 mkgroundlist/3 C3 L2 Id40 elem/2

C1 L1 Id41 equiv/2 C1 L2

C1 L2

Id10 mkground/3 C1 L1

Id32 range/3 C3 L1

Id25 range/3 C2 L3 C1 L1

Id113 equiv/2 C1 L2

C2 L3 C2 L2

Id140 given/2

C3 L1

Id139 add/2 C1 L1 Id107 range/3

C3 L1

Id100 range/3 C2 L3 Id101 always/1 C3 L1

Id98 connects1/3 C2 L1

C1 L5 C1 L3

C2 L3

Id108 preserved/2 C2 L4 C2 L2

C1 L4

C1 L2

C1 L1

Id109 del/2 C1 L2 Id133 conjoin/3

C1 L3 Id129 retrace1/4 C1 L2

Id128 can/2 C1 L1 C2 L1

C1 L2

Id134 plan/4 C1 L2

C1 L2

Id135 solve/5 C2 L1 C1 L1

C1 L1

Id123 del/2 C1 L2 C2 L2

C2 L1 C1 L1

Id59 achieve/5 C3 L2

C3 L1 C2 L2 C1 L5

C1 L4

C2 L4 C2 L3

C1 L3

C1 L2 C2 L2

C2 L1 C1 L1

C3 L2

C3 L1

C1 L1 C3 L1

Id132 equiv/2 C2 L2

C2 L1 Id131 equiv/2 C1 L2

Id130 add/2 C1 L1 Id114 not/1

C1 L1

C1 L1

C2 L1 C1 L1

C2 L3 C2 L1

C2 L2

Id121 given/2 C3 L1

Id120 add/2 C1 L1

C3 L2 C3 L1 C1 L1

C4 L1 C5 L1

Id86 nonequiv/2 C2 L1

Id84 intersect/2 C1 L1

C2 L3 C2 L2

Id106 given/2 C3 L1

Id105 add/2 C1 L1

C3 L2

C3 L1

C2 L3 Id103 connects1/3

C2 L1 Id102 connects1/3 C1 L1

Id99 range/3 C1 L1

C2 L3 C1 L1 C1 L1

Id93 implied/2 C1 L2

Id85 elem/2

C2 L1 C1 L2

C2 L1 C2 L1

C1 L1

C1 L1 C1 L2 C1 L1

C1 L2

C3 L2 Id17 not/1 C1 L1 Id53 plan/4

C1 L2 Id21 solve/5

C2 L1 Id44 achieve/5

C2 L2 C1 L5

C2 L4 C1 L3

C1 L4

C2 L3

C1 L2 Id1 plans/2

C2 L5C2 L3

Id20 plan/4 C2 L2

Id2 not/1 C1 L1

C1 L1

C1 L2 C2 L1

C2 L1 C1 L1

C2 L2 C3 L2

C2 L2C1 L5 C2 L4

C1 L4 C2 L3

C1 L3

C1 L2 C1 L1

C3 L1

Id75 equiv/2 C2 L2

C2 L1 Id73 equiv/2

C1 L2 Id63 add/2

C1 L1

Id74 not/1 C1 L1

C1 L1

C2 L1 C1 L1

C5 L1 C4 L1 Id7 nonequiv/2

C2 L1 Id4 intersect/2

C1 L1

C1 L4 C1 L3

C1 L2 C1 L1

C1 L1

C2 L1 C3 L1

Id65 equiv/2 C2 L2 Id64 equiv/2

C1 L2

C1 L1

Id58 not/1 C1 L1 C1 L1

C1 L1

C3 L2 C1 L1

C1 L2

C2 L1 C1 L2

C2 L1 C2 L1

C3 L2 Id42 not/1

C1 L1

C1 L1

C3 L1

C2 L3 Id28 connects1/3 C2 L1

Id27 connects1/3 C1 L1

Id24 range/3 C1 L1

C2 L3 C1 L1 C1 L1

C1 L1

C1 L1 C1 L1

Id6 elem/2 C1 L2 C2 L1

Id35 moved/2 C8 L1 Id36 del/2 C2 L1

Id125 del/2 C2 L1

Id124 moved/2 C8 L1

Id111 del/2 C2 L1 C7 L1

Id110 moved/2

C6 L1 C2 L1

C7 L1 C2 L1

C8 L1 Id79 can/2

Id38 del/2 C2 L1

Id37 moved/2 C8 L1 C2 L1 C7 L1

C7 L1 C2 L1 C6 L1 test10

test20 test40 test30

del0 add0

moved0 can0 plans0

lib planner

Snapshot of Analysis Graphs

The algorithm:

• Maintains local and global graphs with call/success pairs for the predicates and their dependencies .

• Deals incrementally with additions, deletions .

• Localizes as much as possible fixpoint (re)computation inside modules to minimize context swaps.

14

(16)

Theorem 4 (Correctness of IncAnalyze starting from a partial analysis). Let P be a program, Q α a set of ab- stract queries, and A 0 any analysis graph. Let A = IncAnalyze(P, Q α , ∅, A 0 ). A is correct for P and γ(Q α ) if for all concrete queries q ∈ γ(Q α ) all nodes n from which there is a path in the concrete execution q n in JP KQ, that are abstracted in the analysis A 0 are included in Q α , i.e.:

∀Q, n.Q ∈ γ(Q α ) ∧ q n ∈ JP KQ,

∀n α ∈ A 0 .n ∈ γ(n α )⇒n α ∈ Q α .

Theorem 6 (Precision of IncAnalyze). Let P, P 0 be pro- grams, such that P differs from P 0 by ∆, let Q α a set of ab- stract queries, and A 0 = IncAnalyze(P 0 , Q α , ∅, ∅) an analysis graph. The following hold:

• If A = IncAnalyze(P, Q α , ∅, ∅), then A is the least program analysis graph for P and γ(Q α ), and

• IncAnalyze(P, Q α , ∆, A 0 ) =

IncAnalyze(P, Q α , ∅, ∅).

Lemma 1 (Correctness of IncAnalyze modulo imported predicates). Let M be a module of program P , E a set of ab- stract queries. Let L 0 be an analysis graph such that ∀hA, λ c i ∈ L 0 .mod(A) ∈ imports(M ). The analysis result

L = IncAnalyze(M, E, ∅, L 0 ) is correct for M and γ(E) assuming L 0 .

Lemma 2 (Precision of IncAnalyze modulo imported pred- icates). Let M be a module of program P , E a set of abstract queries. Let L 0 be an analysis graph such that ∀hA, λ c i ∈ L 0 .mod(A) ∈ imports(M ) if L 0 contains the least fixed point as defined in Theorem 6. The analysis result

L = IncAnalyze(M, E, ∅, L 0 )

is the least program analysis graph for M and γ(E) assuming

Lemma 3 (Correctness updating L modulo G). Let M be a module of program P and E a set of entries. Let G be a previous state of the global analysis graph, if L M is correct for M and γ(E) assuming G. If G changes to G 0 the analysis result

L M 0 = LocIncAnalyze(M, E, G 0 , L M , ∅) is correct for M and γ(E) assuming G.

Theorem 10 (Correctness of ModIncAnalyze from scratch).

Let P be a modular program, and Q α a set of abstract queries.

Then, if:

{G, { L M i }} = ModIncAnalyze(P, Q α , ∅, ∅) G is correct for P and γ(Q α ).

Lemma 4 (Precision updating L modulo G). Let M be a module contained in program P , E a set of entries. Let G be a previous state of the global analysis graph, if L M = LocIncAnalyze(M, E, G, ∅, ∅). If G changes to G 0 the analy- sis result:

LocIncAnalyze(M, E, G 0 , L M , ∅) = LocIncAnalyze(M, E, G 0 , ∅, ∅) is the same as analyzing from scratch, i.e., the lfp of M , E.

Theorem 11 (Precision of ModIncAnalyze from scratch).

Let P be a modular program and Q α a set of abstract queries.

The analysis result

A = ModIncAnalyze(P, Q α , ∅, ∅) = ModAnalyze(P, Q α ) such that A = {G, {L M i }}, then G = G 0 .

Theorem 12 (Precision of ModIncAnalyze). Let P, P 0 be modular programs that differ by ∆, Q α a set of queries, and A = ModIncAnalyze(P, Q α , ∅, (∅, ∅)), then

ModIncAnalyze(P 0 , Q , ∅, (∅, ∅)) = ModIncAnalyze(P 0 , Q , A , ∆).

Fundamental results

15

(17)

Theorem 4 (Correctness of IncAnalyze starting from a partial analysis). Let P be a program, Q α a set of ab- stract queries, and A 0 any analysis graph. Let A = IncAnalyze(P, Q α , ∅, A 0 ). A is correct for P and γ(Q α ) if for all concrete queries q ∈ γ(Q α ) all nodes n from which there is a path in the concrete execution q n in JP KQ, that are abstracted in the analysis A 0 are included in Q α , i.e.:

∀Q, n.Q ∈ γ(Q α ) ∧ q n ∈ JP KQ,

∀n α ∈ A 0 .n ∈ γ(n α )⇒n α ∈ Q α .

Theorem 6 (Precision of IncAnalyze). Let P, P 0 be pro- grams, such that P differs from P 0 by ∆, let Q α a set of ab- stract queries, and A 0 = IncAnalyze(P 0 , Q α , ∅, ∅) an analysis graph. The following hold:

• If A = IncAnalyze(P, Q α , ∅, ∅), then A is the least program analysis graph for P and γ(Q α ), and

• IncAnalyze(P, Q α , ∆, A 0 ) =

IncAnalyze(P, Q α , ∅, ∅).

Lemma 1 (Correctness of IncAnalyze modulo imported predicates). Let M be a module of program P , E a set of ab- stract queries. Let L 0 be an analysis graph such that ∀hA, λ c i ∈ L 0 .mod(A) ∈ imports(M ). The analysis result

L = IncAnalyze(M, E, ∅, L 0 ) is correct for M and γ(E) assuming L 0 .

Lemma 2 (Precision of IncAnalyze modulo imported pred- icates). Let M be a module of program P , E a set of abstract queries. Let L 0 be an analysis graph such that ∀hA, λ c i ∈ L 0 .mod(A) ∈ imports(M ) if L 0 contains the least fixed point as defined in Theorem 6. The analysis result

L = IncAnalyze(M, E, ∅, L 0 )

is the least program analysis graph for M and γ(E) assuming L 0 .

Lemma 3 (Correctness updating L modulo G). Let M be a module of program P and E a set of entries. Let G be a previous state of the global analysis graph, if L M is correct for M and γ(E) assuming G. If G changes to G 0 the analysis result

L M 0 = LocIncAnalyze(M, E, G 0 , L M , ∅) is correct for M and γ(E) assuming G.

Theorem 10 (Correctness of ModIncAnalyze from scratch).

Let P be a modular program, and Q α a set of abstract queries.

Then, if:

{G, { L M i }} = ModIncAnalyze(P, Q α , ∅, ∅) G is correct for P and γ(Q α ).

Lemma 4 (Precision updating L modulo G). Let M be a module contained in program P , E a set of entries. Let G be a previous state of the global analysis graph, if L M = LocIncAnalyze(M, E, G, ∅, ∅). If G changes to G 0 the analy- sis result:

LocIncAnalyze(M, E, G 0 , L M , ∅) = LocIncAnalyze(M, E, G 0 , ∅, ∅) is the same as analyzing from scratch, i.e., the lfp of M , E.

Theorem 11 (Precision of ModIncAnalyze from scratch).

Let P be a modular program and Q α a set of abstract queries.

The analysis result

A = ModIncAnalyze(P, Q α , ∅, ∅) = ModAnalyze(P, Q α ) such that A = {G, {L M i }}, then G = G 0 .

Theorem 12 (Precision of ModIncAnalyze). Let P, P 0 be modular programs that differ by ∆, Q α a set of queries, and A = ModIncAnalyze(P, Q α , ∅, (∅, ∅)), then

ModIncAnalyze(P 0 , Q α , ∅, (∅, ∅)) = ModIncAnalyze(P 0 , Q α , A , ∆).

Fundamental results

Contributions

The results from our incremental, modular analysis are:

• Correct over-approximations of the AND tree semantics.

• The most accurate (lfp) if no widening is performed.

Additionally:

• Extended traditional algorithm with widening (not formalized before).

• Split correctness and precision of incremental analysis.

• New results reanalyzing starting from a partial analysis .

• Formalized results of an existing modular algorithm (non incremental).

16

(18)

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3

0 5 10 15 20 25

0 2 4 6 8 10 12 14 16

Time (ms)

# of clauses

Adding - aiakl

mon mon_inc mod_incmod

0 5 10 15 20 25

0 2 4 6 8 10 12 14 16

Time (ms)

# of clauses

Deleting - aiakl

mon mon_inc_td mon_inc_sccmod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120 140 160 180 200

0 50 100 150 200 250

Time (ms)

# of clauses

Adding - ann

mon mon_inc mod_incmod

0 50 100 150 200 250 300

0 50 100 150 200 250

Time (ms)

# of clauses

Deleting - ann

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

0 5 10 15 20 25 30 35 40 45

0 10 20 30 40 50

Time (ms)

# of clauses

Adding - bid

mon mon_inc mod_incmod

10 0 20 30 40 50 60 70 80 90

0 10 20 30 40 50

Time (ms)

# of clauses

Deleting - bid

mon mon_inc_td mon_inc_sccmod mod_inc_td mod_inc_scc

0 5 10 15 20 25 30 35 40 45 50

0 20 40 60 80 100 120 140 160

Time (ms)

# of clauses

Adding - boyer

mon_incmon mod_incmod

0 10 20 30 40 50 60 70

0 20 40 60 80 100 120 140 160

Time (ms)

# of clauses

Deleting - boyer

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120 140

0 10 20 30 40 50 60 70 80

Time (ms)

# of clauses

Adding - cleandirs

mon_incmon mod_incmod

0 100 200 300 400 500 600

0 10 20 30 40 50 60 70 80

Time (ms)

# of clauses

Deleting - cleandirs

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Adding - peephole

mon_incmon mod_incmod

0 20 40 60 80 100 120 140 160

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Deleting - peephole

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 2 4 6 10 8 12 14

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Adding - progeom

mon mon_inc mod mod_inc

50 0 100 150 200 250 300 350

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Deleting - progeom

mon mon_inc_td mon_inc_scc mod mod_inc_td mod_inc_scc

0 50 100 150 200 250

0 10 20 30 40 50 60 70 80 90 100

Time (ms)

# of clauses

Adding - read

mon_incmon mod_incmod

20 0 40 60 100 80 120 140 160 180 200

0 10 20 30 40 50 60 70 80 90 100

Time (ms)

# of clauses

Deleting - read

mon_inc_tdmon mon_inc_scc mod_inc_tdmod mod_inc_scc

0 2 4 6 10 8 12 14

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Adding - qsort

mon mon_inc mod mod_inc

0 5 10 15 20 25 30 35

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Deleting - qsort

mon mon_inc_td mon_inc_scc mod mod_inc_td mod_inc_scc

10 20 30 40 50 60 70

Time (ms)

Adding - rdtok

mon mon_inc mod_incmod

10 20 30 40 50 60 70 80

Time (ms)

Deleting - rdtok

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

5 10 15 20 25 30 35 40

Time (ms)

Adding - warplan

mon-incmon

mod mod-inc

10 20 30 40 50 60 70 80

Time (ms)

Deleting - warplan

mon-incmon mon-scc mod mod-inc mod-scc

100 200 300 400 500 600 700 800

Time (ms)

Adding - witt

mon mon_inc mod_incmod

200 400 600 800 1000 1200

Time (ms)

Deleting - witt

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

Experimental evaluation

17

(19)

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3

0 5 10 15 20 25

0 2 4 6 8 10 12 14 16

Time (ms)

# of clauses

Adding - aiakl

mon mon_inc mod_incmod

0 5 10 15 20 25

0 2 4 6 8 10 12 14 16

Time (ms)

# of clauses

Deleting - aiakl

mon mon_inc_td mon_inc_sccmod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120 140 160 180 200

0 50 100 150 200 250

Time (ms)

# of clauses

Adding - ann

mon mon_inc mod_incmod

0 50 100 150 200 250 300

0 50 100 150 200 250

Time (ms)

# of clauses

Deleting - ann

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

0 5 10 15 20 25 30 35 40 45

0 10 20 30 40 50

Time (ms)

# of clauses

Adding - bid

mon mon_inc mod_incmod

10 0 20 30 40 50 60 70 80 90

0 10 20 30 40 50

Time (ms)

# of clauses

Deleting - bid

mon mon_inc_td mon_inc_sccmod mod_inc_td mod_inc_scc

0 5 10 15 20 25 30 35 40 45 50

0 20 40 60 80 100 120 140 160

Time (ms)

# of clauses

Adding - boyer

mon_incmon mod_incmod

0 10 20 30 40 50 60 70

0 20 40 60 80 100 120 140 160

Time (ms)

# of clauses

Deleting - boyer

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120 140

0 10 20 30 40 50 60 70 80

Time (ms)

# of clauses

Adding - cleandirs

mon_incmon mod_incmod

0 100 200 300 400 500 600

0 10 20 30 40 50 60 70 80

Time (ms)

# of clauses

Deleting - cleandirs

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Adding - peephole

mon_incmon mod_incmod

0 20 40 60 80 100 120 140 160

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Deleting - peephole

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 2 4 6 10 8 12 14

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Adding - progeom

mon mon_inc mod mod_inc

50 0 100 150 200 250 300 350

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Deleting - progeom

mon mon_inc_td mon_inc_scc mod mod_inc_td mod_inc_scc

0 50 100 150 200 250

0 10 20 30 40 50 60 70 80 90 100

Time (ms)

# of clauses

Adding - read

mon_incmon mod_incmod

20 0 40 60 100 80 120 140 160 180 200

0 10 20 30 40 50 60 70 80 90 100

Time (ms)

# of clauses

Deleting - read

mon_inc_tdmon mon_inc_scc mod_inc_tdmod mod_inc_scc

0 2 4 6 10 8 12 14

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Adding - qsort

mon mon_inc mod mod_inc

0 5 10 15 20 25 30 35

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Deleting - qsort

mon mon_inc_td mon_inc_scc mod mod_inc_td mod_inc_scc

0 10 20 30 40 50 60 70

0 10 20 30 40 50 60

Time (ms)

# of clauses

Adding - rdtok

mon mon_inc mod_incmod

0 10 20 30 40 50 60 70 80

0 10 20 30 40 50 60

Time (ms)

# of clauses

Deleting - rdtok

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

0 5 10 15 20 25 30 35 40

0 20 40 60 80 100 120

Time (ms)

# of clauses

Adding - warplan

mon-incmon

mod mod-inc

0 10 20 30 40 50 60 70 80

0 20 40 60 80 100 120

Time (ms)

# of clauses

Deleting - warplan

mon-incmon mon-scc mod mod-inc mod-scc

0 100 200 300 400 500 600 700 800

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Adding - witt

mon mon_inc mod_incmod

0 200 400 600 800 1000 1200

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Deleting - witt

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

Experimental evaluation

Addition experiment (time in ms) – def domain

0 5 10 15 20 25 30 35 40

0 20 40 60 80 100 120

Time (ms)

# of clauses

Adding - warplan

mon mon-inc mod mod-inc

18

(20)

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3

0 5 10 15 20 25

0 2 4 6 8 10 12 14 16

Time (ms)

# of clauses

Adding - aiakl

mon mon_inc mod_incmod

0 5 10 15 20 25

0 2 4 6 8 10 12 14 16

Time (ms)

# of clauses

Deleting - aiakl

mon mon_inc_td mon_inc_sccmod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120 140 160 180 200

0 50 100 150 200 250

Time (ms)

# of clauses

Adding - ann

mon mon_inc mod_incmod

0 50 100 150 200 250 300

0 50 100 150 200 250

Time (ms)

# of clauses

Deleting - ann

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

0 5 10 15 20 25 30 35 40 45

0 10 20 30 40 50

Time (ms)

# of clauses

Adding - bid

mon mon_inc mod_incmod

10 0 20 30 40 50 60 70 80 90

0 10 20 30 40 50

Time (ms)

# of clauses

Deleting - bid

mon mon_inc_td mon_inc_sccmod mod_inc_td mod_inc_scc

0 5 10 15 20 25 30 35 40 45 50

0 20 40 60 80 100 120 140 160

Time (ms)

# of clauses

Adding - boyer

mon_incmon mod_incmod

0 10 20 30 40 50 60 70

0 20 40 60 80 100 120 140 160

Time (ms)

# of clauses

Deleting - boyer

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120 140

0 10 20 30 40 50 60 70 80

Time (ms)

# of clauses

Adding - cleandirs

mon_incmon mod_incmod

0 100 200 300 400 500 600

0 10 20 30 40 50 60 70 80

Time (ms)

# of clauses

Deleting - cleandirs

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Adding - peephole

mon_incmon mod_incmod

0 20 40 60 80 100 120 140 160

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Deleting - peephole

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 2 4 6 10 8 12 14

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Adding - progeom

mon mon_inc mod mod_inc

50 0 100 150 200 250 300 350

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Deleting - progeom

mon mon_inc_td mon_inc_scc mod mod_inc_td mod_inc_scc

0 50 100 150 200 250

0 10 20 30 40 50 60 70 80 90 100

Time (ms)

# of clauses

Adding - read

mon_incmon mod_incmod

20 0 40 60 100 80 120 140 160 180 200

0 10 20 30 40 50 60 70 80 90 100

Time (ms)

# of clauses

Deleting - read

mon_inc_tdmon mon_inc_scc mod_inc_tdmod mod_inc_scc

0 2 4 6 10 8 12 14

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Adding - qsort

mon mon_inc mod mod_inc

0 5 10 15 20 25 30 35

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Deleting - qsort

mon mon_inc_td mon_inc_scc mod mod_inc_td mod_inc_scc

10 20 30 40 50 60 70

Time (ms)

Adding - rdtok

mon mon_inc mod_incmod

10 20 30 40 50 60 70 80

Time (ms)

Deleting - rdtok

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

5 10 15 20 25 30 35 40

Time (ms)

Adding - warplan

mon-incmon

mod mod-inc

10 20 30 40 50 60 70 80

Time (ms)

Deleting - warplan

mon-incmon mon-scc mod mod-inc mod-scc

100 200 300 400 500 600 700 800

Time (ms)

Adding - witt

mon mon_inc mod_incmod

200 400 600 800 1000 1200

Time (ms)

Deleting - witt

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

Experimental evaluation

Accumulated normalized time (def) – clause addition

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3

hanoi aiakl qsort progeom bid rdtok cleand read warplan boyer peephole witt ann mproj clinks

The order inside each set of bars is: |mon|mon_inc|mod|mod_inc|.

19

(21)

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3

0 5 10 15 20 25

0 2 4 6 8 10 12 14 16

Time (ms)

# of clauses

Adding - aiakl

mon mon_inc mod_incmod

0 5 10 15 20 25

0 2 4 6 8 10 12 14 16

Time (ms)

# of clauses

Deleting - aiakl

mon mon_inc_td mon_inc_sccmod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120 140 160 180 200

0 50 100 150 200 250

Time (ms)

# of clauses

Adding - ann

mon mon_inc mod_incmod

0 50 100 150 200 250 300

0 50 100 150 200 250

Time (ms)

# of clauses

Deleting - ann

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

0 5 10 15 20 25 30 35 40 45

0 10 20 30 40 50

Time (ms)

# of clauses

Adding - bid

mon mon_inc mod_incmod

10 0 20 30 40 50 60 70 80 90

0 10 20 30 40 50

Time (ms)

# of clauses

Deleting - bid

mon mon_inc_td mon_inc_sccmod mod_inc_td mod_inc_scc

0 5 10 15 20 25 30 35 40 45 50

0 20 40 60 80 100 120 140 160

Time (ms)

# of clauses

Adding - boyer

mon_incmon mod_incmod

0 10 20 30 40 50 60 70

0 20 40 60 80 100 120 140 160

Time (ms)

# of clauses

Deleting - boyer

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120 140

0 10 20 30 40 50 60 70 80

Time (ms)

# of clauses

Adding - cleandirs

mon_incmon mod_incmod

0 100 200 300 400 500 600

0 10 20 30 40 50 60 70 80

Time (ms)

# of clauses

Deleting - cleandirs

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 20 40 60 80 100 120

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Adding - peephole

mon_incmon mod_incmod

0 20 40 60 80 100 120 140 160

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Deleting - peephole

mon_inc_tdmon mon_inc_scc mod mod_inc_td mod_inc_scc

0 2 4 6 10 8 12 14

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Adding - progeom

mon mon_inc mod mod_inc

50 0 100 150 200 250 300 350

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Deleting - progeom

mon mon_inc_td mon_inc_scc mod mod_inc_td mod_inc_scc

0 50 100 150 200 250

0 10 20 30 40 50 60 70 80 90 100

Time (ms)

# of clauses

Adding - read

mon_incmon mod_incmod

20 0 40 60 100 80 120 140 160 180 200

0 10 20 30 40 50 60 70 80 90 100

Time (ms)

# of clauses

Deleting - read

mon_inc_tdmon mon_inc_scc mod_inc_tdmod mod_inc_scc

0 2 4 6 10 8 12 14

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Adding - qsort

mon mon_inc mod mod_inc

0 5 10 15 20 25 30 35

0 2 4 6 8 10 12 14 16 18

Time (ms)

# of clauses

Deleting - qsort

mon mon_inc_td mon_inc_scc mod mod_inc_td mod_inc_scc

0 10 20 30 40 50 60 70

0 10 20 30 40 50 60

Time (ms)

# of clauses

Adding - rdtok

mon mon_inc mod_incmod

0 10 20 30 40 50 60 70 80

0 10 20 30 40 50 60

Time (ms)

# of clauses

Deleting - rdtok

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

0 5 10 15 20 25 30 35 40

0 20 40 60 80 100 120

Time (ms)

# of clauses

Adding - warplan

mon-incmon

mod mod-inc

0 10 20 30 40 50 60 70 80

0 20 40 60 80 100 120

Time (ms)

# of clauses

Deleting - warplan

mon-incmon mon-scc mod mod-inc mod-scc

0 100 200 300 400 500 600 700 800

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Adding - witt

mon mon_inc mod_incmod

0 200 400 600 800 1000 1200

0 20 40 60 80 100 120 140 160 180

Time (ms)

# of clauses

Deleting - witt

mon mon_inc_td mon_inc_scc mod_inc_tdmod mod_inc_scc

Experimental evaluation

Deletion experiment (time in ms) - def domain

0 10 20 30 40 50 60 70 80

0 20 40 60 80 100 120

Time (ms)

# of clauses

Deleting - warplan

mon mon-inc mon-scc mod mod-inc mod-scc

20

Referencias

Documento similar