Reference. Algorithmics
Cite
Cites 202 works (12 here)
With notes (12)
The School of Squiggol: A History of the Bird–Meertens Formalism gibbons-2020-the
Relational algebra by way of adjunctions gibbons-2018-relational
Bulk types such as sets, bags, and lists are monads, and therefore support a notation for database queries based on comprehensions. This fact is the basis of much work on database query languages. The monadic structure easily explains most of standard relational algebra—specifically, selections and projections—allowing for an elegant mathematical foundation for those aspects of database query language design. Most, but not all: monads do not immediately offer an explanation of relational join or grouping, and hence important foundations for those crucial aspects of relational algebra are missing. The best they can offer is cartesian product followed by selection. Adjunctions come to the rescue: like any monad, bulk types also arise from certain adjunctions; we show that by paying due attention to other important adjunctions, we can elegantly explain the rest of standard relational algebra. In particular, graded monads provide a mathematical foundation for indexing and grouping, which leads directly to an efficient implementation, even of joins.
Adjoint folds and unfolds—An extended study hinze-2013-adjoint
Just do it: simple monadic equational reasoning gibbons-2011-just
Total parser combinators danielssonTotalParserCombinators2010
A monadic parser combinator library which guarantees termination of parsing, while still allowing many forms of left recursion, is described. The library’s interface is similar to those of many other parser combinator libraries, with two important differences: one is that the interface clearly specifies which parts of the constructed parsers may be infinite, and which parts have to be finite, using dependent types and a combination of induction and coinduction; and the other is that the parser type is unusually informative.
The library comes with a formal semantics, using which it is proved that the parser combinators are as expressive as possible. The implementation is supported by a machine-checked correctness proof.
The essence of the Iterator pattern gibbons-2009-the
The Iterator pattern gives a clean interface for element-by-element access to a collection, independent of the collection’s shape. Imperative iterations using the pattern have two simultaneous aspects: mapping and accumulating . Various existing functional models of iteration capture one or other of these aspects, but not both simultaneously. We argue that C. McBride and R. Paterson’s applicative functors (Applicative programming with effects, J. Funct. Program. , 18 (1): 1–13, 2008), and in particular the corresponding traverse operator, do exactly this, and therefore capture the essence of the Iterator pattern. Moreover, they do so in a way that nicely supports modular programming. We present some axioms for traversal, discuss modularity concerns and illustrate with a simple example, the wordcount problem.
Applicative programming with effects mcbride-2008-applicative
In this article, we introduce Applicative functors – an abstract characterisation of an applicative style of effectful programming, weaker than Monads and hence more widespread. Indeed, it is the ubiquity of this programming pattern that drew us to the abstraction. We retrace our steps in this article, introducing the applicative pattern by diverse examples, then abstracting it to define the Applicative type class and introducing a bracket notation that interprets the normal application syntax in the idiom of an Applicative functor. Furthermore, we develop the properties of applicative functors and the generic operations they support. We close by identifying the categorical structure of applicative functors and examining their relationship both with Monads and with Arrow.
Datatype-Generic Programming gibbons-2007-datatype
The view from the left mcbride-2004-the
Pattern matching has proved an extremely powerful and durable notion in functional programming. This paper contributes a new programming notation for type theory which elaborates the notion in various ways. First, as is by now quite well-known in the type theory community, definition by pattern matching becomes a more discriminating tool in the presence of dependent types, since it refines the explanation of types as well as values. This becomes all the more true in the presence of the rich class of datatypes known as inductive families (Dybjer, 1991). Secondly, as proposed by Peyton Jones (1997) for Haskell, and independently rediscovered by us, subsidiary case analyses on the results of intermediate computations, which commonly take place on the right-hand side of definitions by pattern matching, should rather be handled on the left. In simply-typed languages, this subsumes the trivial case of Boolean guards; in our setting it becomes yet more powerful. Thirdly, elementary pattern matching decompositions have a well-defined interface given by a dependent type; they correspond to the statement of an induction principle for the datatype. More general, user-definable decompositions may be defined which also have types of the same general form. Elementary pattern matching may therefore be recast in abstract form, with a semantics given by translation. Such abstract decompositions of data generalize Wadler’s (1987) notion of ‘view’. The programmer wishing to introduce a new view of a type , and exploit it directly in pattern matching, may do so via a standard programming idiom. The type theorist, looking through the Curry–Howard lens, may see this as proving a theorem , one which establishes the validity of a new induction principle for . We develop enough syntax and semantics to account for this high-level style of programming in dependent type theory. We close with the development of a typechecker for the simply-typed lambda calculus, which furnishes a view of raw terms as either being well-typed, or containing an error. The implementation of this view is ipso facto a proof that typechecking is decidable.
Polytypic values possess polykinded types hinze-2002-polytypic
Dependent types in practical programming xi-1999-dependent
Kleene algebra with tests kozen1997kleene
We introduce Kleene algebra with tests, an equational system for manipulating programs. We give a purely equational proof, using Kleene algebra with tests and commutativity conditions, of the following classical result: every while program can be simulated by a while program with at most one while loop. The proof illustrates the use of Kleene algebra with tests and commutativity conditions in program equivalence proofs.
External (190)
- Geographic wayfinders and space-time algebra (2019)
- A predicate transformer semantics for effects (functional pearl) (2019)
- Elements of algorithmic graph theory: An exercise in point-free reasoning (working document) (2019)
- Squiggol versus Squigol (private email) (2019)
- Embedding the refinement calculus in Coq (2018)
- An algebraic framework for minimum spanning tree problems (2018)
- Contributions to a computational theory of policy advice and avoidability (2017)
- Sequential decision problems, dependent types and generic solutions (2017)
- Non-associative Kleene Algebra and Temporal Logics (2017)
- Implementing a linear algebra approach to data processing (2017)
- Free delivery (functional pearl) (2016)
- Unifying structured recursion schemes: An extended study (2016)
- Vulnerability modelling with functional programming and dependent types (2016)
- From proposition to program (2016)
- Kleene algebras with domain (Archive of Formal Proofs) (2016)
- Stone algebras (Archive of Formal Proofs) (2016)
- Extended transitive separation logic (2015)
- Infinite executions of lazy and strict computations (2015)
- A linear algebra approach to OLAP (2015)
- An algebra of database preferences (2015)
- Propositions as types (2015)
- How to keep your neighbours in order (2014)
- Relation algebra (Archive of Formal Proofs) (2014)
- Analysis and synthesis of inductive families (2014)
- The algorithmics of solitaire-like games (2013)
- Understanding idiomatic traversals backwards and forwards (2013)
- Idris, a general-purpose dependently typed programming language: Design and implementation (2013)
- Programming and reasoning with algebraic effects and dependent types (2013)
- Concurrency and local reasoning under reverse exchange (2013)
- Correct-by-construction pretty-printing (2013)
- Dependently-typed programming in scientific computing (2013)
- Testing versus proving in climate impact research (2013)
- Modal Knowledge and Game Semirings (2013)
- An old new notation for elementary probability theory (2013)
- Kleene algebra (Archive of Formal Proofs) (2013)
- A cosmology of datatypes: Reusability and dependent types (2013)
- Dijkstra, Floyd and Warshall meet Kleene (2012)
- Less is more: Generic programming theory and practice (2012)
- Feature interactions, products, and composition (2011)
- Algebraic separation logic (2011)
- Concurrent Kleene Algebra and its Foundations (2011)
- Fixing Zeno gaps (2011)
- Supplementing product families with behaviour (2011)
- A generic deriving mechanism for Haskell (2010)
- The logic and handling of algebraic effects (2010)
- An algebra of hybrid systems (2009)
- Algebra of programming in Agda: Dependent types for relational program derivation (2009)
- Generic programming with fixed points for mutually recursive datatypes (2009)
- Geniaal programmeren–generic programming at Utrecht– (2009)
- Datatype-Generic Termination Proofs (2008)
- Algebraic Neighbourhood Logic (2008)
- Non-termination in idempotent semirings (2008)
- On automating the calculus of relations (2008)
- Comparing libraries for generic programming in Haskell (2008)
- Comonadic Notions of Computation (2008)
- Synthesis of Optimal Control Policies for Some Infinite-State Transition Systems (2008)
- A functional specification of effects (2008)
- Automated reasoning in Kleene algebra (2007)
- Kleene getting lazy (2007)
- Resources, concurrency, and local reasoning (2007)
- Beauty in the beast (2007)
- Functional program correctness through types (2007)
- Constructing universes for generic programming (2007)
- Towards a practical programming language based on dependent type theory (2007)
- Kleene algebra with domain (2006)
- Kleene under a modal demonic star (2006)
- wp Is wlp (2006)
- Polymorphism and separation in Hoare type theory (2006)
- Quantales and Temporal Logics (2006)
- Quantum Predicative Programming (2006)
- A type-correct, stack-safe, provably correct, expression compiler in Epigram (unpublished draft) (2006)
- Associated types with class (2005)
- Fixed-Point Characterisation of Winning Strategies in Impartial Games (2004)
- Termination in modal Kleene algebra (2004)
- Type-indexed data types (2004)
- Modal Kleene algebra and partial correctness (2004)
- Generic programming within dependently typed programming (2003)
- Tool Support for the Interactive Derivation of Formally Correct Functional Programs (2003)
- Scrap your boilerplate: A practical design pattern for generic programming (2003)
- Dependency-style Generic Haskell (2003)
- Generic Accumulations (2003)
- On the design of correct and optimal dynamical systems and games (2003)
- Universes for generic programs and proofs in dependent type theory (2003)
- Haskell 98 Language and Libraries: The Revised Report (2003)
- Algebra of Program Termination (2002)
- Unfolding pointer algorithms (2001)
- Local reasoning about programs that alter data structures (2001)
- Dr Seuss on parser monads (2001)
- Recursion schemes from comonads (2001)
- Separation and reduction (2000)
- On Hoare logic and Kleene algebra with tests (2000)
- Generalised folds for nested datatypes (1999)
- Specifications, programs, and total correctness (1999)
- Primitive (co)recursion and course-of-value (co)iteration, categorically (1999)
- Cayenne - a language with dependent types (1998)
- Refinement Calculus: A Systematic Introduction (1998)
- Planware: Domain-specific synthesis of high-performance schedulers (1998)
- Monadic parsing in Haskell (1998)
- A relational model for temporal logic (1998)
- The TAMPR Program Transformation System: Simplifying the Development of Numerical Software (1997)
- PolyP—a polytypic programming language extension (1997)
- Calculating With Pointer Structures (1997)
- A high-level derivation of global search algorithms (with constraint propagation) (1997)
- Algebra of Programming (1997)
- Deterministic, error-correcting combinator parsers (1996)
- Fixed-point calculus (1995)
- The ALF proof editor and its proof engine (1994)
- A Practical Theory of Programming (1993)
- Virtual data structures (1993)
- The Deductive Foundations of Computer Programming (1993)
- Paramorphisms (1992)
- The essence of functional programming (1992)
- The KBSA Requirements/specification Facet: ARIES (1991)
- Functional programming with bananas, lenses, envelopes and barbed wire (1991)
- Notions of computation and monads (1991)
- Data structures and program transformation (1990)
- Programming from Specifications (1990)
- Specification and Transformation of Programs (1990)
- KIDS: a semiautomatic program development system (1990)
- A functional theory of exceptions (1990)
- Comprehending monads (1990)
- Tupling and mutumorphisms (1990)
- The ABC Programmer’s Handbook (1990)
- Algebraic data types and program transformation (1990)
- Do-it-yourself type theory (1989)
- Lectures on Constructive Functional Programming (1989)
- The specification statement (1988)
- An exploration of the Bird-Meertens formalism (1988)
- Laws of programming (1987)
- A theoretical basis for stepwise refinement and the programming calculus (1987)
- The Munich Project CIP, Volume II: The Program Transformation System CIP-S (1987)
- A calculus of functions for program derivation (1987)
- A survey and classification of some program transformation approaches and techniques (1987)
- A categorical programming language (1987)
- An Abstracto reader prepared for IFIP WG 2.1 (1987)
- Transformational program development in a particular problem domain (1986)
- What are the new paradigms? (1986)
- An introduction to the theory of lists (1986)
- Algorithmics: Towards programming as a mathematical activity (1986)
- The Munich Project CIP (1985)
- Predicative programming Part I (1984)
- Predicative programming Part II (1984)
- Programs are predicates (1984)
- Structuring transformational developments: A case study based on earley's recognizer (1984)
- Transformational Derivation of Parsing Algorithms Executable on Parallel Architectures (1984)
- Program Construction by Transformations: A Family Tree of Sorting Programs (1983)
- Transformational programming - Applications to algorithms and systems (1983)
- An exercise in the transformational derivation of an efficient program by joint development of control and data structure (1983)
- Program Transformation Systems (1983)
- On the coherence of programming language and programming methodology (1983)
- Programming with transformations: An overview of the Munich CIP project (1983)
- Algorithmic Language and Program Development (1982)
- A System for Assisting Program Transformation (1982)
- Implementing specification freedoms (1982)
- Constructive Mathematics and Computer Programming (1982)
- From specifications to machine code: Program construction through formal reasoning (1982)
- On correct refinement of programs (1981)
- Some notational suggestions for transformational programming (1981)
- Further thoughts on Abstracto (1981)
- Research on knowledge-based programming and algorithm design (1981)
- POPART: producer of parsers and related tools: System builder’s manual (1981)
- Program developments as formal objects (1981)
- A Deductive Approach to Program Synthesis (1980)
- On the semantics of fair parallelism (1980)
- Synthesis: Dreams → Programs (1979)
- Abstracto 84: The next generation (1979)
- A system for developing programs by transformation (1979)
- On the correctness of refinement steps in program development (1978)
- Remarks on Abstracto (1978)
- A Transformation System for Developing Recursive Programs (1977)
- Letter to members of IFIP WG2.1 (1977)
- A Discipline of Programming (1976)
- On the transformational implementation approach to programming (1976)
- Programming as an evolutionary process (1976)
- An introduction to Transformation-Assisted Multiple Program Realization (tampr) system (1976)
- New Directions in Algorithmic Languages (1976) (1976)
- Regular Algebra Applied to Path-finding Problems (1975)
- The Mythical Man-Month (1975)
- Recursive Programming Techniques (1975)
- New Directions in Algorithmic Languages (1975) (1975)
- An automated programming system to facilitate the development of quality mathematical software (1974)
- Iterative systems: An algebraic approach (1972)
- An axiomatic basis for computer programming (1969)
- A politico-social history of ALGOL (1969)
- Assigning meanings to programs (1967)
- The Equivalence of Certain Computations (1966)
- The IFIP Working Group on ALGOL (1962)
- On the calculus of relations (1941)
- Vorlesungen über die Algebra der Logik, vol 3 (1895)
- Description of a notation for the logic of relatives, resulting from an amplification of the conceptions of Boole’s calculus of logic (1870)