
[ Bristol CS | Index | Research ]
Declarative Languages
A declarative language is a higher level one where you specify what you want,
not how to get it. Such languages are particularly useful to provide higher
level interfaces to underlying complex systems. A simple example is HTML
where, for example, you specify what is to appear on a page, but not how it is
to be laid out. Another example is SQL where you specify what you want out of
a database query, but do not give code for the looping and testing needed to
produce it (see the Databases
unit). There are modelling languages such as CCS (see the Concurrency unit), or UML (see the Design Methodology unit) and
formal specification or proof languages.
These are special purpose languages, but there are also general purpose
declarative languages, in which any program can be written in a
declarative style. These particularly include the functional language Haskell
(see the Intro Software Engineering
unit), and the logic programming language Prolog and its derivatives (see
the Artificial Intelligence unit).
This subject overlaps with the interests of other research groups,
e.g. formal methods, so people such as Kerstin Eder may also be possible
supervisors.
- Animation
(Ian Holyer)
Produce a graphical tool for checking and animating an object-oriented
system modelling language (such as UML/OML/SOMA).
- Modelling
(Ian Holyer, Kerstin Eder)
Create a graphical tool for creating models of state transition systems,
such as Petri nets, and a translator from the graphical form into a formal
language suitable for checking properties of a model.
- A deductive interface to a relational database.
(Kerstin Eder)
Logical inference rules could be applied to deduce information from the
data, and check sophisticated integrity constraints. A logical language can be
implemented in a conventional host language (such as Java) and interfaced to an
SQL database (using JDBC for example).
- Constraint programming library for imperative languages.
(Steve Gregory)
Constraint solving provides algorithms for solving certain kinds of search
problems efficiently. Design a Java API/library for constraint programming.
- A Concurrent File System for Haskell (Ian Holyer)
Currently, file I/O in Haskell is forced to interact sequentially with the
file system, in order to match the sequential design of the operating system.
It is possible to provide a more natural, direct, and functional, design for
file access by keeping track of file versions.
- Expert system and knowledge base systems
(Kerstin Eder)
Identify an interesting application area. Build an expert or knowledge
base system. Investigate algorithms for knowledge acquisition, data
manipulation, data consistency checks etc.
- Theorem proving and formal verification
(Kerstin Eder)
Model an application (e.g. an integrated circuit or a controller) in a
logic. Test, analyse and extend (existing) proof procedures for this
logic. Define properties of the application and prove them.
Ian Holyer,
Ian.Holyer@bristol.ac.uk Last modified on Friday 2 February 2001. © 2000 University of Bristol