{"id":13516516,"url":"https://github.com/jozefg/learn-tt","last_synced_at":"2026-01-26T18:53:43.643Z","repository":{"id":35854644,"uuid":"40139365","full_name":"jozefg/learn-tt","owner":"jozefg","description":"A collection of resources for learning type theory and type theory adjacent fields.","archived":false,"fork":false,"pushed_at":"2024-08-30T14:44:42.000Z","size":39,"stargazers_count":2201,"open_issues_count":6,"forks_count":119,"subscribers_count":90,"default_branch":"master","last_synced_at":"2025-01-28T15:49:31.267Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jozefg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-08-03T17:47:52.000Z","updated_at":"2025-01-25T16:32:38.000Z","dependencies_parsed_at":"2024-09-21T00:01:10.437Z","dependency_job_id":null,"html_url":"https://github.com/jozefg/learn-tt","commit_stats":{"total_commits":24,"total_committers":6,"mean_commits":4.0,"dds":0.5,"last_synced_commit":"4a23fc189c8d7811da96ce0b4c020831fcedb825"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jozefg%2Flearn-tt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jozefg%2Flearn-tt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jozefg%2Flearn-tt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jozefg%2Flearn-tt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jozefg","download_url":"https://codeload.github.com/jozefg/learn-tt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245079486,"owners_count":20557481,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T05:01:22.979Z","updated_at":"2026-01-26T18:53:43.632Z","avatar_url":"https://github.com/jozefg.png","language":null,"readme":"# learn-tt\n\n\nLots of people seem curious about type theory but it's not at all\nclear how to go from no math background to understanding \"Homotopical\nPatch Theory\" or whatever the latest cool paper is. In this repository\nI've gathered links to some of the resources I've personally found\nhelpful.\n\n## A Disclaimer\n\nAt this point `learn-tt` is a few years old and I can write with slightly more confidence than when\nI first created this document. I still stand by the fact that the links in this list have helped me\nlearn ideas that would have been difficult to find elsewhere. At the same time, I worry that this\nlist carries more of a ring of authority than I wish it did, particularly now that it is relatively\npopular. I learn more about type theory every day (admittedly, some days more slowly than I wish)\nand my views on what constitutes a good explanation, a good approach, or even a good type theory\nhave changed in small and large ways since I first compiled these resources.\n\nI toyed with the idea of deleting this repository because I have worried whether or not presenting\nmy own learning path does more harm than good. I have decided to leave it around but to add a\ndisclaimer instead.\n\n\u003e What follows below should not be construed as some _blessed path_ for learning type theory. You\n\u003e may find it better to skim this list or simply snort and ignore it entirely. My process for\n\u003e learning continues to be distinctly wandering and non-linear. Someone with different goals than me\n\u003e would find some of these links useless and I would not be nearly so bold as to claim that these\n\u003e resources are canonical, necessary, or even helpful for everyone. I can only hope that you enjoy\n\u003e reading them as much as I have.\n\u003e\n\u003e Daniel\n\n### An addendum to this disclaimer\n\nA few years after this disclaimer was written and roughly 10 years after making this repository, I\nbegan writing my own introductory textbook on type theory together with [Carlo\nAngiuli](https://carloangiuli.com).[^1] At the risk of singing our own praises, I think the current\ndraft is not terrible and it can be found freely available on [my\nwebsite](https://www.danielgratzer.com/papers/type-theory-book.pdf). Feedback on this draft is more\nthan welcome. Note that this book does not supplant most the resources listed below. However, it\nhopefully it supplements a few of them.\n\n\n[^1]: In a small twist of fate, Carlo is one of the authors of the \"homotopical patch theory\" paper\n  referenced in the opening paragraph of this document. I didn't actually know Carlo well when\n  making this document in 2015 and am honestly unsure what prompted me to choose that particular\n  example.\n\n## The Resources\n\n### Textbooks\n\n - Practical Foundations of Programming Languages (PFPL)\n\n    I reference this more than any other book. It's a very wide\n    ranging survey of programming languages that assumes very little\n    background knowledge. A lot people prefer the next book I mention\n    but I think PFPL does a better job explaining the foundations it\n    works from and then covers more topics I find interesting.\n\n    * [Online copy (2nd Edition Preview)](https://web.archive.org/web/20230619030940/https://www.cs.cmu.edu/~rwh/pfpl/2nded.pdf)\n    * [Dead-tree copy (2nd Edition)](https://www.amazon.com/Practical-Foundations-Programming-Languages-Robert/dp/1107150302)\n\n\n - Types and Programming Languages (TAPL)\n\n    Another very widely used introductory book (the one I learned\n    with). It's good to read in conjunction with PFPL as they\n    emphasize things differently. Notably, this includes descriptions\n    of type inference which PFPL lacks and TAPL lacks most of PFPL's\n    descriptions of concurrency/interesting imperative languages. Like\n    PFPL this is very accessible and well written.\n\n   * [Online supplements](http://www.cis.upenn.edu/~bcpierce/tapl/)\n   * [Dead-tree copy](https://mitpress.mit.edu/9780262162098/types-and-programming-languages/)\n\n - Advanced Topics in Types and Programming Languages (ATTAPL)\n\n   Don't feel the urge to read this all at once. It's a bunch of fully\n   independent but excellent chapters on a bunch of different\n   topics. Read what looks interesting, save what doesn't. It's good\n   to have in case you ever need to learn more about one of the\n   subjects in a pinch.\n\n   * [Online supplements](http://www.cis.upenn.edu/~bcpierce/attapl/)\n   * [Dead-tree copy](http://www.amazon.com/exec/obidos/ASIN/0262162288/benjamcpierce)\n\n### Proof Assistants\n\nOne of the fun parts of taking in an interest in type theory is that\nyou get all sorts of fun new programming languages to play with. Some\nmajor proof assistants are\n\n - Coq\n\n    Coq is one of the more widely used proof assistants and has the\n    best introductory material by far in my opinion.\n\n    * [Official site](https://coq.inria.fr/)\n    * [Software Foundations](http://www.cis.upenn.edu/~bcpierce/sf/current/index.html)\n    * [Certified Programming with Dependent Types](http://adam.chlipala.net/cpdt/)\n    * [The paper on the calculus of constructions](https://hal.inria.fr/inria-00076024/document)\n    * [A paper on the calculus of inductive constructions](https://hal.inria.fr/hal-01094195/document) (What Coq\n      is based on)\n - Lean\n\n   Lean is one of the newer proof assistants on the scene. To be perfectly honest I haven't done a\n   lot of proving in Lean yet but it seems neat. (If you have any resources you'd like to add to\n   this list, please let me know)\n\n   - [Official site](https://leanprover.github.io)\n   - [Lean Manual](https://lean-lang.org/lean4/doc/)\n   - [Functional Programming in Lean](https://lean-lang.org/functional_programming_in_lean/title.html)\n   - [Logic and Proof Textbook](https://leanprover.github.io/logic_and_proof/)\n\n - Agda\n\n    Agda is in many respects similar to Coq, but is a smaller language\n    overall. It's relatively easy to learn Agda after Coq so I\n    recommend doing that. Agda has some really interesting advanced\n    constructs like induction-recursion.\n\n    * [Official site](http://wiki.portal.chalmers.se/agda/pmwiki.php)\n    * [Tutorial](http://www.cse.chalmers.se/~ulfn/papers/afp08/tutorial.pdf)\n    * [Records tutorial](http://wiki.portal.chalmers.se/agda/pmwiki.php?n=ReferenceManual.RecordsTutorial)\n    * [Conor McBride's](https://github.com/pigworker/MetaprogAgda) [fun Agda code](https://github.com/pigworker/CS410-14)\n    * [Martín Hötzel Escardó's notes on Univalent Mathematics in Agda](https://www.cs.bham.ac.uk/~mhe/HoTT-UF-in-Agda-Lecture-Notes/HoTT-UF-Agda.html)\n\n - Idris\n\n    It might not be fair to put Idris in a list of \"proof assistants\"\n    since it really wants to be a proper programming language. It's\n    one of the first serious attempts at writing a programming\n    language with dependent types *for actual programming* though.\n\n    * [Official site](http://idris-lang.org/)\n    * [An actual introductory book](https://www.manning.com/books/type-driven-development-with-idris)\n    * [Quick tutorial](http://docs.idris-lang.org/en/latest/tutorial/index.html#tutorial-index)\n    * [A list of talks on Idris](https://www.youtube.com/watch?v=O1t4xJzrOng)\n    * [David Christiansen's cool talk](https://www.youtube.com/watch?v=dP2imvL92sY)\n\n - Twelf\n\n    Twelf is by far the simplest system in this list, it's the\n    absolute minimum a language can have and still be dependently\n    typed. All of this makes it easy to pick up, but there are very\n    few users and not a lot of introductory material which makes it a\n    bit harder to get started with. It does scale up to serious use\n    though.\n\n    * [Official site](http://twelf.org/)\n    * [Wiki Tutorials](http://twelf.org/wiki/Tutorials)\n    * [My tutorial](http://jozefg.bitbucket.io/posts/2015-02-28-twelf.html)\n    * [The paper on LF, the underlying system of Twelf](http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.21.5854)\n\n### Type Theory\n\n - The Works of Per Martin-Löf\n\n   Per Martin-Löf has contributed a *ton* to the current state of\n   dependent type theory. So much so that it's impossible to escape\n   his influence. His papers on Martin-Löf Type Theory (he called it\n   Intuitionistic Type Theory) are seminal.\n\n    If you're confused by the papers above read the book in the next\n    entry and try again. The book doesn't give you as good a feel for\n    the various flavors of MLTT (which spun off into different areas\n    of research) but is easier to follow.\n\n   * [1972](https://github.com/michaelt/martin-lof/blob/master/pdfs/An-Intuitionistic-Theory-of-Types-1972.pdf?raw=true)\n   * [1979](https://github.com/michaelt/martin-lof/blob/master/pdfs/Constructive-mathematics-and-computer-programming-1982.pdf?raw=true)\n   * [1984](https://github.com/michaelt/martin-lof/blob/master/pdfs/Bibliopolis-Book-retypeset-1984.pdf?raw=true)\n   * [The Complete Works of Per Martin-Löf](https://github.com/michaelt/martin-lof)\n\n - Programming In Martin-Löf's Type Theory\n\n   It's good to read the original papers and here things from the\n   horses mouth, but Martin-Löf is much smarter than us and it's nice\n   to read other people explanations of his material. A group of\n   people at Chalmers have elaborated it into a book.\n\n   * [Online link](http://www.cse.chalmers.se/research/group/logic/book/book.pdf)\n\n - The Works of John Reynolds\n\n   John Reynolds' works are similarly impressive and always a pleasure\n   to read.\n\n   * [Types, Abstraction and Parametric Polymorphism](http://www.cse.chalmers.se/edu/year/2010/course/DAT140_Types/Reynolds_typesabpara.pdf) (Parametricity for\n     System F)\n   * [A Logic For Shared Mutable State](http://www.cs.cmu.edu/~jcr/seplogic.pdf)\n   * [Course notes on separation logic](http://www.cs.cmu.edu/afs/cs.cmu.edu/project/fox-19/member/jcr/www15818As2011/cs818A3-11.html)\n   * [Course notes on denotational semantics](http://www.cs.cmu.edu/~jcr/cs819-00.html)\n\n - Homotopy Type Theory\n\n   A new exciting branch of type theory. This exploits the connection\n   between homotopy theory and type theory by treating types as\n   spaces. It's the subject of a lot of active research but has some\n   really nice introductory resources even now.\n\n   * [The HoTT book](http://homotopytypetheory.org/book/)\n   * [Student's Notes on HoTT](https://github.com/RobertHarper/hott-notes)\n   * [Materials for the Schools and Workshops on UniMath](https://github.com/UniMath/Schools)\n\n### Proof Theory\n\n - Frank Pfenning's Lecture Notes\n\n    Over the years, Frank Pfenning has accumulated lecture notes that\n    are nothing short of heroic. They're wonderful to read and almost\n    as good as being in one of his lectures.\n\n    * [Introductory Course](http://www.cs.cmu.edu/~fp/courses/15317-f09/)\n    * [Linear Logic](http://www.cs.cmu.edu/~fp/courses/15816-s12/)\n    * [Modal Logic](http://www.cs.cmu.edu/~fp/courses/15816-s10/)\n\n - Jean-Yves Girard's Books\n\n   Girard, one of the most influential logicians of our time, has\n   written several excellent texts on proof theory and logic. My\n   ability to appreciate them is somewhat hampered by a language\n   barrier but what work is available in English I have enjoyed.\n\n   * [Proofs and Types](http://www.paultaylor.eu/stable/prot.pdf)\n   * [The Blind Spot: Lectures on Logic](http://www.ems-ph.org/books/book.php?proj_nr=136\u0026srch=browse_authors%7CGirard%2C+Jean-Yves)\n   * [Mustard Watches: An Integrated Approach to Time and Food](http://girard.perso.math.cnrs.fr/mustard/page1.html)\n\n### Category Theory\n\nLearning category theory is necessary to understand some parts of type\ntheory. If you decide to study categorical semantics, realizability,\nor domain theory eventually you'll have to buckledown and learn a\nlittle at least. It's actually really cool math so no harm done!\n\n - Category Theory in Context\n\n   A newly released textbook on category theory with a focus on using\n   representable functors as a tool to place various concepts of\n   category theory in a coherent framework. This has the substantial\n   advantage of being freely available online! It's also published by\n   Dover so the actual book itself is remarkably cheap.\n\n   * [Online version](http://www.math.jhu.edu/~eriehl/context.pdf)\n   * [Dead-tree version](http://store.doverpublications.com/048680903x.html)\n   * [The author's post on the book](https://golem.ph.utexas.edu/category/2016/11/category_theory_in_context.html)\n\n - Practical Foundations of Mathematics\n\n   This books does an excellent job of tying together general\n   mathematics into the framework of category theory. It is\n   accordingly covers a large basis of *math* outside of the field of\n   category theory. It contains a large amount of categorical logic\n   which warrants its inclusion in this list and is one of the more\n   approachable texts on categorical logic. At least for me.\n\n   * [HTML version](http://www.paultaylor.eu/~pt/prafm/)\n   * [Dead-tree version](https://www.amazon.com/gp/product/0521631076)\n\n - Category Theory\n\n   One of the better introductory books to category theory in my\n   opinion. It's notable in assuming relatively little mathematical\n   background and for covering quite a lot of ground in a\n   readable way.\n\n   * [Dead-tree version](http://www.amazon.com/Category-Theory-Oxford-Logic-Guides/dp/0199237182/ref=sr_1_1?ie=UTF8\u0026qid=1439348930\u0026sr=8-1\u0026keywords=awodey+category+theory)\n\n - Ed Morehouse's Category Theory Lecture Notes\n\n   Another valuable piece of reading are these lecture notes. They\n   cover a lot of the same areas as \"Category Theory\" so they can help\n   to reinforce what you learned there as well giving you some of\n   the author's perspective on how to think about these things.\n\n   * [Online copy](https://emorehouse.wescreates.wesleyan.edu/research/notes/intro_categorical_semantics.pdf)\n\n - Categorical Logic and Type Theory\n\n   This book is honestly quite difficult to get through, but it's an\n   absolutely indispensable resource for folks interested in\n   categorical logic. More generally, this book contains one of the\n   few coherent and comprehensive accounts of how to model type theory\n   categorically. It is *not* a book to learn category theory or type\n   theory from, it demands a good understanding of both since it's\n   focused on applying category theory, not explaining it so\n   much. This is also the book to read if you're interested in\n   understanding the theory of fibered categories in general (the\n   style of categorical semantics that it uses).\n\n   * [Jacob's thesis, containing much of what went into the book](http://www.cs.ru.nl/B.Jacobs/PAPERS/PhD.ps)\n   * [A definitely not suspicious online copy](https://people.mpi-sws.org/~dreyer/courses/catlogic/jacobs.pdf)\n   * [Dead-tree copy](https://www.amazon.com/exec/obidos/ASIN/0444501703/qid%3D922441598/002-9790597-0750031)\n\n - Introduction to Higher-Order Categorical Logic\n\n   This is a relatively short book on categorical logic that\n   introduces all the basic concepts you needed to model simple\n   higher-order logics in category theory. It is *much* easier reading\n   than Categorical Logic and Type Theory but correspondingly less\n   comprehensive. It focuses mainly on modeling the simply typed\n   lambda calculus in cartesian closed categories and then on\n   modeling a richer type theory internally to a topos. It provides a\n   basic explanation of topos theory so it's intelligible having read\n   an introductory category theory book.\n\n   * [Dead-tree copy](https://www.amazon.com/Introduction-Higher-Order-Categorical-Cambridge-Mathematics/dp/0521356539/ref=pd_sim_14_5?_encoding=UTF8\u0026psc=1\u0026refRID=V4H286NSZWK4MWDPV17R)\n\n - Sheaves in Geometry and Logic\n\n   This is not an ideal first book on category theory by any\n   stretch. It merits inclusion because there are deep and interesting\n   relationships between topos theory and type theory and this is one\n   of the more approachable introductions. Some knowledge of topology\n   would be helpful in understanding some of the examples in this\n   books but I am told it is possible to muscle your way through\n   without it.\n\n   * [Dead-tree version](https://www.amazon.com/Sheaves-Geometry-Logic-Introduction-Universitext/dp/0387977104)\n\n### Other Goodness\n\n - Gunter's \"Semantics of Programming Language\"\n\n   While I'm not as big a fan of some of the earlier chapters, the\n   math presented in this book is absolutely top-notch and gives a\n   good understanding of how some cool fields (like domain theory)\n   work.\n\n   * [Dead-tree version](http://www.amazon.com/Semantics-Programming-Languages-Structures-Foundations/dp/0262071436/ref=sr_1_1?ie=UTF8\u0026qid=1439349219\u0026sr=8-1\u0026keywords=gunter+semantics+of+programming+languages)\n\n - Abramsky and Jung's \"Domain Theory\"\n\n   This what I reference nowadays for domain theory. It's a very good\n   (if a little dense) introduction covering all the basic mathematics\n   necessary to work with domains productively.  It should definitely\n   be possible to follow if you've read some of Gunter's book.\n\n   - [CiteSeerX link](http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.8851)\n\n - Realizability: An Introduction to Its Categorical Side\n\n   Categorical realizability is a fascinating area of overlap between\n   type theory and category theory that, frustratingly, lacks many\n   approachable introductions. van Oosten's book does a good job going\n   through the basic aspects of categorical realizability. It is\n   heavily dependent on knowledge of category theory though, I would\n   recommend making it through Sheaves and Geometry and Logic (see\n   above) or something equivalent first.\n\n   * [Dead-tree version](https://www.amazon.com/Realizability-Introduction-its-Categorical-Side/dp/0444550208)\n\n - OPLSS\n\n   The Oregon Programming Languages Summer School is a 2 week long\n   bootcamp on PLs held annually at the university of Oregon. It's a\n   wonderful event to attend but if you can't make it they record all\n   their lectures anyways! They're taught be a variety of lecturers\n   but they're all world class researchers.\n\n   * [2012](https://www.cs.uoregon.edu/research/summerschool/summer12/curriculum.html)\n   * [2013](https://www.cs.uoregon.edu/research/summerschool/summer13/curriculum.html)\n   * [2014](https://www.cs.uoregon.edu/research/summerschool/summer14/curriculum.html)\n   * [2015](https://www.cs.uoregon.edu/research/summerschool/summer15/curriculum.html)\n   * [2016](https://www.cs.uoregon.edu/research/summerschool/summer16/curriculum.php)\n   * [2017](https://www.cs.uoregon.edu/research/summerschool/summer17/topics.php)\n   * [2018](https://www.cs.uoregon.edu/research/summerschool/summer18/topics.php)\n","funding_links":[],"categories":["Technical","Others"],"sub_categories":["ramanihiteshc@gmail.com"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjozefg%2Flearn-tt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjozefg%2Flearn-tt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjozefg%2Flearn-tt/lists"}