Structural recursion as a query language

Val Breazu-Tannen, Peter Buneman, Shamim A. Naqvi

1992 · 120 citations · 13 references

Concepts

TL;DR

Programming is performed in a nicely typed lambda calculus, ensuring that relation transformers are total maps from finite relations to finite relations, mirroring relational algebra. The authors propose a paradigm that balances relational algebra’s simplicity with unrestricted language expressiveness, emphasizing that query implementation matters as much as feasibility and anticipating favorable optimization prospects. The core engine of the paradigm is structural recursion on sets, implemented within the typed lambda calculus. Structural recursion attains relational algebra’s expressiveness, scales to complex‑object query languages, enables efficient transitive‑closure and set‑to‑set transformations within a flexible type system, and promises finer‑grained programming that should improve optimization.

Abstract

We propose a programming paradigm that tries to get close to both the semantic simplicity of relational algebra, and the expressive power of unrestricted programming languages. Its main computational engine is structural recursion on sets. All programming is done within a “nicely” typed lambda calculus, as in Machiavelli [OBB89]. A guiding principle is that how queries are implemented is as important as whether they can be implemented. As in relational algebra, the meaning of any relation transformer is guaranteed to be a total map taking finite relations to finite relations. A naturally restricted class of programs written with structural recursion has precisely the expressive power of the relational algebra. The same programming paradigm scales up, yielding query languages for the complex-object model [AB89]. Beyond that, there are, for example, efficient programs for transitive closure and we are also able to write programs that move out of sets, and then perhaps back to sets, as long as we stay within a (quite flexible) type system. The uniform paradigm of the language suggests positive expectations for the optimization problem. In fact, structural recursion yields finer grain programming therefore we expect that lower-level, and therefore better optimization will be feasible.

References

13