| Components as coalgebras |
Abstract
In the tradition of mathematical modelling in physics and chemistry, constructive formal specification methods are based on the notion of a software model, understood as a state-based abstract machine which persists and evolves in time, according to a behavioural model capturing, for example, partiality or (different degrees of) non determinism. This can be identified with the more prosaic notion of a software component advocated by the software industry as `building block' of large, often distributed, systems. Such a component typically encapsulates a number of services through a public interface which provides a limited access to a private state space, paying tribute to the nowadays widespread object-oriented programming principles.
The tradition of communicating systems formal design, by contrast, has developed the
notion of a process as an abstraction of the behavioural
patterns of a computing system, deliberately ignoring the data and state
aspects of software systems.
Both processes and components are among the broad group of computing
phenomena which are hardly definable (or simply not definable) algebraically,
ie, in terms of a complete set of constructors.
Their semantics is essentially observational, in the sense that all that can be traced
of their evolution is their interaction with the environment.
Therefore, coalgebras, whose theory has recently witnessed remarkable
developments, appear as a suitable modelling tool.
The basic observation of category theory
that universal constructions always come in pairs,
has motivated research on the duality between algebras and coalgebras,
which provides a bridge between models of static
(constructive, data-oriented) and dynamical
(observational, behaviour-oriented) systems.
At the programming level,
the intuitive symmetry between data and behaviour provides
evidence of such a duality, in its canonical initial-final specialisation.
This line of thought entails both definitional and proof principles,
ie, a basis for the development of program calculi
directly based on (actually driven by) type specifications.
Moreover, such properties can be expressed in terms of
generic programming combinators which are used,
not only to calculate programs, but also to program with.
Framed in this context, this thesis addresses the following main themes:
(for a printed copy contact the author)