Formal systems in computer science frequently involve specifications of computations over syntactic structures. In this book, the authors develop a programming language based on a simply typed version of higher-order logic and show that it provides an elegant approach to performing computations over structures embodying binding.