VLDB 2026 Research / reviewers in the wild / expert
Oege de Moor
dblp:m/OegedeMoor
· DBLP profile ↗
40ranked-venue papers
6as first author
0since 2021 · last 2016
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 30 · 2 first-authorTheory of computation · 8 · 3 first-authorDatabases, data management, data science and information retrieval · 4 · 2 first-author
Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.
| Software engineering, system software, and programming languages
14 papers |
Programming languages and type systems · 43% Program analysis · 18% Software maintenance and evolution · 15% | |
| Databases, data mining, and information retrieval
4 papers |
Data models and query languages · 59% Graph data management · 21% Indexing and storage engines · 21% | |
| Computer architecture, parallel and distributed computing, and storage systems
2 papers |
Performance modeling and evaluation · 52% GPUs and heterogeneous computing · 48% |
Topics — the 28 heaviest of 33, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Software maintenance and evolution
refactoring |
0.3 | 3 | 2010 | Specifying and implementing refactorings · OOPSLA 2010 Sound and extensible renaming for java · OOPSLA 2008 JunGL: a scripting language for refactoring · ICSE 2006 |
Programming languages and type systems
aspect-oriented programming |
0.2 | 5 | 2007 | Semantics of static pointcuts in aspectJ · POPL 2007 Optimising aspectJ · PLDI 2005 Adding trace matching with free variables to AspectJ · OOPSLA 2005 |
Empirical software engineering
mining software repositories |
0.2 | 1 | 2015 | Tracking Static Analysis Violations over Time to Capture Developer Characteristics · ICSE (1) 2015 |
Programming languages and type systems
type inference |
0.2 | 2 | 2010 | Type inference for datalog with complex type hierarchies · POPL 2010 Type inference for datalog and its application to query optimisation · PODS 2008 |
Data models and query languages › datalog
datalog query optimization |
0.2 | 2 | 2008 | Adding magic to an optimising datalog compiler · SIGMOD Conference 2008 Type inference for datalog and its application to query optimisation · PODS 2008 |
Graph data management › graph query processing
reachability query |
0.1 | 1 | 2011 | A memory efficient reachability data structure through bit vector compression · SIGMOD Conference 2011 |
Data models and query languages
datalog |
0.1 | 1 | 2010 | Type inference for datalog with complex type hierarchies · POPL 2010 |
Programming languages and type systems
type systems |
0.1 | 1 | 2010 | Type inference for datalog with complex type hierarchies · POPL 2010 |
Data models and query languages › datalog › datalog query optimization
magic sets |
0.1 | 1 | 2008 | Adding magic to an optimising datalog compiler · SIGMOD Conference 2008 |
Program analysis › binary analysis
bytecode analysis |
0.1 | 1 | 2008 | Efficient local type inference · OOPSLA 2008 |
Software maintenance and evolution › refactoring
identifier renaming |
0.1 | 1 | 2008 | Sound and extensible renaming for java · OOPSLA 2008 |
Programming languages and type systems › type inference
local type inference |
0.1 | 1 | 2008 | Efficient local type inference · OOPSLA 2008 |
Programming languages and type systems › lambda calculus
variable binding |
0.1 | 1 | 2008 | Sound and extensible renaming for java · OOPSLA 2008 |
Programming languages and type systems
language semantics |
0.1 | 1 | 2007 | Semantics of static pointcuts in aspectJ · POPL 2007 |
Program analysis › dynamic analysis
runtime monitoring |
0.1 | 1 | 2007 | Making trace monitors feasible · OOPSLA 2007 |
Program verification › dynamic verification
runtime verification |
0.1 | 1 | 2007 | Making trace monitors feasible · OOPSLA 2007 |
Program verification › temporal logic
temporal logic specification |
0.1 | 1 | 2007 | Making trace monitors feasible · OOPSLA 2007 |
Programming languages and type systems
language design |
0.1 | 2 | 2005 | Adding trace matching with free variables to AspectJ · OOPSLA 2005 Optimising aspectJ · PLDI 2005 |
Program analysis
static analysis |
0.1 | 1 | 2015 | Tracking Static Analysis Violations over Time to Capture Developer Characteristics · ICSE (1) 2015 |
Programming languages and type systems
domain-specific languages |
0.1 | 1 | 2006 | JunGL: a scripting language for refactoring · ICSE 2006 |
Program analysis › static analysis
incremental analysis |
0.0 | 1 | 2004 | Incremental execution of transformation specifications · POPL 2004 |
Performance modeling and evaluation
workload characterization |
0.0 | 1 | 2004 | Measuring the dynamic behaviour of AspectJ programs · OOPSLA 2004 |
Programming languages and type systems › type inference
static type inference |
0.0 | 1 | 2008 | Efficient local type inference · OOPSLA 2008 |
Program analysis › program representation
program graph |
0.0 | 1 | 2006 | JunGL: a scripting language for refactoring · ICSE 2006 |
Program analysis
program representation |
0.0 | 1 | 2006 | JunGL: a scripting language for refactoring · ICSE 2006 |
Program analysis › dynamic analysis › trace analysis
trace alignment |
0.0 | 1 | 2005 | Adding trace matching with free variables to AspectJ · OOPSLA 2005 |
Program analysis › dynamic analysis › instrumentation
bytecode instrumentation |
0.0 | 1 | 2004 | Measuring the dynamic behaviour of AspectJ programs · OOPSLA 2004 |
Compilers and program optimization
program transformation |
0.0 | 1 | 2004 | Incremental execution of transformation specifications · POPL 2004 |
Methods — techniques the papers use, named apart from their topics
type inference · 0.3domain-specific language compilation · 0.3revision history analysis · 0.2type system design · 0.2soundness proof · 0.2optimality proof · 0.2word-aligned hybrid compression · 0.1word partitions · 0.1microrefactorings · 0.1dependency analysis · 0.1data flow analysis · 0.1temporal logic · 0.1dynamic analysis · 0.0bytecode instrumentation · 0.0
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2016 | QL: Object-oriented Queries on Relational DataabstractThis paper describes QL, a language for querying complex, potentially recursive data structures. QL compiles to Datalog and runs on a standard relational database, yet it provides familiar-looking object-oriented features such as classes and methods, reinterpreted in logical terms: classes are logical properties describing sets of values, subclassing is implication, and virtual calls are dispatched dynamically by considering the most specific classes containing the receiver. Furthermore, types in QL are prescriptive and actively influence program evaluation rather than just describing it. In combination, these features enable the development of concise queries based on reusable libraries, which are written in a purely declarative style, yet can be efficiently executed even on very large data sets. In particular, we have used QL to implement static analyses for various programming languages, which scale to millions of lines of code. Pavel Avgustinov, Oege de Moor, Michael Peyton Jones, Max Schäfer |
ECOOP | 2 |
| 2015 | Tracking Static Analysis Violations over Time to Capture Developer CharacteristicsabstractMany interesting questions about the software quality of a code base can only be answered adequately if fine-grained information about the evolution of quality metrics over time and the contributions of individual developers is known. We present an approach for tracking static analysis violations (which are often indicative of defects) over the revision history of a program, and for precisely attributing the introduction and elimination of these violations to individual developers. As one application, we demonstrate how this information can be used to compute ``fingerprints'' of developers that reflect which kinds of violations they tend to introduce or to fix. We have performed an experimental study on several large open-source projects written in different languages, providing evidence that these fingerprints are well-defined and capture characteristic information about the coding habits of individual developers. Pavel Avgustinov, Arthur I. Baars, Anders Starcke Henriksen, R. Greg Lavender, Galen Menzel, Oege de Moor, Max Schäfer, Julian Tibble |
ICSE (1) | 6 |
| 2012 | Synthesising graphics card programs from DSLsabstractOver the last five years, graphics cards have become a tempting target for scientific computing, thanks to unrivaled peak performance, often producing a runtime speed-up of x10 to x25 over comparable CPU solutions. Luke Cartey, Rune B. Lyngsø, Oege de Moor |
PLDI | 3 |
| 2011 | A memory efficient reachability data structure through bit vector compressionabstractWhen answering many reachability queries on a large graph, the principal challenge is to represent the transitive closure of the graph compactly, while still allowing fast membership tests on that transitive closure. Recent attempts to address this problem are complex data structures and algorithms such as Path-Tree and 3-HOP. We propose a simple alternative based on a novel form of bit-vector compression. Our starting point is the observation that when computing the transitive closure, reachable vertices tend to cluster together. We adapt the well-known scheme of word-aligned hybrid compression (WAH) to work more efficiently by introducing word partitions. We prove that the resulting scheme leads to a more compact data structure than its closest competitor, namely interval lists. In extensive and detailed experiments, this is confirmed in practice. We also demonstrate that the new technique can handle much larger graphs than alternative algorithms. Sebastiaan J. van Schaik, Oege de Moor |
SIGMOD Conference | 2 |
| 2010 | Specifying and implementing refactoringsabstractModern IDEs for object-oriented languages like Java provide support for a basic set of simple automated refactorings whose behaviour is easy to describe intuitively. It is, however, surprisingly difficult to specify their behaviour in detail. In particular, the popular precondition-based approach tends to produce somewhat unwieldy descriptions if advanced features of the object language are taken into account. This has resulted in refactoring implementations that are complex, hard to understand, and even harder to maintain, yet these implementations themselves are the only precise specification of many refactorings. We have in past work advocated a different approach based on several complementary notions of dependencies that guide the implementation, and on the concept of microrefactorings that structure it. We show in this work that these concepts are powerful enough to provide high-level specifications of many of the refactorings implemented in Eclipse. These specifications are precise enough to serve as the basis of a clean-room reimplementation of these refactorings that is very compact, yet matches Eclipse's for features and outperforms it in terms of correctness. Max Schäfer, Oege de Moor |
OOPSLA | 2 |
| 2010 | Type inference for datalog with complex type hierarchiesabstractType inference for Datalog can be understood as the problem of mapping programs to a sublanguage for which containment is decidable. To wit, given a program in Datalog, a schema describing the types of extensional relations, and a user-supplied set of facts about the basic types (stating conditions such as disjointness, implication or equivalence), we aim to infer an over-approximation of the semantics of the program, which should be expressible in a suitable sublanguage of Datalog. Max Schäfer, Oege de Moor |
POPL | 2 |
| 2009 | Stepping Stones over the Refactoring Rubicon
Max Schäfer, Mathieu Verbaere, Torbjörn Ekman 0001, Oege de Moor |
ECOOP | 4 |
| 2009 | Formalising and Verifying Reference Attribute Grammars in Coq
Max Schäfer, Torbjörn Ekman 0001, Oege de Moor |
ESOP | 3 |
| 2008 | Efficient local type inferenceabstractInference of static types for local variables in Java bytecode is the first step of any serious tool that manipulates bytecode, be it for decompilation, transformation or analysis. It is important, therefore, to perform that step as accurately and efficiently as possible. Previous work has sought to give solutions with good worst-case complexity. Ben Bellamy, Pavel Avgustinov, Oege de Moor, Damien Sereni |
OOPSLA | 3 |
| 2008 | Sound and extensible renaming for javaabstractDescriptive names are crucial to understand code. However, good names are notoriously hard to choose and manually changing a globally visible name can be a maintenance nightmare. Hence, tool support for automated renaming is an essential aid for developers and widely supported by popular development environments. Max Schäfer, Torbjörn Ekman 0001, Oege de Moor |
OOPSLA | 3 |
| 2008 | Type inference for datalog and its application to query optimisationabstractCertain variants of object-oriented Datalog can be compiled to Datalog with negation. We seek to apply optimisations akin to virtual method resolution (a well-known technique in compiling Java and other OO languages) to improve efficiency of the resulting Datalog programs. The effectiveness of such optimisations strongly depends on the precision of the underlying type inference algorithm. Previous work on type inference for Datalog has focussed on Cartesian abstractions, where the type of each field is computed separately. Such Cartesian type inference is inherently imprecise in the presence of field equalities. We propose a type system where equalities are tracked, and present a type inference algorithm. The algorithm is proved sound. We also prove that it is optimal for Datalog without negation, in the sense that the inferred type is as tight as possible. Extensive experiments with our type-based optimisations, in a commercial implementation of object-oriented Datalog, confirm the benefits of this non-Cartesian type inference algorithm. Oege de Moor, Damien Sereni, Pavel Avgustinov, Mathieu Verbaere |
PODS | 1 |
| 2008 | Adding magic to an optimising datalog compilerabstractThe magic-sets transformation is a useful technique for dramatically improving the performance of complex queries, but it has been observed that this transformation can also drastically reduce the performance of some queries. Successful implementations of magic in previous work require integration with the database optimiser to make appropriate decisions to guide the transformation (the sideways information passing strategy, or SIPS). Damien Sereni, Pavel Avgustinov, Oege de Moor |
SIGMOD Conference | 3 |
| 2007 | Making trace monitors feasibleabstractA trace monitor observes an execution trace at runtime; when it recognises a specified sequence of events, the monitor runs extra code. In the aspect-oriented programming community, the idea originatedas a generalisation of the advice-trigger mechanism: instead of matchingon single events (joinpoints), one matches on a sequence of events. The runtime verification community has been investigating similar mechanisms for a number of years, specifying the event patterns in terms of temporal logic, and applying the monitors to hardware and software. Pavel Avgustinov, Julian Tibble, Oege de Moor |
OOPSLA | 3 |
| 2007 | Object-oriented queries over software systems: (abstract of invited talk)abstractCode queries are useful for enforcing coding conventions, navigating a large code base, and for identifying locations to refactor. The program understanding community has long advocated the use of a relational database to facilitate such code queries [3, 9]. While the idea has found some uptake in industry [2, 11], relational queries over code have not yet found widespread use. Oege de Moor, Elnar Hajiyev, Mathieu Verbaere |
PEPM | 1 |
| 2007 | Semantics of static pointcuts in aspectJabstractIn aspect-oriented programming, one can intercept events by writing patterns called pointcuts. The pointcut language of the most popular aspect-oriented programming language, AspectJ, allows the expression of highly complex properties of the static program structure.We present the first rigorous semantics of the AspectJ pointcut language, by translating static patterns into safe ( i.e. range-restricted and stratified) Datalog queries. Safe Datalog is a logic language like Prolog, but it does not have data structures; consequently it has a straightforward least fixpoint semantics and all queries terminate.The translation from pointcuts to safe Datalog consists of a set of simple conditional rewrite rules, implemented using the Stratego system. The resulting queries are themselves executable with the CodeQuest system. We present experiments indicating that direct execution of our semantics is not prohibitively expensive. Pavel Avgustinov, Elnar Hajiyev, Neil Ongkingco, Oege de Moor, Damien Sereni, Julian Tibble, Mathieu Verbaere |
POPL | 4 |
| 2007 | On the Semantics of Matching Trace Monitoring Patterns
Pavel Avgustinov, Julian Tibble, Oege de Moor |
RV | 3 |
| 2006 | codeQuest: Scalable Source Code Queries with Datalog
Elnar Hajiyev, Mathieu Verbaere, Oege de Moor |
ECOOP | 3 |
| 2006 | JunGL: a scripting language for refactoringabstractRefactorings are behaviour-preserving program transformations, typically for improving the structure of existing code. A few of these transformations have been mechanised in interactive development environments. Many more refactorings have been proposed, and it would be desirable for programmers to script their own refactorings. Implementing such source-to-source transformations, however, is quite complex: even the most sophisticated development environments contain significant bugs in their refactoring tools.We present a domain-specific language for refactoring, named JunGL. It manipulates a graph representation of the program: all information about the program, including ASTs for its compilation units, variable binding, control flow and so on is represented in a uniform graph format. The language is a hybrid of a functional language (in the style of ML) and a logic query language (akin to Datalog). JunGL furthermore has a notion of demand-driven evaluation for constructing computed information in the graph, such as control flow edges. Borrowing from earlier work on the specification of compiler optimisations, JunGL uses so-called `path queries' to express dataflow properties.We motivate the design of JunGL via a number of non-trivial refactorings, and describe its implementation on the.NET platform. Mathieu Verbaere, Ran Ettinger, Oege de Moor |
ICSE | 3 |
| 2006 | Aspects and Data Refinement
Pavel Avgustinov, Eric Bodden, Elnar Hajiyev, Oege de Moor, Neil Ongkingco, Damien Sereni, Ganesh Sittampalam, Julian Tibble |
MPC | 4 |
| 2005 | abc: The AspectBench Compiler for AspectJ
Chris Allan, Pavel Avgustinov, Aske Simon Christensen, Laurie J. Hendren, Sascha Kuzins, Jennifer Lhoták, Ondrej Lhoták, Oege de Moor, Damien Sereni, Ganesh Sittampalam, Julian Tibble |
GPCE | 8 |
| 2005 | Adding trace matching with free variables to AspectJabstractAn aspect observes the execution of a base program; when certain actions occur, the aspect runs some extra code of its own. In the AspectJ language, the observations that an aspect can make are confined to the current action: it is not possible to directly observe the history of a computation.Recently, there have been several interesting proposals for new history-based language features, most notably by Douence et al. and by Walker and Viggers. In this paper, we present a new history-based language feature called tracematches that enables the programmer to trigger the execution of extra code by specifying a regular pattern of events in a computation trace. We have fully designed and implemented tracematches as a seamless extension of AspectJ.A key innovation in our tracematch approach is the introduction of free variables in the matching patterns. This enhancement enables a whole new class of applications in which events can be matched not only by the event kind, but also by the values associated with the free variables. We provide several examples of applications enabled by this feature.After introducing and motivating the idea of tracematches via examples, we present a detailed semantics of our language design, and we derive an implementation from that semantics. The implementation has been realised as an extension of the abc compiler for AspectJ. Chris Allan, Pavel Avgustinov, Aske Simon Christensen, Laurie J. Hendren, Sascha Kuzins, Ondrej Lhoták, Oege de Moor, Damien Sereni, Ganesh Sittampalam, Julian Tibble |
OOPSLA | 7 |
| 2005 | Optimising aspectJ
Pavel Avgustinov, Aske Simon Christensen, Laurie J. Hendren, Sascha Kuzins, Jennifer Lhoták, Ondrej Lhoták, Oege de Moor, Damien Sereni, Ganesh Sittampalam, Julian Tibble |
PLDI | 7 |
| 2004 | Measuring the dynamic behaviour of AspectJ programsabstractThis paper proposes and implements a rigorous method for studying the dynamic behaviour of AspectJ programs. As part of this methodology several new metrics specific to AspectJ programs are proposed and tools for collecting the relevant metrics are presented. The major tools consist of: (1) a modified version of the AspectJ compiler that tags bytecode instructions with an indication of the cause of their generation, such as a particular feature of AspectJ; and (2) a modified version of the *J dynamic metrics collection tool which is composed of a JVMPI-based trace generator and an analyzer which propagates tags and computes the proposed metrics. This dynamic propagation is essential, and thus this paper contributes not only new metrics, but also non-trivial ways of computing them. Bruno Dufour, Christopher Goard, Laurie J. Hendren, Oege de Moor, Ganesh Sittampalam, Clark Verbrugge |
OOPSLA | 4 |
| 2004 | Incremental execution of transformation specificationsabstractWe aim to specify program transformations in a declarative style, and then to generate executable program transformers from such specifications. Many transformations require non-trivial program analysis to check their applicability, and it is prohibitively expensive to re-run such analyses after each transformation. It is desirable, therefore, that the analysis information is incrementally updated.We achieve this by drawing on two pieces of previous work: first, Bernhard Steffen's proposal to use model checking for certain analysis problems, and second, John Conway's theory of language factors. The first allows the neat specification of transformations, while the second opens the way for an incremental implementation. The two ideas are linked by using regular patterns instead of Steffen's modal logic: these patterns can be viewed as queries on the set of program paths. Ganesh Sittampalam, Oege de Moor, Ken Friis Larsen |
POPL | 2 |
| 2003 | Compiling embedded languagesabstractFunctional languages are particularly well-suited to the interpretive implementations of Domain-Specific Embedded Languages (DSELs). We describe an implemented technique for producing optimizing compilers for DSELs, based on Kamin's idea of DSELs for program generation. The technique uses a data type of syntax for basic types, a set of smart constructors that perform rewriting over those types, some code motion transformations, and a back-end code generator. Domain-specific optimization results from chains of domain-independent rewrites on basic types. New DSELs are defined directly in terms of the basic syntactic types, plus host language functions and tuples. This definition style makes compilers easy to write and, in fact, almost identical to the simplest embedded interpreters. We illustrate this technique with a language Pan for the computationally intensive domain of image synthesis and manipulation. Conal Elliott, Sigbjørn Finne, Oege de Moor |
J. Funct. Program. | 3 |
| 2002 | Forwarding in Attribute Grammars for Modular Language Design
Eric Van Wyk, Oege de Moor, Kevin Backhouse, Paul Kwiatkowski |
CC | 2 |
| 2002 | Transforming the .NET intermediate language using path logic programmingabstractPath logic programming is a modest extension of Prolog for the specification of program transformations. We give an informal introduction to this extension, and we show how it can be used in coding standard compiler optimisations, and also a number of obfuscating transformations. The object language is the Microsoft .NET intermediate language (IL). Stephen Drape, Oege de Moor, Ganesh Sittampalam |
PPDP | 2 |
| 2001 | Imperative Program Transformation by Rewriting
David Lacey, Oege de Moor |
CC | 2 |
| 2001 | Higher-order matching for program transformation
Oege de Moor, Ganesh Sittampalam |
Theor. Comput. Sci. | 1 |
| 2000 | Container types categoricallyabstractA program derivation is said to be polytypic if some of its parameters are data types. Often these data types are container types, whose elements store data. Polytypic program derivations necessitate a general, non-inductive definition of ‘container (data) type’. Here we propose such a definition: a container type is a relator that has membership. It is shown how this definition implies various other properties that are shared by all container types. In particular, all container types have a unique strength, and all natural transformations between container types are strong. Paul F. Hoogendijk, Oege de Moor |
J. Funct. Program. | 2 |
| 1999 | Bridging the Algorithm Gap: A Linear-Time Functional Program for Paragraph Formatting
Oege de Moor, Jeremy Gibbons |
Sci. Comput. Program. | 1 |
| 1998 | Transformation in intentional programmingabstractIntentional programming is a new paradigm in software engineering that allows programming languages to be implemented in a highly extensible manner. In particular, the programmer can specify new abstractions that are specific to his problem domain, while simultaneously recording any domain specific optimizations that may apply to such new abstractions. This paper describes a system that implements intentional programming, focusing on the facilities for program transformation. The key difference with other approaches lies in the way the order of transformation is controlled: emphasis is placed on specifying that order in a compositional fashion, so that transformations are easily re-used. William Aitken, Brian Dickens, Paul Kwiatkowski, Oege de Moor, Charles Simonyi |
ICSR | 4 |
| 1997 | More Haste, Less Speed: Lazy Versus Eager EvaluationabstractNicholas Pippenger has recently given a problem that, under two simple restrictions, can be solved in linear time by an impure Lisp program, but requires Ω( n log n ) steps to be solved by any eager pure Lisp program. By showing how to solve the problem in linear time with a lazy functional program, we demonstrate that – for some problems at least – lazy evaluators are strictly more powerful than eager ones. Richard S. Bird, Geraint Jones, Oege de Moor |
J. Funct. Program. | 3 |
| 1996 | Generic Functional Programming with Types and RelationsabstractAbstract A generic functional program is one which is parameterised by datatype. By installing specific choices, for example lists or trees, different programs are obtained that are, nevertheless, abstractly the same. The purpose of this paper is to explore the possibility of deriving generic programs. Part of the theory of lists that deals with segments is recast as a theory about ‘segments’ in a wide class of datatypes, and then used to pose and solve a generic version of a well-known problem. Richard S. Bird, Oege de Moor, Paul F. Hoogendijk |
J. Funct. Program. | 2 |
| 1994 | Categories, Relations and Dynamic ProgrammingabstractDynamic programming is a strategy for solving optimisation problems. In this paper, we show how many problems that may be solved by dynamic programming are instances of the same abstract specification. This specification is phrased using the calculus of relations offered by topos theory. The main theorem underlying dynamic programming can then be proved by straightforward equational reasoning. The generic specification of dynamic programming makes use of higher-order operators on relations, akin to the fold operators found in functional programming languages. In the present context, a data type is modelled as an initial F-algebra, where F is an endofunctor on the topos under consideration. The mediating arrows from this initial F-algebra to other F-algebras are instances of fold – but only for total functions. For a regular category ε, it is possible to construct a category of relations Rel(ε). When a functor between regular categories is a so-called relator, it can be extended (in some canonical way) to a functor between the corresponding categories of relations. Applied to an endofunctor on a topos, this process of extending functors preserves initial algebras, and hence fold can be generalised from functions to relations. It is well-known that the use of dynamic programming is governed by the principle of optimality. Roughly, the principle of optimality says that an optimal solution is composed of optimal solutions to subproblems. In a first attempt, we formalise the principle of optimality as a distributivity condition. This distributivity condition is elegant, but difficult to check in practice. The difficulty arises because we consider minimum elements with respect to a preorder, and therefore minimum elements are not unique. Assuming that we are working in a Boolean topos, it can be proved that monotonicity implies distributivity, and this monotonicity condition is easy to verify in practice. Oege de Moor |
Math. Struct. Comput. Sci. | 1 |
| 1994 | An Algebraic Construction of Predicate Transformers
Paul H. B. Gardiner, Clare E. Martin, Oege de Moor |
Sci. Comput. Program. | 3 |
| 1993 | List PartitionsabstractAbstract By definition, a partition of a list is a division of that list into nonempty contiguous segments. Many programming and operations research problems can be specified in terms of list partitions, and we present a hierarchy of theorems for deriving programs from such specifications. Throughout, reasoning is conducted in an equational style using the calculus for program synthesis developed by Bird and Meertens. Richard S. Bird, Oege de Moor |
Formal Aspects Comput. | 2 |
| 1992 | Solving Optimisation Problems with Catamorphism
Richard S. Bird, Oege de Moor |
MPC | 2 |
| 1992 | An Algebraic Construction of Predicate Transformers
Paul H. B. Gardiner, Clare E. Martin, Oege de Moor |
MPC | 3 |
| 1992 | Inductive Data Types for Predicate Transformers
Oege de Moor |
Inf. Process. Lett. | 1 |