Higher-Dimensional Type Theory
existentialtype.wordpress.com
existentialtype.wordpress.com
Type theorists must use such strange notation to make sure there's never a collision between something in their meta language, and something that someone would actually use in a language. :)
More generally, you can discuss various other notions of equivalence, both for functions and (in this case) types. So if we do allow a programmer to define their own notions of equivalence, is that good enough? Not quite -- it can be difficult to propagate this notion through to derivative constructs. You'd like for there to be a way to get all sorts of "free" theorems basically. So I think that is what this blog post is beginning to talk about, in somewhat technical terms.
Followed by a 600 page book: http://www.amazon.com/dp/0262162288/
But, to be perfectly honest, I'm a systems-focused PL graduate student and have spent quite a bit of time studying this stuff and doubt that I could easily produce a more accessible version of this post. I tried (in the comments block here) and ran on to about two pages before realizing I had only covered the back story on his "trinity" analogy without even getting to this post itself. Someone far smarter than I probably could, but don't feel disappointed if you found this post mathematically challenging even if you normally follow PL theory. It took me a solid cup of coffee and a half an hour to deeply understand what he was saying.
Pierce's TAPL primarily covers the type side of this "trinity" and TAPL2 really only has one relevant chapter, covering Dependent Types.