Type Theory and Formal Proof