60
A Hybrid Approach to Conjunctive Partial Deduction Germ´ an Vidal Technical University of Valencia Int’l Symp. on Logic-Based Program Synthesis and Transformation LOPSTR 2010 July 23-25, 2010 Castle of Hagenberg, Austria G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 1 / 19

A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

A Hybrid Approach to Conjunctive Partial Deduction

German Vidal

Technical University of Valencia

Int’l Symp. on Logic-Based Program Synthesis and TransformationLOPSTR 2010

July 23-25, 2010Castle of Hagenberg, Austria

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 1 / 19

Page 2: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction partial evaluation

Introduction

Partial evaluation�� ��input program and part of input data (static data)�� ��output specialized (residual) program

Partial evaluator

constructs a finite representation of all possible computations

extracts resultants from transitions

Optimization comes from

compressing paths in the graph (linear speedups for loops)

renaming of expressions (removes unnecessary symbols)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 2 / 19

Page 3: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction partial evaluation

Introduction

Partial evaluation�� ��input program and part of input data (static data)�� ��output specialized (residual) program

Partial evaluator

constructs a finite representation of all possible computations

extracts resultants from transitions

Optimization comes from

compressing paths in the graph (linear speedups for loops)

renaming of expressions (removes unnecessary symbols)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 2 / 19

Page 4: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction partial evaluation

Introduction

Partial evaluation�� ��input program and part of input data (static data)�� ��output specialized (residual) program

Partial evaluator

constructs a finite representation of all possible computations

extracts resultants from transitions

Optimization comes from

compressing paths in the graph (linear speedups for loops)

renaming of expressions (removes unnecessary symbols)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 2 / 19

Page 5: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction conjunctive partial deduction

Conjunctive partial deduction�� ��Input logic program P and a query Q0�� ��Initialization S = {Q0} S = {Q0,Q3,Q4,Q5} S = {Q0,Q3,Q4,Q5,Q6}

Q0

~~}}}}

}}}}

AAA

AAAA

A

Q1

��

Q2

~~}}}}

}}}}

��Q3 Q4 Q5

Q3

~~}}}}

}}}}

AAA

AAAA

A

Q6 Q7

��Q8 (instance of Q0)

The set is kept finite using

generalization

splitting

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 3 / 19

Page 6: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction conjunctive partial deduction

Conjunctive partial deduction�� ��Input logic program P and a query Q0�� ��Initialization S = {Q0} S = {Q0,Q3,Q4,Q5} S = {Q0,Q3,Q4,Q5,Q6}

Q0

~~}}}}

}}}}

AAA

AAAA

A

Q1

��

Q2

~~}}}}

}}}}

��Q3 Q4 Q5

Q3

~~}}}}

}}}}

AAA

AAAA

A

Q6 Q7

��Q8 (instance of Q0)

The set is kept finite using

generalization

splitting

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 3 / 19

Page 7: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction conjunctive partial deduction

Conjunctive partial deduction�� ��Input logic program P and a query Q0�� ��Initialization S = {Q0} S = {Q0,Q3,Q4,Q5} S = {Q0,Q3,Q4,Q5,Q6}

Q0

~~}}}}

}}}}

AAA

AAAA

A

Q1

��

Q2

~~}}}}

}}}}

��Q3 Q4 Q5

Q3

~~}}}}

}}}}

AAA

AAAA

A

Q6 Q7

��Q8 (instance of Q0)

The set is kept finite using

generalization

splitting

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 3 / 19

Page 8: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction conjunctive partial deduction

Conjunctive partial deduction�� ��Input logic program P and a query Q0�� ��Initialization S = {Q0} S = {Q0,Q3,Q4,Q5} S = {Q0,Q3,Q4,Q5,Q6}

Q0

~~}}}}

}}}}

AAA

AAAA

A

Q1

��

Q2

~~}}}}

}}}}

��Q3 Q4 Q5

Q3

~~}}}}

}}}}

AAA

AAAA

A

Q6 Q7

��Q8 (instance of Q0)

The set is kept finite using

generalization

splitting

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 3 / 19

Page 9: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction conjunctive partial deduction

Conjunctive partial deduction�� ��Input logic program P and a query Q0�� ��Initialization S = {Q0} S = {Q0,Q3,Q4,Q5} S = {Q0,Q3,Q4,Q5,Q6}

Q0

~~}}}}

}}}}

AAA

AAAA

A

Q1

��

Q2

~~}}}}

}}}}

��Q3 Q4 Q5

Q3

~~}}}}

}}}}

AAA

AAAA

A

Q6 Q7

��Q8 (instance of Q0)

The set is kept finite using

generalization

splitting

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 3 / 19

Page 10: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction conjunctive partial deduction

Conjunctive partial deduction�� ��Input logic program P and a query Q0�� ��Initialization S = {Q0} S = {Q0,Q3,Q4,Q5} S = {Q0,Q3,Q4,Q5,Q6}

Q0

~~}}}}

}}}}

AAA

AAAA

A

Q1

��

Q2

~~}}}}

}}}}

��Q3 Q4 Q5

Q3

~~}}}}

}}}}

AAA

AAAA

A

Q6 Q7

��Q8 (instance of Q0)

The set is kept finite using

generalization

splitting

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 3 / 19

Page 11: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction conjunctive partial deduction

Conjunctive partial deduction�� ��Input logic program P and a query Q0�� ��Initialization S = {Q0} S = {Q0,Q3,Q4,Q5} S = {Q0,Q3,Q4,Q5,Q6}

Q0

~~}}}}

}}}}

AAA

AAAA

A

Q1

��

Q2

~~}}}}

}}}}

��Q3 Q4 Q5

Q3

~~}}}}

}}}}

AAA

AAAA

A

Q6 Q7

��Q8 (instance of Q0)

The set is kept finite using

generalization

splitting

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 3 / 19

Page 12: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction motivation

This work

Original motivation:

paralelizing partial evaluation?

run time groundness and sharing information is essential

Current approaches not useful because

run time information is not available (only PE time info)

usual operations (instance and splitting) do not preserve groundnessand sharing�

Our approach:

hybrid control issues (combines static analysis and online tests)

run time groundness information available

good starting point for paralelizing partial evaluation

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 4 / 19

Page 13: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction motivation

This work

Original motivation:

paralelizing partial evaluation?

run time groundness and sharing information is essential

Current approaches not useful because

run time information is not available (only PE time info)

usual operations (instance and splitting) do not preserve groundnessand sharing�

Our approach:

hybrid control issues (combines static analysis and online tests)

run time groundness information available

good starting point for paralelizing partial evaluation

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 4 / 19

Page 14: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction motivation

This work

Original motivation:

paralelizing partial evaluation?

run time groundness and sharing information is essential

Current approaches not useful because

run time information is not available (only PE time info)

usual operations (instance and splitting) do not preserve groundnessand sharing�

Our approach:

hybrid control issues (combines static analysis and online tests)

run time groundness information available

good starting point for paralelizing partial evaluation

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 4 / 19

Page 15: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

introduction motivation

This work

Original motivation:

paralelizing partial evaluation?

run time groundness and sharing information is essential

Current approaches not useful because

run time information is not available (only PE time info)

usual operations (instance and splitting) do not preserve groundnessand sharing�

Our approach:

hybrid control issues (combines static analysis and online tests)

run time groundness information available

good starting point for paralelizing partial evaluation

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 4 / 19

Page 16: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD basic scheme

Lightweight CPD

1 Pre-processing

call and success pattern analysisleft-termination analysisidentification of non-regular predicates

2 Partial evaluation

non-leftmost unfolding statically determinedonly a limited form of splitting (statically determined)no generalization (but might give up)

3 Post-processing

initially one-step renamed resultantspost-unfolding transition compression to avoid intermediate calls

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 5 / 19

Page 17: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD basic scheme

Lightweight CPD

1 Pre-processing

call and success pattern analysisleft-termination analysisidentification of non-regular predicates

2 Partial evaluation

non-leftmost unfolding statically determinedonly a limited form of splitting (statically determined)no generalization (but might give up)

3 Post-processing

initially one-step renamed resultantspost-unfolding transition compression to avoid intermediate calls

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 5 / 19

Page 18: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD pre-processing

Static analyses

Call and success pattern analysis (e.g., [Leuschel and Vidal, LOPSTR’08])

for each predicate p/n, we get a set of patterns p/n : in 7→ out

e.g., append/3 : {1, 2} 7→ {1, 2, 3}��

� append([ ], Y, Y).

append([X|R], Y, [X|S]) : −append(R, Y, S).

Left-termination analysis

determines if p/n terminates for call pattern in with Prolog’s leftmostselection strategy

e.g., append/3 left-terminates for call pattern {1}e.g., append/3 doesn’t left-terminate for call pattern {2}

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 6 / 19

Page 19: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD pre-processing

Static analyses

Call and success pattern analysis (e.g., [Leuschel and Vidal, LOPSTR’08])

for each predicate p/n, we get a set of patterns p/n : in 7→ out

e.g., append/3 : {1, 2} 7→ {1, 2, 3}��

� append([ ], Y, Y).

append([X|R], Y, [X|S]) : −append(R, Y, S).

Left-termination analysis

determines if p/n terminates for call pattern in with Prolog’s leftmostselection strategy

e.g., append/3 left-terminates for call pattern {1}e.g., append/3 doesn’t left-terminate for call pattern {2}

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 6 / 19

Page 20: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD pre-processing

Strongly regular programs

Extends B-stratifiable programs [Hruza and Stepanek, TPLP 2004]:

first, the call graph of the program is built

predicate p/n is strongly regular if there is no

p(t1, . . . , tn)← body

such that body contains two atoms in the same SCC as p/n

a logic program is strongly regular if all predicates are

Property: SRP cannot produce infinitely growing conjunctions at PE time

�Identifying non-regular predicates will become useful to decide how

to split queries at partial evaluation time

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 7 / 19

Page 21: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD pre-processing

Strongly regular programs

Extends B-stratifiable programs [Hruza and Stepanek, TPLP 2004]:

first, the call graph of the program is built

predicate p/n is strongly regular if there is no

p(t1, . . . , tn)← body

such that body contains two atoms in the same SCC as p/n

a logic program is strongly regular if all predicates are

Property: SRP cannot produce infinitely growing conjunctions at PE time

�Identifying non-regular predicates will become useful to decide how

to split queries at partial evaluation time

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 7 / 19

Page 22: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD pre-processing

Strongly regular programs

Extends B-stratifiable programs [Hruza and Stepanek, TPLP 2004]:

first, the call graph of the program is built

predicate p/n is strongly regular if there is no

p(t1, . . . , tn)← body

such that body contains two atoms in the same SCC as p/n

a logic program is strongly regular if all predicates are

Property: SRP cannot produce infinitely growing conjunctions at PE time

�Identifying non-regular predicates will become useful to decide how

to split queries at partial evaluation time

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 7 / 19

Page 23: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD pre-processing

Strongly regular programs

Extends B-stratifiable programs [Hruza and Stepanek, TPLP 2004]:

first, the call graph of the program is built

predicate p/n is strongly regular if there is no

p(t1, . . . , tn)← body

such that body contains two atoms in the same SCC as p/n

a logic program is strongly regular if all predicates are

Property: SRP cannot produce infinitely growing conjunctions at PE time

�Identifying non-regular predicates will become useful to decide how

to split queries at partial evaluation time

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 7 / 19

Page 24: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD pre-processing

Strongly regular programs

Extends B-stratifiable programs [Hruza and Stepanek, TPLP 2004]:

first, the call graph of the program is built

predicate p/n is strongly regular if there is no

p(t1, . . . , tn)← body

such that body contains two atoms in the same SCC as p/n

a logic program is strongly regular if all predicates are

Property: SRP cannot produce infinitely growing conjunctions at PE time

�Identifying non-regular predicates will become useful to decide how

to split queries at partial evaluation time

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 7 / 19

Page 25: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD pre-processing

Strongly regular programs

Extends B-stratifiable programs [Hruza and Stepanek, TPLP 2004]:

first, the call graph of the program is built

predicate p/n is strongly regular if there is no

p(t1, . . . , tn)← body

such that body contains two atoms in the same SCC as p/n

a logic program is strongly regular if all predicates are

Property: SRP cannot produce infinitely growing conjunctions at PE time

�Identifying non-regular predicates will become useful to decide how

to split queries at partial evaluation time

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 7 / 19

Page 26: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD pre-processing

Example (strongly regular)

applast(L, X, Last) : −append(L, [X], LX), last(Last, LX).last(X, [X]).last(X, [H|T]) : −last(X, T).append([], L, L).append([H|L1], L2, [H|L3]) : −append(L1, L2, L3).

3 SCCs: {applast/3}, {append/3} and {last/2}no clause violates the strongly regular condition

Example (not strongly regular)

flipflip(XT, YT) : −flip(XT, TT), flip(TT, YT).flip(leaf(X), leaf(X)).flip(tree(L, I, R), tree(FR, I, FL)) : −flip(L, FL), flip(R, FR).

2 SCCs: {flipflip/2} and {flip/2}the second clause of flip/2 violates the strongly regular condition

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 8 / 19

Page 27: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

lightweight CPD pre-processing

Example (strongly regular)

applast(L, X, Last) : −append(L, [X], LX), last(Last, LX).last(X, [X]).last(X, [H|T]) : −last(X, T).append([], L, L).append([H|L1], L2, [H|L3]) : −append(L1, L2, L3).

3 SCCs: {applast/3}, {append/3} and {last/2}no clause violates the strongly regular condition

Example (not strongly regular)

flipflip(XT, YT) : −flip(XT, TT), flip(TT, YT).flip(leaf(X), leaf(X)).flip(tree(L, I, R), tree(FR, I, FL)) : −flip(L, FL), flip(R, FR).

2 SCCs: {flipflip/2} and {flip/2}the second clause of flip/2 violates the strongly regular condition

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 8 / 19

Page 28: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation CPD

Lightweight CPD

1 Pre-processing

call and success pattern analysisleft-termination analysisidentification of non-regular predicates

2 Partial evaluation

non-leftmost unfolding statically determinedonly a limited form of splitting (statically determined)no generalization (but might give up)

3 Post-processing

initially one-step renamed resultantspost-unfolding transition compression to avoid intermediate calls

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 9 / 19

Page 29: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation CPD

Lightweight CPD

1 Pre-processing

call and success pattern analysisleft-termination analysisidentification of non-regular predicates

2 Partial evaluation

non-leftmost unfolding statically determinedonly a limited form of splitting (statically determined)no generalization (but might give up)

3 Post-processing

initially one-step renamed resultantspost-unfolding transition compression to avoid intermediate calls

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 9 / 19

Page 30: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation global level

Partial evaluation: global level

Global state:〈〈{qs1, . . . , qsn}, gs〉〉

where

{qs1, . . . , qsn} is a set of queries (with call patterns)

gs is the set of already partially evaluated queries

Initial global state: 〈〈{qs}, ∅〉〉

Transition system�

�(restart)

6 ∃qs ′ ∈ gs. qsi � qs ′, i ∈ {1, . . . , n}〈〈{qs1, . . . , qsn}, gs〉〉 → 〈qsi , [ ], {qsi} ∪ gs〉

(stop)∃qs ′ ∈ gs. qsi � qs ′, i ∈ {1, . . . , n}〈〈{qs1, . . . , qsn}, gs〉〉 →qsi 〈〈 〉〉

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 10 / 19

Page 31: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation global level

Partial evaluation: global level

Global state:〈〈{qs1, . . . , qsn}, gs〉〉

where

{qs1, . . . , qsn} is a set of queries (with call patterns)

gs is the set of already partially evaluated queries

Initial global state: 〈〈{qs}, ∅〉〉

Transition system�

�(restart)

6 ∃qs ′ ∈ gs. qsi � qs ′, i ∈ {1, . . . , n}〈〈{qs1, . . . , qsn}, gs〉〉 → 〈qsi , [ ], {qsi} ∪ gs〉

(stop)∃qs ′ ∈ gs. qsi � qs ′, i ∈ {1, . . . , n}〈〈{qs1, . . . , qsn}, gs〉〉 →qsi 〈〈 〉〉

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 10 / 19

Page 32: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation global level

Partial evaluation: global level

Global state:〈〈{qs1, . . . , qsn}, gs〉〉

where

{qs1, . . . , qsn} is a set of queries (with call patterns)

gs is the set of already partially evaluated queries

Initial global state: 〈〈{qs}, ∅〉〉

Transition system�

�(restart)

6 ∃qs ′ ∈ gs. qsi � qs ′, i ∈ {1, . . . , n}〈〈{qs1, . . . , qsn}, gs〉〉 → 〈qsi , [ ], {qsi} ∪ gs〉

(stop)∃qs ′ ∈ gs. qsi � qs ′, i ∈ {1, . . . , n}〈〈{qs1, . . . , qsn}, gs〉〉 →qsi 〈〈 〉〉

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 10 / 19

Page 33: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation global level

Partial evaluation: global level

Global state:〈〈{qs1, . . . , qsn}, gs〉〉

where

{qs1, . . . , qsn} is a set of queries (with call patterns)

gs is the set of already partially evaluated queries

Initial global state: 〈〈{qs}, ∅〉〉

Transition system�

�(restart)

6 ∃qs ′ ∈ gs. qsi � qs ′, i ∈ {1, . . . , n}〈〈{qs1, . . . , qsn}, gs〉〉 → 〈qsi , [ ], {qsi} ∪ gs〉

(stop)∃qs ′ ∈ gs. qsi � qs ′, i ∈ {1, . . . , n}〈〈{qs1, . . . , qsn}, gs〉〉 →qsi 〈〈 〉〉

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 10 / 19

Page 34: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation global level

Partial evaluation: global level

Global state:〈〈{qs1, . . . , qsn}, gs〉〉

where

{qs1, . . . , qsn} is a set of queries (with call patterns)

gs is the set of already partially evaluated queries

Initial global state: 〈〈{qs}, ∅〉〉

Transition system�

�(restart)

6 ∃qs ′ ∈ gs. qsi � qs ′, i ∈ {1, . . . , n}〈〈{qs1, . . . , qsn}, gs〉〉 → 〈qsi , [ ], {qsi} ∪ gs〉

(stop)∃qs ′ ∈ gs. qsi � qs ′, i ∈ {1, . . . , n}〈〈{qs1, . . . , qsn}, gs〉〉 →qsi 〈〈 〉〉

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 10 / 19

Page 35: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Partial evaluation: local level

Local states:〈qs, ls, gs〉

where

qs is a query (with call paterns)

ls is the local stack (queries already processed in the local level)

gs is the global stack (queries already processed in the global level)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 11 / 19

Page 36: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Partial evaluation: local level

Local states:〈qs, ls, gs〉

where

qs is a query (with call paterns)

ls is the local stack (queries already processed in the local level)

gs is the global stack (queries already processed in the global level)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 11 / 19

Page 37: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Partial evaluation: local level

Local states:〈qs, ls, gs〉

where

qs is a query (with call paterns)

ls is the local stack (queries already processed in the local level)

gs is the global stack (queries already processed in the global level)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 11 / 19

Page 38: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Partial evaluation: local level

Local states:〈qs, ls, gs〉

where

qs is a query (with call paterns)

ls is the local stack (queries already processed in the local level)

gs is the global stack (queries already processed in the global level)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 11 / 19

Page 39: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Definition (unfoldable atom)

it doesn’t embed any previous call

leftmost atom or left-terminating for the associated call pattern

(to ensure correctness w.r.t. finite failures, instead of requiring weaklyfair SLD trees [De Schreye et al, JLP 99])

For instance, given the query p(a), q(X) and the program

p(b).q(X) : −q(X).

the derivation p(a), q(X) ; p(a), q(X) is not weakly fair(thus pq(X) : −pq(X). is not a legal resultant)

In our context, q(X) is not unfoldable (not left-terminating)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 12 / 19

Page 40: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Definition (unfoldable atom)

it doesn’t embed any previous call

leftmost atom or left-terminating for the associated call pattern

(to ensure correctness w.r.t. finite failures, instead of requiring weaklyfair SLD trees [De Schreye et al, JLP 99])

For instance, given the query p(a), q(X) and the program

p(b).q(X) : −q(X).

the derivation p(a), q(X) ; p(a), q(X) is not weakly fair(thus pq(X) : −pq(X). is not a legal resultant)

In our context, q(X) is not unfoldable (not left-terminating)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 12 / 19

Page 41: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Definition (unfoldable atom)

it doesn’t embed any previous call

leftmost atom or left-terminating for the associated call pattern

(to ensure correctness w.r.t. finite failures, instead of requiring weaklyfair SLD trees [De Schreye et al, JLP 99])

For instance, given the query p(a), q(X) and the program

p(b).q(X) : −q(X).

the derivation p(a), q(X) ; p(a), q(X) is not weakly fair(thus pq(X) : −pq(X). is not a legal resultant)

In our context, q(X) is not unfoldable (not left-terminating)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 12 / 19

Page 42: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Splitting

Definition (independent splitting)

Given a query qs, we have that qs1, qs2, qs3 is an independent splitting if

qs = qs1, qs2, qs3

qs1 and qs2 do not share variables (according to call patterns)

For instance, given the query

qs = append(X, Y, L1), append(X, Z, L2), append(L1, L2, R)

the independent splitting of qs returns

qs1 = append(X, Y, L1)qs2 = append(X, Z, L2)qs3 = append(L1, L2, R)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 13 / 19

Page 43: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Splitting

Definition (independent splitting)

Given a query qs, we have that qs1, qs2, qs3 is an independent splitting if

qs = qs1, qs2, qs3

qs1 and qs2 do not share variables (according to call patterns)

For instance, given the query

qs = append(X, Y, L1), append(X, Z, L2), append(L1, L2, R)

the independent splitting of qs returns

qs1 = append(X, Y, L1)qs2 = append(X, Z, L2)qs3 = append(L1, L2, R)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 13 / 19

Page 44: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Definition (regular splitting)

Given a query qs, we have that qs1, . . . , qsn is a regular splitting if

qs = qs1, . . . , qsn

every qsi contains at most one non-regular predicate

For instance, the regular splitting of

flip(L, FL), flip(R, FR)

is

qs1 = flip(L, FL)qs2 = flip(R, FR)

since flip/2 is non-regular

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 14 / 19

Page 45: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Definition (regular splitting)

Given a query qs, we have that qs1, . . . , qsn is a regular splitting if

qs = qs1, . . . , qsn

every qsi contains at most one non-regular predicate

For instance, the regular splitting of

flip(L, FL), flip(R, FR)

is

qs1 = flip(L, FL)qs2 = flip(R, FR)

since flip/2 is non-regular

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 14 / 19

Page 46: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Partial evaluation: local level

(variant)∃qs ′ ∈ ls. qs ≈ qs ′

〈qs, ls, gs〉 v⇒ 〈�, ls, gs〉

(independent splitting)i-split(qs) = 〈qs1, qs2, qs3〉

〈qs, ls, gs〉 i⇒ 〈〈{qs1, qs2, qs3}, gs〉〉

(unfold)unfold(qs) = qs ′

〈qs, ls, gs〉 u⇒σ 〈qs ′, {qs} ∪ ls, gs〉

(regular splitting)r-split(qs) = 〈qs1, . . . , qsn〉

〈qs, ls, gs〉 r⇒ 〈〈{qs1, . . . , qsn}, gs〉〉

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 15 / 19

Page 47: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Partial evaluation: local level

(variant)∃qs ′ ∈ ls. qs ≈ qs ′

〈qs, ls, gs〉 v⇒ 〈�, ls, gs〉

(independent splitting)i-split(qs) = 〈qs1, qs2, qs3〉

〈qs, ls, gs〉 i⇒ 〈〈{qs1, qs2, qs3}, gs〉〉

(unfold)unfold(qs) = qs ′

〈qs, ls, gs〉 u⇒σ 〈qs ′, {qs} ∪ ls, gs〉

(regular splitting)r-split(qs) = 〈qs1, . . . , qsn〉

〈qs, ls, gs〉 r⇒ 〈〈{qs1, . . . , qsn}, gs〉〉

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 15 / 19

Page 48: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Partial evaluation: local level

(variant)∃qs ′ ∈ ls. qs ≈ qs ′

〈qs, ls, gs〉 v⇒ 〈�, ls, gs〉

(independent splitting)i-split(qs) = 〈qs1, qs2, qs3〉

〈qs, ls, gs〉 i⇒ 〈〈{qs1, qs2, qs3}, gs〉〉

(unfold)unfold(qs) = qs ′

〈qs, ls, gs〉 u⇒σ 〈qs ′, {qs} ∪ ls, gs〉

(regular splitting)r-split(qs) = 〈qs1, . . . , qsn〉

〈qs, ls, gs〉 r⇒ 〈〈{qs1, . . . , qsn}, gs〉〉

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 15 / 19

Page 49: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

partial evaluation local level

Partial evaluation: local level

(variant)∃qs ′ ∈ ls. qs ≈ qs ′

〈qs, ls, gs〉 v⇒ 〈�, ls, gs〉

(independent splitting)i-split(qs) = 〈qs1, qs2, qs3〉

〈qs, ls, gs〉 i⇒ 〈〈{qs1, qs2, qs3}, gs〉〉

(unfold)unfold(qs) = qs ′

〈qs, ls, gs〉 u⇒σ 〈qs ′, {qs} ∪ ls, gs〉

(regular splitting)r-split(qs) = 〈qs1, . . . , qsn〉

〈qs, ls, gs〉 r⇒ 〈〈{qs1, . . . , qsn}, gs〉〉

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 15 / 19

Page 50: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

post-processing

Lightweight CPD

1 Pre-processing

call and success pattern analysisleft-termination analysisidentification of non-regular predicates

2 Partial evaluation

non-leftmost unfolding statically determinedonly a limited form of splitting (statically determined)no generalization (but might give up)

3 Post-processing

initially one-step renamed resultantspost-unfolding transition compression to avoid intermediate calls

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 16 / 19

Page 51: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

post-processing

Lightweight CPD

1 Pre-processing

call and success pattern analysisleft-termination analysisidentification of non-regular predicates

2 Partial evaluation

non-leftmost unfolding statically determinedonly a limited form of splitting (statically determined)no generalization (but might give up)

3 Post-processing

initially one-step renamed resultantspost-unfolding transition compression to avoid intermediate calls

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 16 / 19

Page 52: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

post-processing

Post-processing

For 〈qs, ls, gs〉 u⇒σ 〈qs ′, ls ′, gs ′〉we produce ren(qs)σ ← ren(qs ′)

For 〈qs, ls, gs〉 s⇒ 〈〈{qs1, . . . , qsn}, 〉〉, with s ∈ {i , r}we produce ren(qs)← ren(qs1), . . . , ren(qsn)

For every global transition 〈〈{qs1, . . . , qsn}, 〉〉 →qsi 〈〈 〉〉we produce a residual clause of the form ren(qsi )← qsi

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 17 / 19

Page 53: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

post-processing

Post-processing

For 〈qs, ls, gs〉 u⇒σ 〈qs ′, ls ′, gs ′〉we produce ren(qs)σ ← ren(qs ′)

For 〈qs, ls, gs〉 s⇒ 〈〈{qs1, . . . , qsn}, 〉〉, with s ∈ {i , r}we produce ren(qs)← ren(qs1), . . . , ren(qsn)

For every global transition 〈〈{qs1, . . . , qsn}, 〉〉 →qsi 〈〈 〉〉we produce a residual clause of the form ren(qsi )← qsi

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 17 / 19

Page 54: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

post-processing

Post-processing

For 〈qs, ls, gs〉 u⇒σ 〈qs ′, ls ′, gs ′〉we produce ren(qs)σ ← ren(qs ′)

For 〈qs, ls, gs〉 s⇒ 〈〈{qs1, . . . , qsn}, 〉〉, with s ∈ {i , r}we produce ren(qs)← ren(qs1), . . . , ren(qsn)

For every global transition 〈〈{qs1, . . . , qsn}, 〉〉 →qsi 〈〈 〉〉we produce a residual clause of the form ren(qsi )← qsi

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 17 / 19

Page 55: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

concluding remarks experimental results

Experimental results

A prototype has been implemented (≈ 1000 lines, SWI Prolog)

(left-termination and SRP analysis still missing)

http : //kaz.dsic.upv.es/lite.html

benchmark advisor applast depth doubleapp ex depth flip matchapp regexp.r1original 4 58 24 50 24 34 374 73residual 0 29 1 34 15 47 23 10

benchmark regexp.r2 regexp.r3 relative rev acc type rotateprune transposeoriginal 28 41 96 35 32 58residual 8 12 3 34 45 0

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 18 / 19

Page 56: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

concluding remarks experimental results

Experimental results

A prototype has been implemented (≈ 1000 lines, SWI Prolog)

(left-termination and SRP analysis still missing)

http : //kaz.dsic.upv.es/lite.html

benchmark advisor applast depth doubleapp ex depth flip matchapp regexp.r1original 4 58 24 50 24 34 374 73residual 0 29 1 34 15 47 23 10

benchmark regexp.r2 regexp.r3 relative rev acc type rotateprune transposeoriginal 28 41 96 35 32 58residual 8 12 3 34 45 0

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 18 / 19

Page 57: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

concluding remarks summary and future work

Summary and future work

New hybrid framework for CPD (correctness not difficult)

Well suited to preserve run time information (groundness and sharing)

Good candidate to develop a paralelizing partial evaluator

Future work

deal with built-in’s and negation

add (run time) variable sharing information

produce paralel conjunctions in residual programs

(preliminary experiments with concurrent/3 are promising)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 19 / 19

Page 58: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

concluding remarks summary and future work

Summary and future work

New hybrid framework for CPD (correctness not difficult)

Well suited to preserve run time information (groundness and sharing)

Good candidate to develop a paralelizing partial evaluator

Future work

deal with built-in’s and negation

add (run time) variable sharing information

produce paralel conjunctions in residual programs

(preliminary experiments with concurrent/3 are promising)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 19 / 19

Page 59: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

concluding remarks summary and future work

Summary and future work

New hybrid framework for CPD (correctness not difficult)

Well suited to preserve run time information (groundness and sharing)

Good candidate to develop a paralelizing partial evaluator

Future work

deal with built-in’s and negation

add (run time) variable sharing information

produce paralel conjunctions in residual programs

(preliminary experiments with concurrent/3 are promising)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 19 / 19

Page 60: A Hybrid Approach to Conjunctive Partial Deduction · Partial evaluation input program and part of input data (staticdata) output specialized (residual) program Partial evaluator

concluding remarks summary and future work

Summary and future work

New hybrid framework for CPD (correctness not difficult)

Well suited to preserve run time information (groundness and sharing)

Good candidate to develop a paralelizing partial evaluator

Future work

deal with built-in’s and negation

add (run time) variable sharing information

produce paralel conjunctions in residual programs

(preliminary experiments with concurrent/3 are promising)

G Vidal (Valencia, Spain) A Hybrid Approach to CPD LOPSTR 2010 19 / 19