Type Theory And Formal Proof