  The Functional Machine Calculus (FMC) was recently introduced as a
generalization of the lambda-calculus to include higher-order global state,
probabilistic and non-deterministic choice, and input and output, while
retaining confluence. The calculus can encode both the call-by-name and
call-by-value semantics of these effects. This is enabled by two independent
generalisations, both natural from the perspective of the FMC's operational
semantics, which is given by a simple multi-stack machine.
  The first generalization decomposes the syntax of the lambda-calculus in a
way that allows for sequential composition of terms and the encoding of
reduction strategies. Specifically, there exist translations of the
call-by-name and call-by-value lambda-calculus which preserve operational
semantics. The second parameterizes application and abstraction in terms of
'locations' (corresponding to the multiple stacks of the machine), which gives
a unification of the operational semantics, syntax, and reduction rules of the
given effects with those of the lambda-calculus. The FMC further comes equipped
with a simple type system which restricts and captures the behaviour of
effects.
  This thesis makes two main contributions, showing that two fundamental
properties of the lambda-calculus are preserved by the FMC. The first is to
show that the categorical semantics of the FMC, modulo an appropriate
equational theory, is given by the free Cartesian closed category. The
equational theory is validated by a notion of observational equivalence. The
second contribution is a proof that typed FMC-terms are strongly normalising.
This is an extension (and small simplification) of Gandy's proof for the
lambda-calculus, which additionally emphasizes its latent operational
intuition.
