SlideShare a Scribd company logo
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
Introduction
This talk is not about Haskell!
Cody Roux (Draper Labs) PTSes February 17, 2015 2 / 38
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
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
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
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
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
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
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
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
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
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
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, including
Haskell, Agda, Coq.
4 Can be complex! There are several longstanding open questions
including
1 Typed Conversion ⇔ Untyped Conversion
2 Weak Normalization ⇔ Strong Normalization
Cody Roux (Draper Labs) PTSes February 17, 2015 13 / 38
Pure Type Systems
Can we answer our questions using PTS?
Cody Roux (Draper Labs) PTSes February 17, 2015 14 / 38
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
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
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
Pure Type Systems
(s1, s2, s3) ∈ R informally means:
Quantifying over an element of s2 parametrized over an element of s1
gives 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
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 : s2
prod (s1, s2, s3) ∈ R
Γ ⊢ Πx : A.B : s3
Cody Roux (Draper Labs) PTSes February 17, 2015 19 / 38
Pure Type Systems
Term formation
Γ ⊢ A : svar s ∈ S
Γ, x : A ⊢ x : A
Γ, x : A ⊢ t : B Γ ⊢ Πx : A.B : s
abs s ∈ S
Γ ⊢ λx : A.t : Πx : A.B
Γ ⊢ t : Πx : A.B Γ ⊢ u : Aapp
Γ ⊢ t u : B[x → u]
Cody Roux (Draper Labs) PTSes February 17, 2015 20 / 38
Pure Type Systems
Conversion
Γ ⊢ t : A Γ ⊢ A′ : sconv A ≃β A′
, s ∈ S
Γ ⊢ t : A′
Where ≃β is β-equality
(λx : A.t)u ≃β t[x → u]
We omit the boring rules...
Cody Roux (Draper Labs) PTSes February 17, 2015 21 / 38
Pure Type Systems
The rest of this talk
Understanding this definition!
Cody Roux (Draper Labs) PTSes February 17, 2015 22 / 38
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
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
The λ-cube
STLC
F
λΠ
λ2
λω
Fω
λΠω
CC
Cody Roux (Draper Labs) PTSes February 17, 2015 25 / 38
λ-cube
STLC = (∗, ∗)
F = (∗, ∗) ( , ∗)
λω = (∗, ∗) ( , )
λΠ = (∗, ∗) (∗, )
λ2 = (∗, ∗) (∗, ) ( , ∗)
Fω = (∗, ∗) ( , ∗) ( , )
λΠω = (∗, ∗) (∗, ) ( , )
CC = (∗, ∗) (∗, ) ( , ∗) ( , )
STLC
F
λΠ
λ2
λω
Fω
λΠω
CC
Cody Roux (Draper Labs) PTSes February 17, 2015 26 / 38
λ-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
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
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
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
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
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
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
Other Features
PTSes can capture things like predicative polymorphism:
Only instantiate ∀s with monomorphic types
∀X.X → X → N → N yes
∀X.X → X → (∀Y .Y → Y ) → (∀Y .Y → Y ) no
Sorts: ∗, ˆ∗,
Axioms: ∗ : , ˆ∗ :
Rules: STLC + {( , ∗, ˆ∗), ( , ˆ∗, ˆ∗)}
Cody Roux (Draper Labs) PTSes February 17, 2015 34 / 38
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
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
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 typing
rules.
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
The End
Cody Roux (Draper Labs) PTSes February 17, 2015 38 / 38

More Related Content

PDF
圏論のモナドとHaskellのモナド
PPTX
Intoduction to Homotopy Type Therory
PPTX
Fuzzy Set
PDF
[Review] BoxInst: High-Performance Instance Segmentation with Box Annotations...
PDF
圏とHaskellの型
PPTX
Complex analysis
PPTX
純粋関数型アルゴリズム入門
PDF
PRML Reading Chapter 11 - Sampling Method
圏論のモナドとHaskellのモナド
Intoduction to Homotopy Type Therory
Fuzzy Set
[Review] BoxInst: High-Performance Instance Segmentation with Box Annotations...
圏とHaskellの型
Complex analysis
純粋関数型アルゴリズム入門
PRML Reading Chapter 11 - Sampling Method

What's hot (20)

PDF
Clickhouse at Cloudflare. By Marek Vavrusa
PDF
ものまね鳥を愛でる 結合子論理と計算
PPTX
ホモトピー型理論入門
 
PPTX
Applications of analytic functions and vector calculus
DOCX
What is analytic functions
PDF
よくわかるCoqプログラミング
PDF
Introduction to Categorical Programming (Revised)
PDF
Bisection method
PDF
Prml 4.1.1
PDF
できる!並列・並行プログラミング
PDF
データ解析13 線形判別分析
PDF
貪欲法による
単調劣モジュラ関数の最大化
PPT
Linear Algebra
PDF
Contraction mapping
PDF
たのしい高階関数
PPTX
Fuzzy sets
PDF
Scala の関数型プログラミングを支える技術
PDF
[2021CAPE公開セミナー] 論理学上級 Ⅱ-2「カリー・ハワード対応と『証明のデータ型としての命題』観」
PPTX
PPSX
Methods of solving ODE
Clickhouse at Cloudflare. By Marek Vavrusa
ものまね鳥を愛でる 結合子論理と計算
ホモトピー型理論入門
 
Applications of analytic functions and vector calculus
What is analytic functions
よくわかるCoqプログラミング
Introduction to Categorical Programming (Revised)
Bisection method
Prml 4.1.1
できる!並列・並行プログラミング
データ解析13 線形判別分析
貪欲法による
単調劣モジュラ関数の最大化
Linear Algebra
Contraction mapping
たのしい高階関数
Fuzzy sets
Scala の関数型プログラミングを支える技術
[2021CAPE公開セミナー] 論理学上級 Ⅱ-2「カリー・ハワード対応と『証明のデータ型としての命題』観」
Methods of solving ODE
Ad

Similar to Cody Roux - Pure Type Systems - Boston Haskell Meetup (20)

PPT
Stacksqueueslists
PPT
Stacks queues lists
PPT
Stacks queues lists
PPT
Stacks queues lists
PPT
Stack squeues lists
PPT
Stacks queues lists
PPTX
Let’s get started with with discrete math.pptx
PPTX
LR(1) and SLR(1) parsing
PDF
Designing Architecture-aware Library using Boost.Proto
PDF
PDF
Randomization
PPT
5 csp
PPT
AlgorithmAnalysis2.ppt
PPTX
Presentation1
PDF
Using R in remote computer clusters
PDF
Introduction to FDA and linear models
ODP
Scala as a Declarative Language
PDF
Parsers Combinators in Scala, Ilya @lambdamix Kliuchnikov
PDF
20130928 automated theorem_proving_harrison
PPTX
R Language Introduction
Stacksqueueslists
Stacks queues lists
Stacks queues lists
Stacks queues lists
Stack squeues lists
Stacks queues lists
Let’s get started with with discrete math.pptx
LR(1) and SLR(1) parsing
Designing Architecture-aware Library using Boost.Proto
Randomization
5 csp
AlgorithmAnalysis2.ppt
Presentation1
Using R in remote computer clusters
Introduction to FDA and linear models
Scala as a Declarative Language
Parsers Combinators in Scala, Ilya @lambdamix Kliuchnikov
20130928 automated theorem_proving_harrison
R Language Introduction
Ad

Recently uploaded (20)

PPTX
MODULE 8 - DISASTER risk PREPAREDNESS.pptx
PPTX
CEE 2 REPORT G7.pptxbdbshjdgsgjgsjfiuhsd
PDF
Recruitment and Placement PPT.pdfbjfibjdfbjfobj
PDF
.pdf is not working space design for the following data for the following dat...
PPTX
Acceptance and paychological effects of mandatory extra coach I classes.pptx
PPTX
Introduction to Knowledge Engineering Part 1
PDF
Galatica Smart Energy Infrastructure Startup Pitch Deck
PPTX
Introduction to Basics of Ethical Hacking and Penetration Testing -Unit No. 1...
PPT
Miokarditis (Inflamasi pada Otot Jantung)
PDF
Foundation of Data Science unit number two notes
PPTX
Supervised vs unsupervised machine learning algorithms
PDF
TRAFFIC-MANAGEMENT-AND-ACCIDENT-INVESTIGATION-WITH-DRIVING-PDF-FILE.pdf
PDF
“Getting Started with Data Analytics Using R – Concepts, Tools & Case Studies”
PDF
Lecture1 pattern recognition............
PPTX
Data_Analytics_and_PowerBI_Presentation.pptx
PPTX
Introduction-to-Cloud-ComputingFinal.pptx
PPTX
mbdjdhjjodule 5-1 rhfhhfjtjjhafbrhfnfbbfnb
PPT
Reliability_Chapter_ presentation 1221.5784
PPTX
Major-Components-ofNKJNNKNKNKNKronment.pptx
PDF
Clinical guidelines as a resource for EBP(1).pdf
MODULE 8 - DISASTER risk PREPAREDNESS.pptx
CEE 2 REPORT G7.pptxbdbshjdgsgjgsjfiuhsd
Recruitment and Placement PPT.pdfbjfibjdfbjfobj
.pdf is not working space design for the following data for the following dat...
Acceptance and paychological effects of mandatory extra coach I classes.pptx
Introduction to Knowledge Engineering Part 1
Galatica Smart Energy Infrastructure Startup Pitch Deck
Introduction to Basics of Ethical Hacking and Penetration Testing -Unit No. 1...
Miokarditis (Inflamasi pada Otot Jantung)
Foundation of Data Science unit number two notes
Supervised vs unsupervised machine learning algorithms
TRAFFIC-MANAGEMENT-AND-ACCIDENT-INVESTIGATION-WITH-DRIVING-PDF-FILE.pdf
“Getting Started with Data Analytics Using R – Concepts, Tools & Case Studies”
Lecture1 pattern recognition............
Data_Analytics_and_PowerBI_Presentation.pptx
Introduction-to-Cloud-ComputingFinal.pptx
mbdjdhjjodule 5-1 rhfhhfjtjjhafbrhfnfbbfnb
Reliability_Chapter_ presentation 1221.5784
Major-Components-ofNKJNNKNKNKNKronment.pptx
Clinical guidelines as a resource for EBP(1).pdf

Cody Roux - Pure Type Systems - Boston Haskell Meetup

  • 1. 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
  • 2. Introduction This talk is not about Haskell! Cody Roux (Draper Labs) PTSes February 17, 2015 2 / 38
  • 3. 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
  • 4. 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
  • 5. 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
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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, including Haskell, Agda, Coq. 4 Can be complex! There are several longstanding open questions including 1 Typed Conversion ⇔ Untyped Conversion 2 Weak Normalization ⇔ Strong Normalization Cody Roux (Draper Labs) PTSes February 17, 2015 13 / 38
  • 14. Pure Type Systems Can we answer our questions using PTS? Cody Roux (Draper Labs) PTSes February 17, 2015 14 / 38
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. Pure Type Systems (s1, s2, s3) ∈ R informally means: Quantifying over an element of s2 parametrized over an element of s1 gives 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
  • 19. 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 : s2 prod (s1, s2, s3) ∈ R Γ ⊢ Πx : A.B : s3 Cody Roux (Draper Labs) PTSes February 17, 2015 19 / 38
  • 20. Pure Type Systems Term formation Γ ⊢ A : svar s ∈ S Γ, x : A ⊢ x : A Γ, x : A ⊢ t : B Γ ⊢ Πx : A.B : s abs s ∈ S Γ ⊢ λx : A.t : Πx : A.B Γ ⊢ t : Πx : A.B Γ ⊢ u : Aapp Γ ⊢ t u : B[x → u] Cody Roux (Draper Labs) PTSes February 17, 2015 20 / 38
  • 21. Pure Type Systems Conversion Γ ⊢ t : A Γ ⊢ A′ : sconv A ≃β A′ , s ∈ S Γ ⊢ t : A′ Where ≃β is β-equality (λx : A.t)u ≃β t[x → u] We omit the boring rules... Cody Roux (Draper Labs) PTSes February 17, 2015 21 / 38
  • 22. Pure Type Systems The rest of this talk Understanding this definition! Cody Roux (Draper Labs) PTSes February 17, 2015 22 / 38
  • 23. 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
  • 24. 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
  • 25. The λ-cube STLC F λΠ λ2 λω Fω λΠω CC Cody Roux (Draper Labs) PTSes February 17, 2015 25 / 38
  • 26. λ-cube STLC = (∗, ∗) F = (∗, ∗) ( , ∗) λω = (∗, ∗) ( , ) λΠ = (∗, ∗) (∗, ) λ2 = (∗, ∗) (∗, ) ( , ∗) Fω = (∗, ∗) ( , ∗) ( , ) λΠω = (∗, ∗) (∗, ) ( , ) CC = (∗, ∗) (∗, ) ( , ∗) ( , ) STLC F λΠ λ2 λω Fω λΠω CC Cody Roux (Draper Labs) PTSes February 17, 2015 26 / 38
  • 27. λ-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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. Other Features PTSes can capture things like predicative polymorphism: Only instantiate ∀s with monomorphic types ∀X.X → X → N → N yes ∀X.X → X → (∀Y .Y → Y ) → (∀Y .Y → Y ) no Sorts: ∗, ˆ∗, Axioms: ∗ : , ˆ∗ : Rules: STLC + {( , ∗, ˆ∗), ( , ˆ∗, ˆ∗)} Cody Roux (Draper Labs) PTSes February 17, 2015 34 / 38
  • 35. 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
  • 36. 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
  • 37. 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 typing rules. 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
  • 38. The End Cody Roux (Draper Labs) PTSes February 17, 2015 38 / 38