Faith, Evolution, and Programming Languages...Faith, Evolution, and Programming Languages Philip...
Transcript of Faith, Evolution, and Programming Languages...Faith, Evolution, and Programming Languages Philip...
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