The Formal Semantics of Programming Languages provides the basic mathematical techniques necessary for those
who are beginning a study of the semantics and logics of programming languages. These techniques will allow students
to invent, formalize, and justify rules with which to reason about a variety of programming languages. Although
the treatment is elementary, several of the topics covered are drawn from recent research, including the vital
area of concurency. The book contains many exercises ranging from simple to miniprojects.
Starting with basic set theory, structural operational semantics is introduced as a way to define the meaning of
programming languages along with associated proof techniques. Denotational and axiomatic semantics are illustrated
on a simple language of while-programs, and fall proofs are given of the equivalence of the operational and denotational
semantics and soundness and relative completeness of the axiomatic semantics. A proof of Gödel's incompleteness
theorem, which emphasizes the impossibility of achieving a fully complete axiomatic semantics, is included. It
is supported by an appendix providing an introduction to the theory of computability based on while-programs.
Following a presentation of domain theory, the semantics and methods of proof for several functional languages
are treated. The simplest language is that of recursion equations with both call-by-value and call-by-name evaluation.
This work is extended to lan guages with higher and recursive types, including a treatment of the eager and lazy
lambda-calculi. Throughout, the relationship between denotational and operational semantics is stressed, and the
proofs of the correspondence between the operation and denotational semantics are provided. The treatment of recursive
types - one of the more advanced parts of the book - relies on the use of information systems to represent domains.
The book concludes with a chapter on parallel programming languages, accompanied by a discussion of methods for
specifying and verifying nondeterministic and parallel programs.