faith, evolution, and programming languages...faith, evolution, and programming languages philip...
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