faith, evolution, and programming languages...faith, evolution, and programming languages philip...

Post on 10-Oct-2020

2 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Faith, Evolution, and ProgrammingLanguages

Philip WadlerUniversity of Edinburgh

TechMesh, London4 December 2012

Evolution

Multiculturalism

Part I

Church: The origins of faith

Gerhard Gentzen (1909–1945)

Gerhard Gentzen (1935) — Natural Deduction

Gerhard Gentzen (1935) — Natural Deduction

Gerhard Gentzen (1935) — Natural Deduction

[A]x···B

⊃-IxA⊃B

A⊃B A⊃-E

B

A B&-I

A&B

A&B&-E0

A

A&B&-E1

B

Simplifying a proof

[B & A]z&-E1

A

[B & A]z&-E0

B&-I

A&B⊃-Iz

(B & A)⊃ (A&B)

[B]y [A]x&-I

B & A⊃-E

A&B

Simplifying a proof

[B & A]z&-E1

A

[B & A]z&-E0

B&-I

A&B⊃-Iz

(B & A)⊃ (A&B)

[B]y [A]x&-I

B & A⊃-E

A&B⇓

[B]y [A]x&-I

B & A&-E1

A

[B]y [A]x&-I

B & A&-E0

B&-I

A&B

Simplifying a proof

[B & A]z&-E1

A

[B & A]z&-E0

B&-I

A&B⊃-Iz

(B & A)⊃ (A&B)

[B]y [A]x&-I

B & A⊃-E

A&B⇓

[B]y [A]x&-I

B & A&-E1

A

[B]y [A]x&-I

B & A&-E0

B&-I

A&B⇓

[A]x [B]y&-I

A&B

Alonzo Church (1903–1995)

Alonzo Church (1932) — Lambda calculus

Alonzo Church (1940) — Typed λ-calculus

[x : A]x···

u : B⊃-Ix

λx. u : A⊃B

s : A⊃B t : A⊃-E

s t : B

t : A u : B&-I

〈t, u〉 : A&B

s : A&B&-E0

s0 : A

s : A&B&-E1

s1 : B

Simplifying a program

[z : B & A]z&-E1

z1 : A

[z : B & A]z&-E0

z0 : B&-I

〈z1, z0〉 : A&B⊃-Iz

λz. 〈z1, z0〉 : (B & A)⊃ (A&B)

[y : B]y [x : A]x&-I

〈y, x〉 : B & A⊃-E

(λz. 〈z1, z0〉) 〈y, x〉 : A&B

Simplifying a program

[z : B & A]z&-E1

z1 : A

[z : B & A]z&-E0

z0 : B&-I

〈z1, z0〉 : A&B⊃-Iz

λz. 〈z1, z0〉 : (B & A)⊃ (A&B)

[y : B]y [x : A]x&-I

〈y, x〉 : B & A⊃-E

(λz. 〈z1, z0〉) 〈y, x〉 : A&B

⇓[y : B]y [x : A]x

&-I〈y, x〉 : B & A

&-E1〈y, x〉1 : A

[y : B]y [x : A]x&-I

〈y, x〉 : B & A&-E0〈y, x〉0 : B

&-I〈〈y, x〉1, 〈y, x〉0〉 : A&B

Simplifying a program

[z : B & A]z&-E1

z1 : A

[z : B & A]z&-E0

z0 : B&-I

〈z1, z0〉 : A&B⊃-Iz

λz. 〈z1, z0〉 : (B & A)⊃ (A&B)

[y : B]y [x : A]x&-I

〈y, x〉 : B & A⊃-E

(λz. 〈z1, z0〉) 〈y, x〉 : A&B

⇓[y : B]y [x : A]x

&-I〈y, x〉 : B & A

&-E1〈y, x〉1 : A

[y : B]y [x : A]x&-I

〈y, x〉 : B & A&-E0〈y, x〉0 : B

&-I〈〈y, x〉1, 〈y, x〉0〉 : A&B

⇓[x : A]x [y : B]y

&-I〈x, y〉 : A&B

William Howard (1980) — Curry-Howard Isomorphism

Curry-Howard

Hindley-Milner

Girard-Reynolds

Part II

Second-order logic,Polymorphism,

and Java

Gottlob Frege (1879) — Quantifiers (∀)

John Reynolds (1974) — Polymorphism

A magic trick

r :: [a]→ [a]

Theorems for Free!

r

r

r

r

-

? -?

[a]

map f

[a]

[b]

map f

[b]

ra

rb

Theorems for Free!

r

r

r

r

-

? -?

[97, 98, 99]

map chr

[‘a′, ‘b′, ‘c′]

[99, 98, 97]

map chr

[‘c′, ‘b′, ‘a′]

reverseInt

reverseChar

Odersky and Wadler (1997) — Pizza

Igarashi, Pierce, and Wadler (1999)— Featherweight Java

Igarashi, Pierce, and Wadler (1999)— Featherweight Generic Java

Gosling, Joy, Steele, Bracha (2004) — Java 5

Naftalin and Wadler (2006)

Part III

Three recent ideas

Idea I: Object to Object

• Object vitiates parametricityclass Object {

Bool eq(Object that) {...}String show() {...}

}

• Top preserves parametrictyclass Top {

// no methods!}

Idea II: Blame calculus

Idea III: Propositions as Sessions

Part IV

Aliens

How to talk to aliens

Independence Day

A universal programming language?

Lambda is Omniversal

top related