HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.
-
Upload
wilfred-nichols -
Category
Documents
-
view
231 -
download
0
Transcript of HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.
![Page 1: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/1.jpg)
HOW TO BEMORE PRODUCTIVE
Graham Hutton and Mauro Jaskelioff
![Page 2: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/2.jpg)
2
A stream is an infinite sequence of values:
The type of streams is co-inductively defined:
Streams
codata Stream A = A Stream A
0 1 2 3 4 ...
![Page 3: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/3.jpg)
3
Streams can be defined by recursive equations:
Defining Streams
ones :: Stream Nat
ones = 1 ones
nats :: Stream Nat
nats = 0 map (+1) nats
![Page 4: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/4.jpg)
4
This Talk
How do we ensure such equations make sense, i.e. that they produce well-defined streams?
A new approach, based upon a representation theorem for contractive functions.
loop :: Stream A
loop = tail loop
![Page 5: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/5.jpg)
5
Fixed Points
ones = 1 ones
ones = fix body
body xs = 1 xs
can be rewritten as:
fix f = f (fix f)
The starting point for our approach is the use ofexplicit fixed points. For example:
![Page 6: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/6.jpg)
6
The Problem
Given a function on streams
when does
makes sense, i.e. produce a well-defined stream?
f :: Stream A Stream A
fix f :: Stream A
![Page 7: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/7.jpg)
7
Adapting an idea from topology, let us say that afunction f on streams is contractive iff:
Equal for one
further element.
Equal for the first n elements
.
xs =n ys f xs =n+1 f ys
Contractive Functions
![Page 8: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/8.jpg)
8
Banach’s Theorem
Every contractive function
has a unique fixed point
f :: Stream A c Stream A
fix f :: Stream A
and hence produces a well-defined stream.
![Page 9: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/9.jpg)
9
This theorem provides a
semantic means of ensuring that
stream definitions are
valid.
![Page 10: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/10.jpg)
10
Example
The function (1 ) is contractive:
Hence, it has a unique fixed point, and
is a valid definition for a stream.
xs =n ys 1 xs =n+1 1 ys
ones = fix (1 )
![Page 11: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/11.jpg)
11
Example
The function tail is not contractive:
Hence, Banach’s theorem does not apply, and
is rejected as an invalid definition.
xs =n ys tail xs =n+1 tail ys
loop = fix tail
![Page 12: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/12.jpg)
12
Questions
Does the converse also hold - every function with a unique fixed point is contractive?
What does contractive actually mean?
What kind of functions are contractive?
![Page 13: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/13.jpg)
13
Key Idea
If we view a stream as a time-varying value
then a function on streams is contractive iff
x0 x1 x2 x3 x4 ...
Its output value at any time only dependson input values at strictly earlier times.
![Page 14: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/14.jpg)
14
This result simplifies the process of
deciding if a function is contractive.
![Page 15: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/15.jpg)
15
Examples
(1 )
tail
Each output depends on the input one step earlier in time.
Each output depends on the input one step later in time.
![Page 16: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/16.jpg)
16
Generating Functions
This idea is formalised using generating functions, which map finite lists to single values:
[A] B
All earlier input values.
The next output value.
![Page 17: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/17.jpg)
Representation Theorem
17
Every contractive function can be represented by a generating function, and vice versa:
Stream A c Stream B [A] B
gen
rep
Moreover, rep and gen form an isomorphism.
![Page 18: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/18.jpg)
18
This theorem provides a
practical means of producing
streams that are well-defined.
![Page 19: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/19.jpg)
Example
19
g :: [Nat] Nat
g [] = 1
g (x:xs) = x
ones :: Stream Nat
ones = fix (gen g)
Generator for ones.
Guaranteed to be well-defined.
![Page 20: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/20.jpg)
Example
20
g :: [Nat] Nat
g [] = 0
g (x:xs) = x+1
nats :: Stream Nat
nats = fix (gen g)
Generator for nats.
Guaranteed to be well-defined.
![Page 21: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/21.jpg)
Example
21
g :: [Nat] Nat
g [] = 0
g [x] = 1
g (x:y:xs) = x+y
fibs :: Stream Nat
fibs = fix (gen g)
Generator for fibs.
Guaranteed to be well-defined.
![Page 22: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/22.jpg)
22
Summary
Generating functions are a sound and complete representation of contractive functions;
Gives a precise characterisation of the class of functions that are contractive;
Provides a simple but rather general means of producing well-defined streams.
![Page 23: HOW TO BE MORE PRODUCTIVE Graham Hutton and Mauro Jaskelioff.](https://reader036.fdocuments.in/reader036/viewer/2022081421/56649db65503460f94aa8ab6/html5/thumbnails/23.jpg)
23
Ongoing and Further Work
Generalisation to final co-algebras;
Other kinds of generating functions;
Relationship to other techniques;
Improving efficiency.