Universal Domains 255 8.1 Untyped lambda-Calculus 8.2 Domain Equations 8.3 Notes 9. Subtype Polymorphism 285 9. 1 Subtypes as Subsets 9.2 Subsumption as Implicit Coercion 9.3 Notes 10. Domain Theory 315 10.1 Fixed Points of Functors 10.2 Bifinite domains 10.3 Adjunctions and Powerdomains 10.5 Notes 11. This book expounds the basic motivations and philosophy underlying the applications of semantic techniques in programming language theory. There is an emphasis on the structures used in semantics and the techniques that have been developed for relating various approaches to the semantics of programming languages, particularly for languages with higher-order functions.
Type systems are the central organizational theme of the dicussion.
As a set of general prerequisites for the book I assume familiarity with the basic concepts of programming languages such as variable binding and scope, evaluation, and parsing. Some familiarity with interpreters and compilers is also expected. For computer science students, this book can serve as an introduction to the mathematical techniques used in the study of programming languages. Some mathematical sophistication is essential, but I have limited the prerequisites to what a student should have encountered already in an undergraduate course on logic or abstract algebra. In general, the content of the book is self-contained with enough information that a diligent reader can derive full proofs of all the results with enough time, pencils, and paper.