
So you want to learn type theory - psygnisfive
http://purelytheoretical.com/sywtltt.html
======
dons
Good list, I'd also recommend
[http://www.cs.cmu.edu/~rwh/plbook/book.pdf](http://www.cs.cmu.edu/~rwh/plbook/book.pdf)
for something designed for newcomers to the field

~~~
jonsterling
Yeah, that's a great book for learning how the _methodology_ of type theory
and judgemental presentations can be used in presenting practical/everyday PL
concepts.

Incidentally, I spoke with bob and he mentioned he wants to write another book
some day that does the same thing, but for "pure" type theory. I think that'd
be a great book, particularly given bob's unique perspective on type theory
(having spent a lot of time on both sides of the fence—proof theory vs
realizability). but don't count on it anytime soon!

~~~
psygnisfive
I'll start added recommendations to the link, so keep 'em coming.

------
Pyret
What's Type Theory and how's it different from Set Theory and Category Theory?

~~~
psygnisfive
I want to disagree a little bit with chas here and just say that type theory
as we know it today emerged out of a different, post-computer tradition than
old-school Russellian type theory. Modern type theory comes arguably from
Martin-Löf and the FP domain.

As for what is type theory vs. set theory vs. category theory, I'd put it this
way: type theory is a flavor of proof theory built on computational
justification of inference rules and patterns of reasoning. But that's maybe a
bit boring sounding, so another way to think of it is, type theory is a
framework for thinking about what makes sense in a strongly typed programming
language. Most PLs with types just throw types in as an afterthought, whereas
a type theoretic perspective says, start with the types, use the types to
express what you want the programming language to do, and the lambda calculus
that you get from this _is_ your programming language.

What sets it apart from set theory is that type theory is much more about
inference and justification. Set theory is more a theory _about_ sets, where
you presuppose these things exist and have properties (membership, etc.) that
you want to capture and reason about. Type theory, on the other hand, is a way
of thinking about how to _invent new sorts of things_ , and a tool for
reasoning in and of itself. You reason about sets using some logic, type
theory _is a logic_.

Something similar is true about category theory as well, only for a different
sort of thing (whereas sets are defined by membership, etc. categories are
defined by objects and maps, etc.)

A good analogy, I would argue, is this:

    
    
        type theory : set theory/CT  ::  mathematics : physics
    

One is a general framework of reasoning, inference, proof, etc. the other is a
domain that you apply it to. It's not a perfect analogy for all the obvious
reasons, but thats roughly how I'd suggest you think about it. When you do
your set theory, you take for granted all the stuff like conjunction,
implication, quantification, etc. just as the language you use to talk about
sets. With type theory, you're looking at those very linguistic constructs.

~~~
igravious
This is what I don't get... _Why_ is 'type' theory _a logic_? A type is an
enumeration of values (terms), right? What's that got to do with truth values
and how they may be manipulated? I've read some of the papers/texts you posted
in that tremendously helpful summary (thanks by the way!) and talking about
type theory always segues into talking about logic. If you could explain that
_one_ thing I'd be so happy. To me, type theory seems like set theory done
right...

~~~
psygnisfive
Ahh this is a very good question.. I'll give two answers, the first more
philosophical and the second more example-driven, and both hesitant, 'cause
I'm not sure anyone's really thought about deeper why's like this much. :)

1:

My first answer is, because of the nature of what a logic is. Logics are
systems for reasoning about some problem domain, or put it another way, logics
are ways of convincing yourself that you're justified in believing a judgment
(`A is true`, `B is a proposition`, `C is tasty`).

What this means is that, to have a proof `M` which proves a judgment `J`, is
to have some piece of data which you can look at. So all proofs are some kind
of data, in the same way that all novels and all movies are some kind of data.

A harder question is why all data is a kind of proof and that's more subtle.
Some people actually want to say they're not, proofs are just a special kind
of data, while others want to just say to loosen the notion of proof and
proposition. I don't think there's a good answer for this direction.

2:

My second answer is, it turns out they couldn't be anything else! Consider the
inference rule (written in natural English):

    
    
        if you know
          A is true
        and you know
          B is true
        then you can conclude
          A&B is true
    

which tells you when you can make the judgment `A&B is true`. When you use
this rule, you have to supply two justifications of the premises `A is true`
and `B is true`. That is, you have to provide two pieces of evidence, two
proofs, one for each premise.

Now consider this description of how to make pairs:

    
    
        if you have
          M of type A
        and you have
          N of type B
        then you can make
          (M,N) of type A*B
    

Here we're just describing how pairs are formed: you take two things, and
stick them together with a constructor to form a new piece of data.

Now I ask you, what are you doing when "proving A&B" if not taking two things
(two smaller proofs of `A` and `B`) and sticking them together to form a new
piece of data (the proof of `A&B`)? I would argue you're not doing ANYTHING
different. The act of proving a conjunction is just the same as the act of
making a pair!

Now do this for other logical connectives:

    
    
        proving a disjunction is just the same as giving an element of a tagged union
    
        proving an implication is just the same as giving a function
    
        proving the trivial proposition is just giving a 0-length tuple
    
        proving the absurd proposition (which is impossible)
          is just giving a void-type value (which is impossible)
    

So why are type theories a logic? Well just look!

\----

Now, I should say, this connection does not mean that all logics are type
theories! Type theory has a very specific view of how inference rules are
justified, by appeal to certain principles which turn out to be computational
in nature.

Why these principles should be so _powerful_ as computational principles, I
don't know. It's a mystery. Maybe God is a type theorist? ;p

~~~
igravious
Thank you for taking the time to reply to me.

I would like to continue this conversation with you but here is not the
correct space/place. I will join the group on IRC and I hope to catch you
there.

------
raspasov
I am interested to hear about practical application of type theory and how it
helped solve real world software and hardware problem better.

~~~
psygnisfive
Aside from PFPL, which is oriented towards implementors of programming
languages, type theory has practical uses in the act of programming itself.
That is to say, with an adequate type theory, you can at a minimum use it to
help you construct proofs that your programs do what you want them to do. But
that's doable with any meta-system for certified programming, TT is just one
particular meta-system that has some nice properties.

The more common practical uses are:

1) If you're using a statically typed language, knowing some basic TT will let
you understand the hows and whys of its type system. This is especially true
of static langs that have richer type systems, like Haskell.

2) Rich type systems actually help you program! a lot of people complain that
type systems merely complain when you mess up -- which is helpful, because you
now know you've messed, but not completely helpful because it feels like the
types don't help you. The truth is,, this is mostly true only of BAD type
systems.

A GOOD type system can guide you to the right answer by making the number of
possible programs very tiny. Instead of infinitely many programs, there might
just be one or two.

A GOOD type system can guide you to the right answer by making it possible for
the computer to write parts of the program for you because the types make it
obvious what the options are at any moment program construction.

For specific examples, you'd have to look around. I don't have any offhand
(nor am I trying to convince you to learn TT!). Conal Elliot and Edward Kmett
no doubt have plenty of good examples, or could tell you who does.

~~~
raspasov
Thank you for the thoughtful response!

------
devty
Nice!

------
geoka9
Ask yourself why.

You want to do CS, prove theorems, do theoretical research? Then, by all
means, go for it!

It's hip and you use a functional language to write software? Well... It's
probably just a whim. But sure, give it a try.

~~~
oldmanjay
No, don't ask yourself why. Just learn. It's one human activity that never
requires a reason

~~~
geoka9
What I meant is it would be impractical to pick one special topic of CS to
study just because it happens to be a mode of the day.

It's like deciding to study number theory ("because, you know, cryptography!")
in isolation instead of following a sensible math curriculum ("I'm not
particularly interested in math") and learning the discipline as it was meant
to be learned.

In short, I can't think of a "type system specialist" who is not a computer
scientist. It sounds sort of like a "loop specialist" who can't program, or a
"forehand specialist" who can't play tennis.

~~~
ufo
Type theory specialists outside of CS usually fit under the banner of
"Logician". Thats why they go under your radar :)

------
molikto
what about categorial semantics? hahaha!!!

~~~
derriz
Walk away now. Type Theory derailed my PhD studies. Seduced by constructivism,
Curry-Howard, Martin-Löf and especially Girard's Proofs and Types, I wasted
two years and subsequently abandoned my postgraduate studies. It's comp. sci.
flavoured esoteric nonsense.

~~~
molikto
is there anything in the world that is non-nonsense? so it is better to study
pure-nonsense, just because it is pure

~~~
TheGrassyKnoll
I think they call it: 'death'

