We study the longstanding problem of semantics for input/output (I/O) expressed using
side-effects. Our vehicle is a small higher-order imperative language, with operations for
interactive character I/O and based on ML syntax. Unlike previous theories, we present
both operational and denotational semantics for I/O effects. We use a novel labelled
transition system that uniformly expresses both applicative and imperative computation. We
make a standard definition of bisimilarity and prove bisimilarity is a congruence using
Howe's method.
Next, we define a metalanguage [Mscr ] in which we may give a denotational semantics to
[Oscr ]. [Mscr ] generalises Crole and Pitts' FIX-logic by adding in a parameterised recursive datatype,
which is used to model I/O. [Mscr ] comes equipped both with an operational semantics and a
domain-theoretic semantics in the category [Cscr ][Pscr ][Pscr ][Oscr ] of cppos (bottom-pointed posets with
joins of ω-chains) and Scott continuous functions. We use the
[Cscr ][Pscr ][Pscr ][Oscr ] semantics to prove that [Mscr ]
is computationally adequate for the operational semantics using formal
approximation relations. The existence of such relations is based on recent work of
Pitts (Pitts 1994b) for untyped languages, and uses the idea of minimal invariant objects due
to Freyd.
A monadic-style textual translation into [Mscr ] induces a denotational semantics on
[Oscr ]. Our final result validates the denotational semantics: if the denotations of two
[Oscr ] programs are equal, then the [Oscr ] programs are in fact operationally equivalent.