cody roux - pure type systems - boston haskell meetup

38
Pure Type Systems: Dependents When You Need Them Cody Roux Draper Laboratories February 17, 2015 Cody Roux (Draper Labs) PTSes February 17, 2015 1 / 38

Upload: greg-hale

Post on 09-Aug-2015

295 views

Category:

Data & Analytics


4 download

TRANSCRIPT

Page 1: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems:Dependents When You Need Them

Cody Roux

Draper Laboratories

February 17, 2015

Cody Roux (Draper Labs) PTSes February 17, 2015 1 / 38

Page 2: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Introduction

This talk is not about Haskell!

Cody Roux (Draper Labs) PTSes February 17, 2015 2 / 38

Page 3: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Introduction

Or is it?

Wait, which Haskell?

good ol’ Haskell 98

-XTypeFamilies

-XExistentialQuantification

-XRank2Types

-XRankNTypes

-XDataKinds

-XPolyKinds

-XGADTs

-XConstraintKinds

-XImpredicativeTypes

etc.

Cody Roux (Draper Labs) PTSes February 17, 2015 3 / 38

Page 4: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Introduction

This talk is about abstraction!

We want to understand -XFooBar in a unified framework

Cody Roux (Draper Labs) PTSes February 17, 2015 4 / 38

Page 5: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Abstraction

The simplest form of abstraction

We have an expression 2 + 2

We can abstract it as x + x where x = 2

Have we gained anything?

Cody Roux (Draper Labs) PTSes February 17, 2015 5 / 38

Page 6: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Abstraction

We can form the λ-abstraction

λx . x + x

This is already a very powerful idea!

Cody Roux (Draper Labs) PTSes February 17, 2015 6 / 38

Page 7: Cody Roux - Pure Type Systems - Boston Haskell Meetup

STLC

The Simply Typed λ-Calculus

Some base types A,B ,C , ...

Higher-order functions λx .λf .f x : A → (A → B) → B

A small miracle: every function is terminating.

Cody Roux (Draper Labs) PTSes February 17, 2015 7 / 38

Page 8: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Polymorphism

We want to have polymorphic functions

(λx .x) 3 → 3

(λx .x) true → true

How do we add this feature?

Cody Roux (Draper Labs) PTSes February 17, 2015 8 / 38

Page 9: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Polymorphic formulas

There are 2 possible answers!

First

Add type-level variables, X ,Y ,Z , ...

Add polymorphic quantification

∀X .X → X

Cody Roux (Draper Labs) PTSes February 17, 2015 9 / 38

Page 10: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Polymorphic formulas

What does ∀X .T quantify over?

1 Only the simple types

2 Any type from the extended language

These lead to dramatically different systems!

In the first case, the extension is conservative (no “new” functions)

In the second case, it is not (system F)

Cody Roux (Draper Labs) PTSes February 17, 2015 10 / 38

Page 11: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Dependent types

We can add term-level information to types:

[1, 2, 3] : ListN

[1, 2, 3] : VecN 3

We can add quantification as well:

reverse : ∀n,VecN n → VecN n

When is this kind of dependency conservative?

Cody Roux (Draper Labs) PTSes February 17, 2015 11 / 38

Page 12: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems

Pure type systems:

are a generic framework for logics/programming lang.

only allow universal quantification/dependent function space

Cody Roux (Draper Labs) PTSes February 17, 2015 12 / 38

Page 13: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems

Pure type systems are:

1 Expressive: ∃ a PTS that can express set theory

2 Well studied: invented in the 80s (Barendregt) and studied ever since!

3 Flexible: found at the core of several functional languages, includingHaskell, Agda, Coq.

4 Can be complex! There are several longstanding open questionsincluding

1 Typed Conversion ⇔ Untyped Conversion

2 Weak Normalization ⇔ Strong Normalization

Cody Roux (Draper Labs) PTSes February 17, 2015 13 / 38

Page 14: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems

Can we answer our questions using PTS?

Cody Roux (Draper Labs) PTSes February 17, 2015 14 / 38

Page 15: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems

A Pure Type System is defined as

1 A set of Sorts S

2 A set of Axioms A ⊆ S × S

3 A set of Rules R ⊆ S × S × S

That’s it!

Cody Roux (Draper Labs) PTSes February 17, 2015 15 / 38

Page 16: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems

Informally

Elements ∗,�, ι, ... ∈ S represent a category of objects.

For example

∗ may represent the category of propositions

� may represent the category of types

ι may represent the category of natural numbers

Cody Roux (Draper Labs) PTSes February 17, 2015 16 / 38

Page 17: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems

(s1, s2) ∈ A informally means:

s1 is a member of the category s2

Cody Roux (Draper Labs) PTSes February 17, 2015 17 / 38

Page 18: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems

(s1, s2, s3) ∈ R informally means:

Quantifying over an element of s2 parametrized over an element of s1gives a result in s3

if A : s1 and B(x) : s2 when x : A

then ∀x : A.B(x) : s3

We will write Πx : A.B instead of ∀x : A.B(x) (tradition)

Cody Roux (Draper Labs) PTSes February 17, 2015 18 / 38

Page 19: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems

Given a PTS P we have the following type system:

Type/Sort formation

Γ ⊢axiom (s1, s2) ∈ A

Γ ⊢ s1 : s2

Γ ⊢ A : s1 Γ, x : A ⊢ B : s2prod (s1, s2, s3) ∈ R

Γ ⊢ Πx : A.B : s3

Cody Roux (Draper Labs) PTSes February 17, 2015 19 / 38

Page 20: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems

Term formation

Γ ⊢ A : svar s ∈ S

Γ, x : A ⊢ x : A

Γ, x : A ⊢ t : B Γ ⊢ Πx : A.B : sabs s ∈ S

Γ ⊢ λx : A.t : Πx : A.B

Γ ⊢ t : Πx : A.B Γ ⊢ u : AappΓ ⊢ t u : B [x 7→ u]

Cody Roux (Draper Labs) PTSes February 17, 2015 20 / 38

Page 21: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems

Conversion

Γ ⊢ t : A Γ ⊢ A′ : sconv A ≃β A

′, s ∈ S

Γ ⊢ t : A′

Where ≃β is β-equality

(λx : A.t)u ≃β t[x 7→ u]

We omit the boring rules...

Cody Roux (Draper Labs) PTSes February 17, 2015 21 / 38

Page 22: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Pure Type Systems

The rest of this talk

Understanding this definition!

Cody Roux (Draper Labs) PTSes February 17, 2015 22 / 38

Page 23: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Simply Typed Lambda Calculus

We can model the STLC using

S = {∗,�}

A = {(∗,�)}

R = {(∗, ∗, ∗)}

We have e.g.A : ∗ ⊢ λx : A.x : A → A

taking A → A = Πx : A. A

Cody Roux (Draper Labs) PTSes February 17, 2015 23 / 38

Page 24: Cody Roux - Pure Type Systems - Boston Haskell Meetup

The λ-cube

Some more examples, contained in a family called the λ-cube:

The sorts are ∗,�

∗ : �

The rules are (k1, k2, k2) with ki = ∗ or �

Each dimension of the cube highlights a different feature

Cody Roux (Draper Labs) PTSes February 17, 2015 24 / 38

Page 25: Cody Roux - Pure Type Systems - Boston Haskell Meetup

The λ-cube

STLC

F

λΠ

λ2

λω

λΠω

CC

Cody Roux (Draper Labs) PTSes February 17, 2015 25 / 38

Page 26: Cody Roux - Pure Type Systems - Boston Haskell Meetup

λ-cube

STLC = (∗, ∗)

F = (∗, ∗) (�, ∗)

λω = (∗, ∗) (�,�)

λΠ = (∗, ∗) (∗,�)

λ2 = (∗, ∗) (∗,�) (�, ∗)

Fω = (∗, ∗) (�, ∗) (�,�)

λΠω = (∗, ∗) (∗,�) (�,�)

CC = (∗, ∗) (∗,�) (�, ∗) (�,�)

STLC

F

λΠ

λ2

λω

λΠω

CC

Cody Roux (Draper Labs) PTSes February 17, 2015 26 / 38

Page 27: Cody Roux - Pure Type Systems - Boston Haskell Meetup

λ-cube features

Calculus Rule Feature Example

STLC (∗, ∗) Ordinary (higher-order) functions id : N → N

F (�, ∗) Impredicative polymorphism id : ∀X .X → X

λω (�,�) Type constructors rev : List A → List A

λΠ (∗,�) Dependent Types head : VecN (n + 1) → N

Cody Roux (Draper Labs) PTSes February 17, 2015 27 / 38

Page 28: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Example

Let’s work out an example in CC :

Induction on lists

∀A P l , P (nil A) → (∀a r , P r → P (cons A y r)) → P l

Π(A : ∗)(P : List A → ∗)(l : List A). P (nil A) →(

Π(a : A)(r : List A). P r → P (cons A y r))

→ P l

X → Y still means Π : A. B

Whiteboard time!

Cody Roux (Draper Labs) PTSes February 17, 2015 28 / 38

Page 29: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Example

No whiteboard?

List : ∗ → ∗

nil : ΠA : ∗. List A

cons : ΠA : ∗. A → List A → List A

Cody Roux (Draper Labs) PTSes February 17, 2015 29 / 38

Page 30: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Example

⊢ ∗ : �

A : ∗ ⊢ List A : ∗ . . . ⊢ ∗ : �A : ∗ ⊢ List A → ∗ : �

. . . ⊢ P (nil A) : ∗...

. . . ⊢ . . . : ∗

...A : ∗ ⊢ Π(P : List A → ∗)(l : List A) . . . : ∗

⊢ Π(A : ∗)(P : List A → ∗)(l : List A). P (nil A) →(

Π(a : A)(r : List A). P r → P (cons A y r))

→ P l : ∗

Cody Roux (Draper Labs) PTSes February 17, 2015 30 / 38

Page 31: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Other Calculi

Here are a few other examples:

Name Sorts Axioms Rules

STLC(1 base type) ι, ∗ (ι, ∗) (∗, ∗, ∗)

STLC ∗,� (∗,�) (∗, ∗, ∗)

∗ : ∗ ∗ (∗, ∗) (∗, ∗, ∗)

System F ∗,� (∗,�) (∗, ∗, ∗), (�, ∗, ∗)

CC ∗,� (∗,�) (∗, ∗, ∗), (�, ∗, ∗),(∗,�,�), (�,�,�)

U− ∗,�,△ (∗,�), (∗, ∗, ∗), (�, ∗, ∗),(�,△) (�,�,�), (△,�,�)

CCω ∗,�i , (∗,�i ), (∗, ∗, ∗), (�i , ∗, ∗),(core of Coq) i ∈ N (�i ,�j ), i < j (�i ,�j ,�k), k ≥ max(i , j)

Cody Roux (Draper Labs) PTSes February 17, 2015 31 / 38

Page 32: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Normalization

A PTS is normalizing ⇔ Γ ⊢ t : T ⇒ t has a β-normal form.

Normalization is a central property:

1 It ensures decidability of type-checking

2 It implies consistency of the system as a logic

Cody Roux (Draper Labs) PTSes February 17, 2015 32 / 38

Page 33: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Normalization

Normalization is hard to predict:

Name Axioms Rules Norm.

STLC(1 base type) (ι, ∗) (∗, ∗, ∗) Yes

STLC (∗,�) (∗, ∗, ∗) Yes

∗ : ∗ (∗, ∗) (∗, ∗, ∗) No

System F (∗,�) (∗, ∗, ∗), (�, ∗, ∗) Yes

CC (∗,�) (∗, ∗, ∗), (�, ∗, ∗), Yes(∗,�,�), (�,�,�)

U− (∗,�), (∗, ∗, ∗), (�, ∗, ∗), No(�,△) (�,�,�), (△,�,�)

CCω (∗,�i ), (∗, ∗, ∗), (�i , ∗, ∗), Yes(core of Coq) (�i ,�j), i < j (�i ,�j ,�k), k ≥ max(i , j)

Cody Roux (Draper Labs) PTSes February 17, 2015 33 / 38

Page 34: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Other Features

PTSes can capture things like predicative polymorphism:

Only instantiate ∀s with monomorphic types

∀X .X → X 7→ N → N yes

∀X .X → X 7→ (∀Y .Y → Y ) → (∀Y .Y → Y ) no

Sorts: ∗, ∗̂,�

Axioms: ∗ : �, ∗̂ : �

Rules: STLC + {(�, ∗, ∗̂), (�, ∗̂, ∗̂)}

Cody Roux (Draper Labs) PTSes February 17, 2015 34 / 38

Page 35: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Other Features

We can seperate type-level data and program-level data

Sorts: ∗t , ∗p ,�t ,�p

Axioms: ∗t : �t , ∗p : �p

Rules:{(∗t , ∗t , ∗t), (∗p , ∗p , ∗p), (∗t ,�p ,�p)}

Nt lives in ∗t , Np lives in ∗p

Similar to GADTs!

Cody Roux (Draper Labs) PTSes February 17, 2015 35 / 38

Page 36: Cody Roux - Pure Type Systems - Boston Haskell Meetup

More about U−

Remember U−:

R = {(∗, ∗, ∗), (�, ∗, ∗), (�,�,�), (△,�,�)}

This corresponds to Kind Polymorphism!

But...

It is inconsistent!U− ⊢ t : ∀X . X

This is (maybe) bad news for constraint kinds!

Cody Roux (Draper Labs) PTSes February 17, 2015 36 / 38

Page 37: Cody Roux - Pure Type Systems - Boston Haskell Meetup

Conclusion

Pure Type Systems are functional languages with simple syntax

They can explain many aspects of the Haskell Type System.

Pure Type Systems give fine grained ways of extending the typingrules.

The meta-theory can be studied in a single generic framework.

There are still hard theory questions about PTS.

Cody Roux (Draper Labs) PTSes February 17, 2015 37 / 38

Page 38: Cody Roux - Pure Type Systems - Boston Haskell Meetup

The End

Cody Roux (Draper Labs) PTSes February 17, 2015 38 / 38