Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler...

35
Well-typed programs can’t be blamed (ESOP 2009) Robert Bruce Findler Northwestern University Philip Wadler University of Edinburgh Aussois, 14–18 October 2013

Transcript of Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler...

Page 1: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Well-typed programs can’t be blamed(ESOP 2009)

Robert Bruce FindlerNorthwestern University

Philip WadlerUniversity of Edinburgh

Aussois, 14–18 October 2013

Page 2: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010
Page 3: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010
Page 4: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Part I

Evolving a program

Page 5: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

An untyped program

dletx = 2

f = λy. y + 1

h = λg. g (g x)

in

h fe−→d4e

Page 6: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

A typed program

let

x = 2

f = λy : Int. y + 1

h = λg : Int→ Int. g (g x)

in

h f

−→4 : Int

Page 7: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

A partly typed program—narrowing

let

x = 2

f = dλy. y + 1e : ?p⇒ Int→ Int

h = λg : Int→ Int. g (g x)

in

h f

−→4 : Int

Page 8: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

A partly typed program—narrowing

let

x = 2

f = dλy.falsee : ?p⇒ Int→ Int

h = λg : Int→ Int. g (g x)

in

h f

−→blame p

Positive (covariant): blame the term contained in the castNarrowing can give rise to positive blame, but never negative blame

Page 9: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Another partly typed program—widening

let

x = d2ef = (λy : Int. y + 1) : Int→ Int

p⇒ ?

h = dλg. g (g x)ein

dh fe−→d4e

Page 10: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Another partly typed program—widening

let

x = dtrueef = (λy : Int. y + 1) : Int→ Int

p⇒ ?

h = dλg. g (g x)ein

dh fe−→blame p̄

Negative (contravariant): blame the context containg the castWidening can give rise to negative blame, but never positive blame

Page 11: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Part II

Blame calculus

Page 12: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Untyped = Uni-typed

dxe = x

dce = c : Ap⇒ ? if ty(c) = A

dop( ~M)e = op(d ~Me : ~?~p⇒ ~A) : B

p⇒ ? if ty(op) = ~A→ B

dλx.Ne = (λx : ?. dNe) : ?→ ?⇒ ?

dLMe = (dLe : ?p⇒ ?→ ?) dMe

(slogan due to Bob Harper)

Page 13: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Blame calculus: Compatibility

A ≺ A A ≺ ? ? ≺ B

A′ ≺ A B ≺ B′

A→ B ≺ A′ → B′

Page 14: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Types

ty(c) = ι

Γ ` c : ι

Γ ` ~t : ~A ty(op) = ~A→BΓ ` op(~t ) : B

x : A ∈ Γ

Γ ` x : A

Γ, x : A ` t : B

Γ ` λx:A. t : A→BΓ ` t : A→B Γ ` s : A

Γ ` t s : B

Γ ` s : A A ≺ B

Γ ` (s : Ap⇒ B) : B

Γ ` s : G

Γ ` (s : G⇒ ?) : ?

Page 15: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Reductions

(λx:A. t) v −→ t[x := v]

op(~v ) −→ δ(op, ~v )

v : A→B p⇒ A′→B′ −→ λx′:A′. (v (x′ : A′p⇒ A) : B

p⇒ B′)

v : ιp⇒ ι −→ v

v : Ap⇒ ? −→ (v : A

p⇒ G) : G⇒ ? if ? 6= A ≺ G

v : (G⇒ ?) : ?p⇒ A −→ v : G

p⇒ A if G ≺ A

v : (G⇒ ?) : Gp⇒ A −→ blame p if G 6≺ A

s−→ t

E[s]−→ E[t]

s−→ blame p

E[s]−→ blame p

Page 16: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Part III

Subtyping

<: <:+ <:− <:n

Page 17: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Subtype

? <: ?

ι <: ι

A <: G

A <: ?

A′ <: A B <: B′

A→ B <: A′ → B′

Example:

Int <: Int

Int <: ?

Int <: Int

Int <: ?

?→ Int <: Int→ ?

Page 18: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Positive subtype—widening

A <:+ ?

ι <: ι

A′ <:− A B <:+ B′

A→ B <:+ A′ → B′

Example:

? <:− Int Int <:+ ?

Int→ Int <:+ ?→ ?

Page 19: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Negative subtype—narrowing

? <:− A

ι <: ι

A <:− G

A <:− ?

A′ <:+ A B <:− B′

A→ B <:− A′ → B′

Example:

Int <:+ ? ? <:− Int

?→ ? <:− Int→ Int

Page 20: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Naive subtype

A <:n ?

ι <:n ι

A <:n A′ B <:n B

A→ B <:n A′ → B′

Example:

Int <:n ? Int <:n ?

Int→ Int <: ?→ ?

Page 21: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Part IV

The Blame Theorem

Page 22: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Safety

x sf p

t sf pλx. t sf p

s sf p t sf ps t sf p

s sf p A <:+ B

s : Ap⇒ B sf p

s sf p A <:− B

s : Ap⇒ B sf p

s sf p p 6= q p̄ 6= q

s : Aq⇒ B sf p

Page 23: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

The Blame Theorem

PreservationIf s sf p and s−→ t then t sf p.

ProgressIf s sf p then s 6−→ blame p.

Page 24: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010
Page 25: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

The First Tangram Theorem

A <: B if and only if A <:+ B and A <:− B

The First Blame CorollaryLet t be a term where s : A

p⇒ B is the only subterm with label p. IfA <: B then t 6−→ blame p and t 6−→ blame p̄.

Page 26: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

The Second Tangram Theorem

A <:n B if and only if A <:+ B and B <:− A

The Second Blame CorollaryLet t be a term where s : A

p⇒ B is the only subterm with label p. IfA <:n B then t 6−→ blame p.

Let t be a term where s : Ap⇒ B is the only subterm with label p. If

B <:n A then t 6−→ blame p.

Page 27: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

A new slogan for type safety

Milner (1978):Well-typed programs can’t go wrong.

Felleisen and Wright (1994); Harper (2002):Well-typed programs don’t get stuck.

Wadler and Findler (2008):Well-typed programs can’t be blamed.

Page 28: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

References

Well-typed programs can’t be blamedRobert Bruce Findler and Philip Wadler

ESOP 2009

ThreesomesJeremy Siek and Philip Wadler

POPL 2010

Blame for allAmal Ahmed, Robert Bruce Findler, Jeremy Siek, Philip Wadler

POPL 2011

Page 29: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Part V

TypeScript: The Next Generation

Page 30: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010
Page 31: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

F?, JavaScript, and TypeScript

A fully abstract compiler from F? to JavaScriptCedric Fournet, Nikhil Swamy, Juan Chen, Pierre-Evariste Dagand,

Pierre-Yves Strub, and Benjamin LivshitsPOPL 2013

Gradual Typing Embedded Securely in JavaScriptK. Bhargavan, G. Bierman, J. Chen, C. Fournet, A. Rastogi,

P. Strub, N. SwamyPOPL 2014

Page 32: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

TypeScript: The Next Generation

Joint proposal to MSR with Gavin Bierman.

TypeScript interface declares types for third-party module.DefinitelyTyped repository declares types for 150 libraries.But the declaration is taken of faith.

TypeScript TNG uses blame calculus to generate wrappers frominterface declarations.

But there are problems!

• Wrappers on functions violate object identity.

• How to interpose type checks for update?Proxies may do the job.

Hypothesis: TypeScript TNG will aid debugging and increasereliablility of TypeScript and JavaScript code.

Page 33: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

A wide-spectrum type system

Extend blame calculus to support a wide range of type systems:

• dynamic types (as in JavaScript or Racket)

• polymorphic types (as in F# or Haskell)

• dependent types (as in F? or Coq)

Hypothesis: a wide-spectrum type system will increase the utility ofdependent types, by allowing dynamic checks to be used as afallback when static validation is problematic.

Page 34: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Part VI

Other

Page 35: Well-typed programs can’t be blamed · Well-typed programs can’t be blamed Robert Bruce Findler and Philip Wadler ESOP 2009 Threesomes Jeremy Siek and Philip Wadler POPL 2010

Other

Propositions as SessionsPhilip Wadler

ICFP 2012

A Practical Theory of Language-Integrate QueryJames Cheney, Sam Lindley, and Philip Wadler

ICFP 2013