The Foundations of Programming group holds regular research meetings. The meetings last around an hour, and are intended to be a friendly forum for discussion and exchange of ideas. Most meetings take the form of a talk by a group member or an invited speaker, but we also have various kinds of discussion sessions. The meetings are open to everyone, not just members of the group. Please contact Neil Ghani if you are interested in visiting the group and giving a talk.
Details of previous years meetings are also available: 1995; 1996; 1997; 1998; 1999; 2000; 2001; 2002. 2003. 2004. 2005. 2006.
Details of recent and upcoming meetings are given below.
This talk reveals a closely kept secret of category theory, namely that
it is "just" the theory of preorders made constructive. Knowing the
secret affords an extremely beneficial separation of concerns, which
helps considerably in understanding categorical concepts.
I will demonstrate this seperation of concerns by constructing an
isomorphism between List.(A+B) and List.A x List.(B x List.A) using
coherently constructive fixed-point calculus (aka the calculus of
initial algebras). (Thorsten's talk at the away day was about the
particular case then B is the unit type.)
When programming with arrays, the most common domain error encountered is
out-of-bound selection. Unfortunately these errors cannot be statically
detected unless either the source language is substantially restricted or the
type system is rendered undecidable. In the context of Single Assignment C
(or SaC for short) we have taken a different approach. We do not restrict the
source language but we partially evaluate programs in order to avoid runtime
checks. It turns out that we can statically approximate to what extent
programs need to be evaluated in order to give certain runtime guarantees.
Using these approximations, we can define several different type systems
which require different levels of program specialisation in order to give
different levels of soundness guarantees.
State-based systems and the modal logics for reasoning about them often
heterogeneously combine a number of features such as non-determinism and
probabilities. Here, we show that the combination of features can also
be reflected algorithmically and develop modular decision procedures for
heterogeneous modal logics. We start by reviewing coalgebraic semantics
for modal logics, which provides a common ground for a large class of
modal logics and then focus on synthesising decision procedures for
heterogeneous logics that combine a number of different features.
Asynchronous exceptions, or interrupts, are important for writing
robust, modular programs, but are traditionally viewed as being
difficult from a semantic perspective. In this talk we present a
simple, formally justified, semantics for interrupts. Our approach
is to show how a high-level semantics for interrupts can be justified
with respect to a low-level implementation, by means of a compiler
and its correctness theorem. In this manner we obtain two different
perspectives on the problem, formally shown to be equivalent, which
gives greater confidence in the correctness of our semantics.
(Joint work with Joel Wright.)
This presentation provides an introduction to the Lava system for
compact and efficient structural circuit design for FPGAs. The Lava
system is a collection of Haskell libraries which specifies a domain
specific language for composing the interconnection and layout of
gates. The system makes extensive use of higher order combinators to
specify combinators that can generate new composite circuits in a way
which that not possible with conventional languages like VHDL and
Verilog. We give an example of a high speed sorter circuit based on
Batcher's bitonic merger (and hopefully hardware demo). Finally, we
show how close one can encode a Lava-like language in an imperative
language like C# which now has limited support for lambda expressions
("delegates").
Lava Page
According to Strachey, a polymorphic program is parametric if it applies
a uniform algorithm independently of the type instantiations
at which it is applied. The notion of relational parametricity, introduced
by Reynolds, is one possible mathematical formulation of this idea.
Relational parametricity provides a powerful tool for establishing data
abstraction properties, proving equivalences of datatypes, and establishing
equalities of programs. Such properties have been well studied in a pure
functional setting. Real programs, however, exhibit computational
effects. In this paper, we develop a framework for extending the notion of
relational parametricity to languages with effects.
This is joint work with Alex Simpson.
Inductive datatypes like lists can be understood as initial algebras
and dually coinductive datatypes like streams correspond to terminal
coalgebras. We (Michael Abbott, Neil Ghani, & myself) have introduced
the theory of containers to construct such datatypes and also to be
able to reason about the generically. In my talk I am going to review
the theory of containers and then discuss the question how to extend
it to inductive families (like the typed lambda terms). This is
ongoing work with Neil Ghani, Peter Hancock, Peter Morris and Conor
McBride sometimes summarily referred to as Midlands Containers Ltd.
Modularity is the key to designing and reasoning about large systems. Because of the lack of a clean theory of operational semantics the question of its modularity has long remained unanswered. In this I talk, I will present Turi's mathematical operational semantic using Haskell, and then propose an answer to the question of its modularity. The proposed solution is based on a structure which has already proved to be fundamental in modular denotational semantics : monads.
Sven-bodo Scholz,
University of Hertfordshire
Dirk Pattinson,
Imperial College
Graham Hutton,
University of Nottingham
Satnam Singh,
Microsoft Research
Rasmus Mogelberg
University of Edinburgh
Thorsten Altenkirch
University of Nottingham
Mauro Jaskelioff
University of Nottingham
In this talk, I will explore some choices that arise if one wants to design a programming language from scratch, with the intention of supporting software verification.
I will describe Hoare Type Theory (HTT) which integrates a dependently typed higher-order language, with Hoare-like specifications for reasoning about mutable state and pointer aliasing. The lack of this integration in the past has arguably been one of the most significant obstacles in the application of Hoare-style verification methodology, since it prevented effective reasoning about constructs for data abstraction, information hiding, and code reuse.
From the technical standpoint, it is interesting that the design of HTT relates in an essential way some of the most venerable ideas from language theory , which have so far largely existed in isolation, like Dijkstra's predicate transformers, Curry-Howard isomorphism, monads, as well as the more recent idea of Separation Logic.
We have formally proved that HTT is modular, in the sense that the verification of individual program components suffices to establish the correctness of the whole program. HTT is also (almost) conservative over the programming practice in modern functional languages; if the verification features are not used, HTT very much looks like core Haskell.
I will discuss the implementation of HTT (called Y-not) which is currently
under way, as well as the possibilities for scaling HTT to support further
programming features.
Some years ago, Alan Bundy and Julian Richardson presented a technique for
representing and reasoning about lists using ellipsis. Although successful,
this technique had various limitations. In this talk, I will recap this technique, highlight
its limitations and show how they can be addressed via Containers. I will then discuss how
such a container-based system is implemented.
I will talk about a way to give a useful denotational semantics to type
and effect systems. I will show how to extend Plotkin and Power's
interpretation of effectful programs as elements of a free universal
algebra to incorporate type information that restricts the effects that
are allowed at any point in the program.
By relating this typed semantics to the usual untyped semantics I will
show how to derive useful program equivalences permitted by the type
system. These equivalences have previously been proved using an
extensional relational semantics by Benton, Kennedy, Hofmann and
Beringer. This method provides an intensional method of proving such
equivalences that extends easily to other kinds of effects.
The idea that bound variables and free (global) variables should be
represented by distinct syntactic classes of names goes back at least
to Gentzen and Prawitz. In the early 1990's, McKinna and Pollack
formalized a large amount of the metatheory of Pure Type Systems with
a representation using two classes of names. This work developed a
style for formalizing reasoning about binding which was heavy, but
worked reliably. However, the use of names for bound variables is not
a perfect fit to the intuitive notion of binding, so I suggested
(1994) that the McKinna--Pollack approach to reasoning with two
species of variables also works well with a representation that uses
names for global variables, and de Bruijn indices for bound variables.
This \emph{locally nameless} representation, in which alpha
equivalence classes have exactly one element, had previously been used
in Huet's Constructive Engine and by Andy Gordon. The locally
nameless representation with McKinna--Pollack style reasoning has
recently been used by several researchers (with several proof tools)
for solutions to the POPLmark Challenge.
In this talk I discuss the current state of play with locally nameless
representation and suitable styles of reasoning about it. Using
Urban's nominal Isabelle package, it is possible to get the
boilerplate definitions and lemmas about freshness of names and
swapping/permuting names for free. From nominal Isabelle and other
work there are new appraches to proving the strengthened induction
principles that reasoning with names requires. There are also some
downsides to the new ideas, which I will point out.
This talk will give an overview of the technique for extracting
computational content from proofs emphasising the gab
between the pure method that works in principle and refined
techniques that can be applied to nontrivial examples with
practically useful results. We will focus on programs from classical
proofs involving choice principles and further show how program
extraction can be successfully applied to algorithm verification.
Rawle Prince
University of Nottingham
Robert Atkey
Edinburgh University
Randy Pollack
Edinburgh University
Monika Seisenberger
Swansea University
Further Information
Meetings are normally held on Fridays at 3 p.m. in room C1 in
the School of Computer Science on the Jubilee Campus.
On-line directions to the Jubilee Campus are available, and our address is as
follows:
School of Computer Science and IT
University of Nottingham
Jubilee Campus, Wollaton Road
Nottingham NG8 1BB
United Kingdom