The Little Typer

An introduction to dependent types, demonstrating the most beautiful aspects, one step at a time.

A program's type describes its behavior. Dependent types are a first-class part of a language, and are much more powerful than other kinds of types; using just one language for types and programs allows program descriptions to be as powerful as the programs they describe. The Little Typer explains dependent types, beginning with a very small language that looks very much like Scheme and extending it to cover both programming with dependent types and using dependent types for mathematical reasoning. Readers should be familiar with the basics of a Lisp-like programming language, as presented in the first four chapters of The Little Schemer.

The first five chapters of The Little Typer provide the needed tools to understand dependent types; the remaining chapters use these tools to build a bridge between mathematics and programming. Readers will learn that tools they know from programming—pairs, lists, functions, and recursion—can also capture patterns of reasoning. The Little Typer does not attempt to teach either practical programming skills or a fully rigorous approach to types. Instead, it demonstrates the most beautiful aspects as simply as possible, one step at a time.

This is how universes are done in Martin-Löf type theory, which homotopy type theory is based on. It's called predicative universes.

In systems with quantification over types such as Coq, you effectively have universes that can quantify over themselves. I think there are quite a few people who find such systems a bit "less constructive" than MLTT.

MLTT admits a straightforward interpretation in set theory, and indeed there is a constructive fragment of set theory, called CZF, that roughly corresponds to MLTT, in that there is a two-way correspondence between them. Systems with quantification over types don't admit natural set-theoretic interpretations, for reasons expounded by John Reynolds, Polymorphism is not set-theoretic.

Perhaps I'm just being dense, but unfortunately I find the writing style opaque. For example, on page 3 we have:

"Then 'atom is an Atom because 'atom is an atom." (with two or more fonts used in the actual book).

I assume the goal is to let the reader infer the language / notation rules by exposure to many examples. But if so, it's not entirely clear which details are significant in that system: typeface? capitalization? Something else? And without having names for the several different things that the word "atom" represents here, my decoding effort is made more difficult by all forms of "atom" having basically the same pronunciation, which makes it harder to differentiate during my contemplation.

I'm not sure if I'm just failing some IQ requirement for this book, or if I lack some crucial background knowledge (this is my first attempt to study type systems), or if I'm approaching the book in the wrong way.