Efficiency Improvement by Tree Transducer Composition Janis Voigtl - - PowerPoint PPT Presentation

efficiency improvement by tree transducer composition
SMART_READER_LITE
LIVE PREVIEW

Efficiency Improvement by Tree Transducer Composition Janis Voigtl - - PowerPoint PPT Presentation

Workshop GK 334, April 2, 2003 Efficiency Improvement by Tree Transducer Composition Janis Voigtl ander Dresden University of Technology http://wwwtcs.inf.tu-dresden.de/ voigt Supported by the Deutsche Forschungsgemeinschaft under


slide-1
SLIDE 1

Workshop GK 334, April 2, 2003

Efficiency Improvement by Tree Transducer Composition

Janis Voigtl¨ ander

Dresden University of Technology http://wwwtcs.inf.tu-dresden.de/

∼voigt

Supported by the “Deutsche Forschungsgemeinschaft” under grants KU 1290/2-1 and KU 1290/2-3.

slide-2
SLIDE 2

1

Macro Tree Transducers [Engelfriet, 1980]

data Term = Term × Term | Term + Term | A | B data List = ⊗ List | ⊕ List |

A List | B List | Nil

data Ins = Mul Ins | Add Ins | LoadA Ins | LoadB Ins | End pre :: Term → List → List pre (u1 × u2) y = ⊗ (pre u1 (pre u2 y)) pre (u1 + u2) y = ⊕ (pre u1 (pre u2 y)) pre A y =

A y

pre B y =

B y

pre × A + B A Nil ⇒ ⊗ pre A pre + B A Nil ⇒ ⊗

  • A

pre + B A Nil ⇒3 ⊗

  • A

  • B
  • A

Nil rev :: List → Ins → Ins rev (⊗ v) z = rev v (Mul z) rev (⊕ v) z = rev v (Add z) rev (

A v) z = rev v (LoadA z)

rev (

B v) z = rev v (LoadB z)

rev Nil z = z main t = rev (pre t Nil) End

slide-3
SLIDE 3

2

Modularity vs. Efficiency

rev pre × A + B A Nil End ⇒5

pre

rev ⊗

  • A

  • B
  • A

Nil End ⇒6

rev

LoadA LoadB Add LoadA Mul End

Deforestation techniques [Wadler, 1990; Gill et al., 1993] fail to eliminate intermediate results inside accumulating parameters!

slide-4
SLIDE 4

3

Composition Techniques for Tree Transducers

T OP ; MAC ⊆ MAC [Engelfriet, 1981]:

g f u z1 z

f g u z1 z

  • · · ·

· · ·

MAC ; T OP ⊆ MAC [Engelfriet & Vogler, 1985]:

g f u y1 y

❀ f g u g1 y1 g

y

· · · · · ·

MACsu ; MACwsu ⊆ MAC [K¨ uhnemann, 1998]: MACsu ; MACwsu ⊆ AT Tsu ; AT T ⊆ AT T ⊆ MAC

slide-5
SLIDE 5

4

Generalized Construction [V., 2001]

Replace compositions involving an intermediate result as fol- lows:

rev pre u z ❀ prerev u rev 1pre1rev u z z

Rules of prerev: obtained by translating right-hand sides of pre with rules of rev. Rules of 1pre1rev: obtained by “walking upwards” in right-hand sides of pre.

slide-6
SLIDE 6

5

Translating Right-Hand Sides: Example

prerev × u1 u2 yrev z = rev ⊗ pre u1 pre u2 y z ⇒ rev pre u1 pre u2 y Mul z ❀ prerev u1 rev pre u2 y 1pre1rev u1 Mul z Mul z ❀ prerev u1 prerev u2 rev y . . . 1pre1rev u1 Mul z Mul z ⇒ prerev u1 prerev u2 yrev 1pre1rev u1 Mul z Mul z

slide-7
SLIDE 7

6

Transformed Program

prerev :: Term → Ins → Ins → Ins prerev (u1 × u2) yrev z = prerev u1 (prerev u2 yrev (1pre1rev u1 (Mul z))) (Mul z) prerev (u1 + u2) yrev z = prerev u1 (prerev u2 yrev (1pre1rev u1 (Add z))) (Add z) prerev A yrev z = yrev prerev B yrev z = yrev 1pre1rev :: Term → Ins → Ins 1pre1rev (u1 × u2) z = 1pre1rev u2 (1pre1rev u1 (Mul z)) 1pre1rev (u1 + u2) z = 1pre1rev u2 (1pre1rev u1 (Add z)) 1pre1rev A z = LoadA z 1pre1rev B z = LoadB z main

  • t = prerev t (1pre1rev t End) End

How does efficiency of this program relate to the original one?

slide-8
SLIDE 8

7

Possible Loss of Efficiency

data Nat = S Nat | Z div, div

  • :: Nat → Nat

div (S u) = div

  • u

div Z = Z div

  • (S u) = S (div u)

div

  • Z

= Z exp :: Nat → Nat → Nat exp (S v) z = exp v (exp v z) exp Z z = S z main t = exp (div t) Z ❀ divexp, div

  • exp :: Nat → Nat → Nat

divexp (S u) z = div

  • exp u z

divexp Z z = S z div

  • exp (S u) z = divexp u (divexp u z)

div

  • exp

Z z = S z main

  • t = divexp t Z

exp div S2

  • Z

Z

⇒2

2

+2

S2

Z

, but

divexp S2

  • Z

Z

⇒3

2

✂ ✆

2

S2

Z

slide-9
SLIDE 9

8

Efficiency Analysis for Non-strict Evaluation is Difficult

isort [] = [] isort (x : xs) = insert x (isort xs) insert x [] = [x] insert x (y : ys) = if x ≤ y then x : y : ys else y : insert x ys qsort [] = [] qsort (x : xs) = qsort (filter (≤ x) xs) + + x : qsort (filter (> x) xs) head (x : xs) = x minimum xs = head (isort xs)

  • isort and qsort require quadratic worst-case complexity, but

qsort is more efficient in average case

  • minimum has linear worst-case complexity, but replacing

qsort for isort would make it quadratic

slide-10
SLIDE 10

“Ticking” of Original Program

pre

  • (u1 × u2) y = ⋄ (⊗ (pre
  • u1 (pre
  • u2 y)))

pre

  • (u1 + u2) y = ⋄ (⊕ (pre
  • u1 (pre
  • u2 y)))

pre

  • A

y = ⋄ (

A y)

pre

  • B

y = ⋄ (

B y)

rev

(⋄ v) z = • (rev

v z) rev

(⊗ v) z = • (rev

v (Mul z)) rev

(⊕ v) z = • (rev

v (Add z)) rev

(

A v) z = • (rev

v (LoadA z)) rev

(

B v) z = • (rev

v (LoadB z)) rev

Nil z = • z rev

pre

× A B End End ⇒ rev

⊗ pre

A pre

B End End ⇒

  • rev

⊗ pre

A pre

B End End ⇒

  • rev

pre

A pre

B End Mul End ⇒

· · ·

slide-11
SLIDE 11

Ticking of Composed Program

prerev

  • (u1 × u2) y z = ◦ (prerev
  • u1 (prerev
  • u2 y (1pre1rev
  • u1 (Mul z))) (Mul z))

prerev

  • (u1 + u2) y z = ◦ (prerev
  • u1 (prerev
  • u2 y (1pre1rev
  • u1 (Add z))) (Add z))

prerev

  • A

y z = ◦ y prerev

  • B

y z = ◦ y 1pre1rev

  • (u1 × u2)

z = ◦ (1pre1rev

  • u2 (1pre1rev
  • u1 (Mul z)))

1pre1rev

  • (u1 + u2)

z = ◦ (1pre1rev

  • u2 (1pre1rev
  • u1 (Add z)))

1pre1rev

  • A

z = ◦ (LoadA z) 1pre1rev

  • B

z = ◦ (LoadB z) main

  • t = prerev
  • t (1pre1rev
  • t End) End

prerev

× A B 1pre1rev

× A B End End ⇒

  • prerev

A prerev

B 1pre1rev

× A B End . . . . . . ⇒2

  • 1pre1rev

× A B End ⇒

  • 1pre1rev

B 1pre1rev

A Mul End ⇒

  • LoadB

1pre1rev

A Mul End ⇒

  • LoadB
  • LoadA

Mul End

slide-12
SLIDE 12

11

Annotation through Composition

pre

✂✁ (u1 × u2) y = ⋄ (⊗ (pre ✂✁ u1 (pre ✂✁ u2 (⋆ y))))

pre

✂✁ (u1 + u2) y = ⋄ (⊕ (pre ✂✁ u1 (pre ✂✁ u2 (⋆ y))))

pre

✂✁

A y = ⋄ (

A (⋆ y))

pre

✂✁

B y = ⋄ (

B (⋆ y))

rev

(⋄ v) z = ◦ (rev

✄ v z)

rev

(⋆ v) z = rev

✄ v (◦ z)

rev

✄ (⊗ v) z = rev ✄ v (Mul z)

rev

✄ (⊕ v) z = rev ✄ v (Add z)

rev

✄ (

A v) z = rev

✄ v (LoadA z)

rev

✄ (

B v) z = rev

✄ v (LoadB z)

rev

Nil z = z Composes into the same program, hence the num- ber of ◦-symbols in the reduction result of: rev

pre

☎✁

× A B End End is equal to the number of call-by-name reduction steps of: prerev × A B 1pre1rev × A B End End ⇒

LoadB LoadA Mul End

slide-13
SLIDE 13

12

Combining Annotations

pre

✂✁ (u1 × u2) y = ⋄ (⊗ (pre ✂✁ u1 (pre ✂✁ u2 (⋆ y))))

pre

✂✁ (u1 + u2) y = ⋄ (⊕ (pre ✂✁ u1 (pre ✂✁ u2 (⋆ y))))

pre

✂✁

A y = ⋄ (

A (⋆ y))

pre

✂✁

B y = ⋄ (

B (⋆ y))

rev

(⋄ v) z = • (◦ (rev

  • ✄ v z))

rev

(⋆ v) z = rev

  • ✄ v (◦ z)

rev

(⊗ v) z = • (rev

  • ✄ v (Mul z))

rev

(⊕ v) z = • (rev

  • ✄ v (Add z))

rev

  • ✄ (

A v) z = • (rev

  • ✄ v (LoadA z))

rev

  • ✄ (

B v) z = • (rev

  • ✄ v (LoadB z))

rev

Nil z = • z

Relative efficiency of original vs. transformed pro- gram can be determined by comparing numbers of

  • - and ◦-symbols produced by above program:

rev

pre

× A B End End ⇒

  • LoadB
  • LoadA

Mul End

slide-14
SLIDE 14

13

An Example Criterion at Work

pre

  • ✄ (u1 × u2) y = • (⊗ (pre
  • ✄ u1 (pre
  • ✄ u2 (◦ y))))

pre

  • ✄ (u1 + u2) y = • (⊕ (pre
  • ✄ u1 (pre
  • ✄ u2 (◦ y))))

pre

A y = • (

A (◦ y))

pre

B y = • (

B (◦ y))

rev

  • (◦ v) z = ◦ (rev
✄ v z)

rev

  • (⊗ v) z = rev
✄ v (Mul z)

rev

  • (⊕ v) z = rev
✄ v (Add z)

rev

✄ (

A v) z = rev

✄ v (LoadA z)

rev

✄ (

B v) z = rev

✄ v (LoadB z)

rev

  • Nil

z = z rev

  • (• v) z = • (rev
✄ v z)

Since pre

  • ✄ is context-linear and -nondeleting, and

rev

✄ is linear and nondeleting, the following rules

may be used with the aim of eliminating all ◦- symbols in the right-hand sides of pre

  • ✄ :
  • v

⇒ v

  • f

u v1 v

· · · ⇒ f u v1

  • v

v

· · · · · ·

  • v

⇒ v f u v1

  • v

v

· · · · · · ⇒

  • f

u v1 v

· · ·

  • C

v1 v

· · · ⇒ C v1

  • v

v

· · · · · · C v1

  • v

v

· · · · · · ⇒

  • C

v1 v

· · ·

slide-15
SLIDE 15

14

Why Category Theory does not prove my Theorems

  • free monads capture induction on tree structure, but we

also do induction proofs on: – prefix order of paths – reversed subset order over sets of pairs (state,variable)

  • finding (generalized) induction hypotheses is the really tough

job; any support?

  • not just translation of right-hand sides, but, e.g., “walking

upwards”

  • free monads do not count (as would be needed to charac-

terize linearity restrictions, and in efficiency analysis)

slide-16
SLIDE 16

References

[Engelfriet, 1980] Some open questions and recent results on tree transducers and tree languages. In: Formal language theory; perspectives and open problems. Academic Press. [Engelfriet, 1981] Tree transducers and syntax directed seman-

  • tics. Tech. rept. 363. Technische Hogeschool Twente.

[Engelfriet & Vogler, 1985] Macro tree transducers. J. Com-

  • put. Syst. Sci., 31, 71–145.

[Gill, Launchbury & Peyton Jones, 1993] A short cut to defor-

  • estation. In: Functional Programming Languages and Com-

puter Architecture, Copenhagen, Denmark. ACM Press. [K¨ uhnemann, 1998] Benefits of tree transducers for optimizing functional programs. In: Foundations of Software Technology & Theoretical Computer Science, Chennai, India. LNCS, vol. 1530. [Voigtl¨ ander, 2001] Composition of restricted macro tree trans-

  • ducers. M.Sc. thesis, Dresden University of Technology.

[Voigtl¨ ander, 2002] Conditions for efficiency improvement by tree transducer composition. In: Rewriting Techniques and Applications, Copenhagen, Denmark. LNCS, vol. 2378. [Voigtl¨ ander & K¨ uhnemann, 200?] Composition of functions with accumulating parameters. J. Funct. Prog., to appear. [Wadler, 1990] Deforestation: Transforming programs to elim- inate trees. Theoret. Comput. Sci., 73, 231–248.