Abstracts
K. Nakano and S-C. Mu, A Pushdown Machine for Recursive XML Processing. In
The Fourth Asian Symposium on Programming Language and Systems, LNCS 4279, pp. 340-356, November 2006.
[
PDF]
XML transformations are most naturally defined as recursive functions
on trees. A naive implementation, however, would load the entire input
XML tree into memory before processing. In contrast, programs in
stream processing style minimise memory usage since it may release
the memory occupied by the processed prefix of the input, but they
are harder to write because the programmer is left with the burden
to maintain a state. In this paper, we propose a model for XML
stream processing and show that all programs written in a particular
style of recursive functions on XML trees, the macro forest
transducer, can be automatically translated to our stream processors.
The stream processor is declarative in style, but can be implemented
efficiently by a pushdown machine. We thus get the best of both worlds —
program clarity, and efficiency in execution.
Z. Hu, S-C. Mu and
M. Takeichi, A programmable editor for developing structured documents based on bidirectional transformations. Submitted to Higher-Order and Symbolic Computation.
[
PDF]
This paper presents an application of bidirectional transformations to
design and implementation of a novel editor supporting interactive
refinement in the development of structured documents. The user
performs a sequence of
editing operations on the document view, and the editor automatically
derives an efficient and reliable
document source and a transformation that produces the document view.
The editor is unique in its
programmability, in the sense that transformation can be obtained
through editing operations. The main tricks behind are the
utilization of the view-updating technique developed in the database
community, and a new bidirectional transformation language
that can describe not only relationship between the document source
and its view, but also data dependency in the view.
S-C. Mu,
Z. Hu and
M. Takeichi, Bidirectionalizing Tree Transformation Languages: A Case Study. In
JSSST Computer Software (コンピュータソフトウェア) Vol. 23(2), pp. 129-141, 2006.
[
PDF]
A transformation from the source data to a target view is said to be
bidirectional if, when the target is altered, the transformation
somehow induces a way to reflect the changes back to the source, with
the updated source satisfying certain healthiness conditions.
Several bidirectional transformation languages have been proposed.
In this paper, on the other hand, we aim at making existing
transformations bidirectional.
As a case study we chose the Haskell combinator library, HaXML,
and embed it into Inv, a language the authors
previously developed to deal with bidirectional updating.
With the embedding, existing HaXML transformations gain bidirectionality.
R. S. Bird and S-C. Mu, Countdown: a case study in origami programming. In
Journal of Functional Programming Vol. 15(5), pp. 679-702, 2005.
[
GZipped Postscript]
Countdown is the name of a game in which one is given a list of source
numbers and a target number, with the aim of building an arithmetic
expression out of the source numbers to get as close to the target
as possible. Starting with a relational specification we derive a
number of functional programs for solving Countdown. These programs
are obtained by exploiting the properties of the folds and unfolds
of various data types, a style of programming Gibbons has aptly called
origami programming. Countdown is attractive as a case
study in origami programming both as an illustration of how different
algorithms can emerge from a single specification, as well as the space
and time trade-offs that have to be taken into account in comparing
functional programs.
S-C. Mu,
Z. Hu and
M. Takeichi, A language for bidirectional updating based on injective mapping. Unpublished.
[
PDF]
With the popularity of XML, bidirectional updating -- maintaining
the consistency between two pieces of structured data,
again becomes a problem of interest.
In this paper we propose a new framework, inspired by program inversion,
to look at this problem. We design a functional language, Inv,
in which all programs are injective and their inverses can be trivially
constructed.
The language is equivalent to reversible Turing machines and expressive
enough to describe most transforms one would need.
It is assumed that the data to be synchronised are related by
a transform written in Inv.
The semantics of Inv is then extended to deal with
bidirectional updating. Given a transform, its
synchronisation behaviour can be derived by algebraic
reasoning. The main feature of our approach is being able to
deal with duplication and structural changes.
R. S. Bird and S-C. Mu, Inverting the Burrows-Wheeler transform
. In
Journal of Functional Programming Vol. 14(6) Special Issue on Functional Pearls, pp. 603-612, Novermber 2004.
[
GZipped Postscript]
The Burrows-Wheeler Transform is a string-to-string transform
which, when used as a preprocessing phase in compression,
significantly enhances the compression rate. However, it often
puzzles people how the inverse transform can be carried out.
In this pearl we to exploit simple equational reasoning to
derive the inverse of the Burrows-Wheeler transform from its
specification. We also outline how to derive the inverse of
two more general versions of the transform, one proposed by
Schindler and the other by Chapin and Tate.
S-C. Mu,
Z. Hu and
M. Takeichi, An algebraic approach to bidirectional updating. In
The Second Asian Symposium on Programming Language and Systems, pp. 2-18. November 2004.
[
PDF]
In many occasions would one encounter the task of maintaining
the consistency of two pieces of structured data related
by some transform --- synchronising bookmarks in different web browsers,
the source and the view in an editor, or views in databases, to name a few.
This paper proposes a formal model of such tasks, basing on a programming
language allowing injective functions only, inspired by previous work on
program inversion. The programmer designs the
transformation as if she is writing a functional program, while the
synchronisation behaviour is automatically derived by algebraic reasoning.
The main advantage is being able to deal with duplication and structural
changes. The result will be integrated to our structure XML editor in the
Programmable Structured Document project.
Z. Hu, S-C. Mu and
M. Takeichi, A programmable editor for developing structured documents based on bidirectional transformations. In
Partial Evaluation and Semantics-Based Program Manipulation, pp. 178-189. August 2004.
[
PDF]
This paper presents a novel editor supporting interactive
refinement in the development of structured documents. The user
performs a sequence of editing operations on the document view,
and our system automatically derives an efficient and reliable
document source and a transformation that produces the document view.
The editor is unique in its programmability, in the sense that
transformation can be obtained through editing operations. The
important techniques behind this editor are the utilization of the
view-updating idea developed in the database community, and a
bidirectional transformation language that concisely describes
the relationship between the document source and its view,
as well as data dependency in the view.
S-C. Mu,
Z. Hu and
M. Takeichi, An injective language for reversible computation. In
Mathematics of Program Construction 2004, LNCS 3125, pp. 289-313, July 2004.
[
PDF]
Erasure of information incurs an increase in entropy and dissipatse
heat. Therefore, information-preserving computation is essential
for constructing computers that use energy more effectively.
A more recent motivation to understand reversible
transformations also comes from the design of editors
where editing actions on a view need to be reflected back to
the source data.
In this paper we present a point-free functional language,
with a relational semantics,
in which the programmer is allowed to define injective
functions only. Non-injective functions can be transformed into
a program returning a history. The language is presented with many examples,
and its relationship with Bennett's reversible Turing machine
is explained.
The language serves as a good model for program
construction and reasoning for reversible computers, and hopefully
for modelling bi-directional updating in an editor.
S-C. Mu and
R. S. Bird, Theory and applications of inverting functions as folds. In
Science of Computer Programming Vol. 51 Special Issue for Mathematics of Program Construction 2002, pp. 87-116, 2003.
[
GZipped Postscript]
This paper is devoted to the proof, applications, and
generalisation of a theorem, due to Bird and de Moor, that
gave conditions under which a total function can be expressed
as a relational fold. The theorem is illustrated with three
problems, all dealing with constructing trees with various
properties. It is then generalised to give conditions under
which the inverse of a partial function can be expressed as
a relational hylomorphism. Its proof makes use of Doornbos
and Backhouse's theory on well-foundedness and reductivity.
Possible applications of the generalised theorem is discussed.
S-C. Mu and
R. S. Bird, Rebuilding a tree from its traversals: a case study of
program inversion. In
The First Asian Symposium on Programming Languages and Systems, LNCS 2895, pp. 265-282, Bejing, 2003.
[
GZipped Postscript]
Given the inorder and preorder traversal
of a binary tree whose labels are all distinct, one can reconstruct
the tree. This article examines two existing algorithms
for rebuilding the tree in a functional framework, using existing
theory on function inversion. We also present a new, although
complicated, algorithm by trying another possibility not
explored before.
S-C. Mu,
A Calculational Approach to Program Inversion. D.Phil Thesis. Oxford University Computing Laboratory.
March 2003
[
GZipped Postscript][
PDF]
Many problems in computation can be specified in terms of
computing the inverse of an easily constructed function.
However, studies on how to derive an algorithm from
a problem specification involving inverse functions
are relatively rare.
The aim of this thesis is to demonstrate, in an example-driven
style, a number of techniques to do the job.
The techniques are based on the framework of relational,
algebraic program derivation.
Simple program inversion can be performed by just taking
the converse of the program, sometimes known as to ``run
a program backwards''. The approach, however, does not
match the pattern of some more advanced algorithms. Previous
results, due to Bird and de Moor, gave conditions under which
the inverse of a total function can be written as a fold. In this
thesis, a generalised theorem stating the conditions for
the inverse of a partial function to be a hylomorphism is
presented and proved. The theorem is applied to many examples,
including the classical problem of rebuilding a binary tree
from its preorder and inorder traversals.
This thesis also investigates into the interplay between the
above theorem and previous results on optimisation problems.
A greedy linear-time algorithm is derived for one of
its instances --- to build a tree of minimum height. The necessary
monotonicity condition, though looking intuitive, is difficult to
establish. For general optimal bracketing problems, however, the
thinning strategy gives an exponential-time algorithm. The reason and
possible improvements are discussed in a comparison with the
traditional dynamic programming approach.
The greedy theorem is also generalised to a generic form allowing
mutually defined algebras. The generalised theorem is applied to the
optimal marking problem defined on non-polynomial based datatypes.
This approach delivers polynomial-time algorithms without
the need to convert the inputs to polynomial based datatypes,
which is sometimes not convenient to do.
The many techniques are applied to solve the Countdown problem,
a problem derived from the popular television program of the same
name. Different strategies toward deriving an efficient algorithm
are experimented and compared.
Finally, it is shown how to derive from its specification
the inverse of the Burrows-Wheeler transform, a string-to-string
transform useful in compression. Not only do we identify the
key property why the inverse algorithm works, but,
as a bonus, we also outline how two generalisations of
the transform may be derived.
S-C. Mu and
R. S. Bird, Inverting functions as folds. In
Sixth International Conference on Mathematics of Program Construction, Dagstuhl, Germany, July 2002
[
GZipped Postscript]
This paper is devoted to the proof and applications of a theorem
giving conditions under which the inverse of a partial function can be
expressed as a relational hylomorphism. The theorem is a generalisation
of a previous result, due to Bird and de Moor, that gave conditions
under which a total function can be expressed a relational fold.
The theorem is illustrated with three problems, all dealing with
constructing trees with various properties.
S-C. Mu and
R. S. Bird, Quantum functional programming. In
2nd Asian Workshop on Programming Languages and Systems , KAIST, Dajeaon, Korea, December 17-18, 2001.
[
GZipped Postscript]
It has been shown that
non-determinism, both angelic and demonic, can be encoded in a
functional language in different representation of sets. In this
paper we see quantum programming as a special kind of non-deterministic
programming where negative probabilities are allowed. The point
is demonstrated by coding two simple quantum algorithms in Haskell.
A monadic style of quantum programming is also proposed. Programs
are written in an imperative style but the programmer
is encouraged to think in terms of values rather than quantum registers.