Midlands Graduate School
Two languages are presented, a simple imperative language with state,
and a simple pure (that is, stateless) eager functional language. For
each language we present an evaluation (natural) semantics, an
abstract machine, and we prove that the machine and evaluation
semantics are mutually correct. This forms a nice story for a course
of five (rapid) lectures.
We do not cover types in great detail (polymorphism and type inference
are not covered). Also, we do not cover transition (Plotkin)
semantics, nor any form of lazy evaluation for the functional
language.
The MGS notes are based on previous courses given by the author which
do cover these topics, and also denotational semantics. The notes for
the previous courses can be obtained from the author, as well as an
implementation (and descriptive report) of an operational semantics
which is a considerable superset of the languages presented in the MGS
course.
The lecture notes and slides are available below, and there
are additional notes, slides and software available which expand
and complement the MGS 2006, 2007 and 2008 lectures.
 The Midlands Graduate School lecture notes and slides on
Operational
Semantics, Abstract Machines and Correctness. The slides
are available 1up and 8up. These notes cover a
bigstep style evaluation relation, an abstract machine, and a
proof of mutual correctness for a simple imperative language,
and a small eager functional language.
 Details
of the category theory book mentioned in the 2007
lectures and here is what to
look for in the shops.

Some full text lecture notes, from a previous
course on Operational Semantics, and the
slides from this course. These notes cover transition and
evaluation relations for an imperative language, and their mutual
correctness; evaluation relations for both eager and lazy functional
languages (including named and nameless functions); type systems for
all these languages; and a simple introduction to polymorphism and
polymorphic type inference.

Some full text lecture notes, from a previous
course on Semantics of Programming Languages. These notes cover
much of the material above, but in addition cover a basic
introduction to denotational semantics. I have to say that if I
were to lecture this material now, I would present it differently, but
you may still find these notes a useful introduction to a small part
of this wide and interesting topic. These notes also define
simultaneously specified inductive sets which one
does not see presented very often. Of course, the reason is that the
usual definition encompasses the "simultaneous" definition (why?), but
the fact remains that in many "practical" situations one defines a
number of sets inductively and at the same time.
 Some years ago I produced a software tool which provides
an implementation of an impure functional language. One can
delcare some functions, write a program, and then beginning
with a specified memory state the software will produce a
sequence of smallstep transitions, or the result of a
bigstep evaluation. You may like to look at
a description of the KOREL tool. I will try to provide a
new binary for KOREL in the future. When looking at the tool
prior to the 2006 MGS, I found a few bugs, which should be
fixed.

