This book develops a type theory, studies its properties, and explains its uses in computer science. The book focuses in particular on how the study of type theory may offer a powerful and uniform language for programming, program specification and development, and logical reasoning. The type theory developed here reflects a conceptual distinction between logical propositions and computational data types. Starting from an introduction of the basic...