# cody roux - pure type systems - boston haskell meetup

Post on 09-Aug-2015

286 views

Embed Size (px)

TRANSCRIPT

- 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 -XExistentialQuantication -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 unied 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 quantication 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 dierent systems! In the rst 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 quantication 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 quantication/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 dened as 1 A set of Sorts S 2 A set of Axioms A S S 3 A set of Rules R S S S Thats 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 denition! 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 dierent 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 Lets 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 ne 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

Recommended