Datamadeoutoffunctions 160201105803

55
data made out of functions #lca2016 FP miniconf @KenScambler λλλλλ λλ λλ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λ λλλλ λ λ λ λλ λλ λλλλλ

Transcript of Datamadeoutoffunctions 160201105803

Page 1: Datamadeoutoffunctions 160201105803

data made out of

functions#lca2016 FP miniconf

@KenScambler

λλλλλ λλ λλ λ λ λ λλ λ λ λλ λλ λ λ λ λ λλλλ λ λ λ λλ λλ λλλλλ

Page 2: Datamadeoutoffunctions 160201105803

Diogenes of Sinope412 – 323 BC

Page 3: Datamadeoutoffunctions 160201105803

Diogenes of Sinope412 – 323 BC

• Simplest man of all time• Obnoxious hobo• Lived in a barrel

Page 4: Datamadeoutoffunctions 160201105803

I’ve been using this bowl like a sucker!

Page 5: Datamadeoutoffunctions 160201105803
Page 6: Datamadeoutoffunctions 160201105803
Page 7: Datamadeoutoffunctions 160201105803

Um…. what

Page 8: Datamadeoutoffunctions 160201105803

"abcd"

IF x THEN y ELSE z

WHILE cond {…}

[a, b, c, d]

BOOL

INT

STRUCT { fields…}

λa -> b

Page 9: Datamadeoutoffunctions 160201105803

"abcd"

IF x THEN y ELSE z

WHILE cond {…}

[a, b, c, d]

BOOL

INT

STRUCT { fields…}

λa -> b

Strings are pretty much

arrays

Page 10: Datamadeoutoffunctions 160201105803

"abcd"

IF x THEN y ELSE z

WHILE

[a, b, c, d]

BOOL

INT

STRUCT { fields…}

λa -> b

Recursion can do loops

Page 11: Datamadeoutoffunctions 160201105803

"abcd"

IF x THEN y ELSE z

WHILE

[a,b,c,d]

BOOL

INT

STRUCT { fields…}

λa -> b

Recursive data structures can do

lists

Page 12: Datamadeoutoffunctions 160201105803

"abcd"

IF x THEN y ELSE z

WHILE

[a,b,c,d]

BOOL

INT

STRUCT { fields…}

λa -> b

Ints can do bools

Page 13: Datamadeoutoffunctions 160201105803

"abcd"

IF x THEN y ELSE z

WHILE

[a,b,c,d]

BOOL

INT

STRUCT { fields…}

λa -> b

Page 14: Datamadeoutoffunctions 160201105803

"abcd"IF x THEN

WHILE

[a,b,c,d]

BOOLINTSTRUCT

λa -> b

Page 15: Datamadeoutoffunctions 160201105803

Alonzo Church1903 - 1995

λa -> bLambda calculus

Page 16: Datamadeoutoffunctions 160201105803

λa -> b

Alonzo Church1903 - 1995

Lambda calculus

Page 17: Datamadeoutoffunctions 160201105803

We can make any data structure out of

functions!

Church encoding

Page 18: Datamadeoutoffunctions 160201105803

Booleans

Bool

Page 19: Datamadeoutoffunctions 160201105803

Church booleans

resultBool

Page 20: Datamadeoutoffunctions 160201105803

Church booleans

resultBool

If we define everything you can do with a structure, isn’t

that the same as defining the structure itself?

Page 21: Datamadeoutoffunctions 160201105803

TRUE

FALSEor

Page 22: Datamadeoutoffunctions 160201105803

TRUE

FALSEor

result

“What we do if it’s true”

Page 23: Datamadeoutoffunctions 160201105803

“What we do if it’s false”

TRUE

FALSEor

result

Page 24: Datamadeoutoffunctions 160201105803

TRUE

FALSEor

result

resultresult

Page 25: Datamadeoutoffunctions 160201105803

()

()

result

resultresult

Page 26: Datamadeoutoffunctions 160201105803

result

resultresult

Page 27: Datamadeoutoffunctions 160201105803

r r r

The Church encoding of a boolean is:

Page 28: Datamadeoutoffunctions 160201105803

Natural numbers01234…

Page 29: Datamadeoutoffunctions 160201105803

Natural numbers00 +10 +1 +10 +1 +1 +10 +1 +1 +1 +1…

Page 30: Datamadeoutoffunctions 160201105803

Natural numbers00 +10 +1 +10 +1 +1 +10 +1 +1 +1 +1…

Giuseppe Peano1858 - 1932

Natural numbers form

a data structure!

Page 31: Datamadeoutoffunctions 160201105803

Zero

Succ(Nat)or

Nat =

Natural Peano numbers

Giuseppe Peano1858 - 1932

Page 32: Datamadeoutoffunctions 160201105803

orNat =

Now lets turn it into functions!

Zero

Succ(Nat)

Page 33: Datamadeoutoffunctions 160201105803

Zero

Succ(Nat)or

result

“If it’s a successor”

Page 34: Datamadeoutoffunctions 160201105803

or “If it’s zero”

resultZero

Succ(Nat)

Page 35: Datamadeoutoffunctions 160201105803

result

resultresultor

Zero

Succ(Nat)

Page 36: Datamadeoutoffunctions 160201105803

Nat

()

result

resultresult

Page 37: Datamadeoutoffunctions 160201105803

Nat result

resultresult

Page 38: Datamadeoutoffunctions 160201105803

Nat result

resultresult()

Nat()Nat

()Nat

()Nat

Page 39: Datamadeoutoffunctions 160201105803

result

resultresult

result

Page 40: Datamadeoutoffunctions 160201105803

(r r) r

The Church encoding of natural numbers is:

r

Page 41: Datamadeoutoffunctions 160201105803

PerformanceNative ints Peano numbers Church numbers

addition

print

Really really fast

O(n)

O(n2)multiplication

O(n) O(n)

O(1)

O(1)

Page 42: Datamadeoutoffunctions 160201105803

PerformanceNative ints Peano numbers Church numbers

addition

print

Really really fast

O(n)

O(n2)multiplication

O(n) O(n)

O(1)

O(1)

Page 43: Datamadeoutoffunctions 160201105803

Church encoding cheat sheet

A | B(A, B)

SingletonRecursion

(a r ) (b r ) r

(a r )b r

r

r r

A a r

Page 44: Datamadeoutoffunctions 160201105803

Lists

Page 45: Datamadeoutoffunctions 160201105803

Cons lists

Page 46: Datamadeoutoffunctions 160201105803

Nil

Cons(a, List a)or

List a =

Cons lists

Page 47: Datamadeoutoffunctions 160201105803

Nil

Cons(a, List a)or

result

resultresult

Page 48: Datamadeoutoffunctions 160201105803

(a, List a) result

resultresult

()

Page 49: Datamadeoutoffunctions 160201105803

(a, ) result

resultresult

result

Page 50: Datamadeoutoffunctions 160201105803

a result

resultresult

result

Page 51: Datamadeoutoffunctions 160201105803

r r

The Church encoding of lists is:

r(a ) r

Page 52: Datamadeoutoffunctions 160201105803

r r

The Church encoding of lists is:

r(a ) r

AKA: foldr

Page 53: Datamadeoutoffunctions 160201105803

λa -> b

Page 54: Datamadeoutoffunctions 160201105803

λa -> b∴

Page 55: Datamadeoutoffunctions 160201105803

λa -> b∴