![Page 1: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/1.jpg)
WORK IT, WRAP IT, FIX IT, FOLD IT
Graham Hutton and Neil Sculthorpe
![Page 2: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/2.jpg)
2
This Talk
Worker/wrapper is a simple but powerful method for optimizing recursive programs;
Previously, we developed theories for fix and fold, but with different correctness conditions;
We combine and extend the two approaches to give a generalised worker/wrapper theory.
![Page 3: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/3.jpg)
3
Worker / Wrapper
program
wrapper
worker
A technique for changing the type of a recursive program to improve its performance:
![Page 4: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/4.jpg)
4
Fixed Points
ones = 1 : ones
ones = fix f
f xs = 1 : xs
can be rewritten as:
fix f = f (fix f)
Our original formalisation was based on the use of explicit fixed points. For example:
![Page 5: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/5.jpg)
5
The Problem
A
Type of the desired worker,
fix g.
Type of the original
program, fix f.
B
Suppose we wish to change the type of a recursiveprogram that is defined using fix.
![Page 6: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/6.jpg)
6
Assumptions
We assume conversion functions
A can be faithfully
represented by B.
such that:
abs . rep = idA
A B
abs
rep
![Page 7: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/7.jpg)
7
Let’s Calculate!
7
fix f
fix (abs . rep . f)
=
fix (idA . f)
=
abs (fix g)
=
abs (fix (rep . f . abs))
=
Rolling rule.
![Page 8: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/8.jpg)
8
Summary
fix f
We have derived the following factorisation:
Wrapper of type B
A.
Recursive program of type A.
abs=
Recursive worker of type
B.
fix g
![Page 9: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/9.jpg)
9
Final Step
We simplify the worker
fix (rep . f. abs)
rep absand
to eliminate the overhead of repeatedly convertingbetween the two types, by fusing together
fix g =
![Page 10: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/10.jpg)
10
The Worker / Wrapper Recipe
① Express the original program using fix;
② Choose the new type for the program;
③ Define appropriate conversion functions;
④ Apply the worker/wrapper transformation;
⑤ Simplify the resulting definitions.
![Page 11: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/11.jpg)
11
Generalising
The technique also works for weaker assumptions:
From the ‘fix’
paper.
abs . rep = idA
abs . rep . f = f
fix (abs . rep . f) = fix f
![Page 12: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/12.jpg)
12
… and for other conditions relating f and g:
g = rep . f . abs
rep . f = g . rep
abs . g = f . abs
From the ‘fold’
paper.
fix g = fix (rep . f . abs)
fix g = rep (fix f)
Necessary and
sufficient.
![Page 13: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/13.jpg)
13
Generalised Recipe
If the worker is already given, we aim to verify that one of the conditions is satisfied;
Otherwise, our aim is to construct the worker, using one of the conditions as a specification;
Similar assumptions and conditions also give a generalised worker/wrapper theory for fold.
![Page 14: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/14.jpg)
14
Example
![Page 15: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/15.jpg)
15
Example
![Page 16: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/16.jpg)
16
Summary
Generalised technique for changing the type of a program to improve its performance;
Captures a wide variety of program optimization techniques in a single unified framework;
The paper also presents a range of new results concerning strictness side conditions.
![Page 17: WORK IT, WRAP IT, FIX IT, FOLD IT Graham Hutton and Neil Sculthorpe](https://reader036.vdocuments.us/reader036/viewer/2022062409/5697bff41a28abf838cbd233/html5/thumbnails/17.jpg)
17
Further Work
Other recursion patterns;
Time and space analysis;
Computational effects;
Implementing the technique.