Results 11  20
of
80
Sorting Morphisms
 3rd International Summer School on Advanced Functional Programming, volume 1608 of LNCS
, 1998
"... . Sorting algorithms can be classified in many different ways. The way presented here is by expressing the algorithms as functional programs and to classify them by means of their recursion patterns. These patterns on their turn can be classified as the natural recursion patterns that destruct or co ..."
Abstract

Cited by 27 (0 self)
 Add to MetaCart
. Sorting algorithms can be classified in many different ways. The way presented here is by expressing the algorithms as functional programs and to classify them by means of their recursion patterns. These patterns on their turn can be classified as the natural recursion patterns that destruct or construct a given datatype, the so called cata and anamorphisms respectively. We show that the selection of the recursion pattern can be seen as the major design decision, in most cases leaving no more room for more decisions in the design of the sorting algorithm. It is also shown that the use of alternative data structures may lead to new sorting algorithms. This presentation also serves as a gentle, lightweight, introduction into the various morphisms. 1 Introduction In this paper we present several well known sorting algorithms, namely insertion sort, straight selection sort, bubble sort, quick sort, heap sort and merge sort (see e.g. [Knu73, Wir76]) in a nonstandard way. We express...
Warm Fusion in Stratego: A Case Study in Generation of Program Transformation Systems
, 2000
"... Stratego is a domainspecic language for the specication of program transformation systems. The design of Stratego is based on the paradigm of rewriting strategies: userdenable programs in a little language of strategy operators determine where and in what order transformation rules are (automat ..."
Abstract

Cited by 23 (13 self)
 Add to MetaCart
Stratego is a domainspecic language for the specication of program transformation systems. The design of Stratego is based on the paradigm of rewriting strategies: userdenable programs in a little language of strategy operators determine where and in what order transformation rules are (automatically) applied to a program. The separation of rules and strategies supports modularity of specications. Stratego also provides generic features for specication of program traversals. In this paper we present a case study of Stratego as applied to a nontrivial problem in program transformation. We demonstrate the use of Stratego in eliminating intermediate data structures from (also known as deforesting) functional programs via the warm fusion algorithm of Launchbury and Sheard. This algorithm has been specied in Stratego and embedded in a fully automatic transformation system for kernel Haskell. The entire system consists of about 2600 lines of specication code, which bre...
Datatype Laws without Signatures
, 1996
"... ing from syntax. Conventionally an equation for algebra ' is just a pair of terms built from variables, the constituent operations of ' , and some fixed standard operations. An equation is valid if the two terms are equal for all values of the variables. We are going to model a syntactic term as a m ..."
Abstract

Cited by 22 (6 self)
 Add to MetaCart
ing from syntax. Conventionally an equation for algebra ' is just a pair of terms built from variables, the constituent operations of ' , and some fixed standard operations. An equation is valid if the two terms are equal for all values of the variables. We are going to model a syntactic term as a morphism that has the values of the variables as source. For example, the two terms ` x ' and ` x join x ' (with variable x of type tree ) are modeled by morphisms id and id \Delta id ; join of type tree ! tree . So, an equation for ' is modeled by a pair of terms (T '; T 0 ') , T and T 0 being mappings of morphisms which we call `transformers'. This faces us with the following problem: what properties must we require of an arbitrary mapping T in order that it model a classical syntactic Datatype Laws without Signatures 7 term? Or, rather, what properties of classical syntactic terms are semantically essential, and how can we formalise these as properties of a transformer T ? Of course...
Recursion Schemes from Comonads
, 2001
"... . Within the setting of the categorical approach to programming with total functions, a \manyinone" recursion scheme is introduced that neatly unies a variety of recursion schemes looking as diverging generalizations of the basic recursion scheme of iteration. The scheme is doubly generic: in addi ..."
Abstract

Cited by 21 (4 self)
 Add to MetaCart
. Within the setting of the categorical approach to programming with total functions, a \manyinone" recursion scheme is introduced that neatly unies a variety of recursion schemes looking as diverging generalizations of the basic recursion scheme of iteration. The scheme is doubly generic: in addition to behaving uniformly with respect to a functor determining an inductive type, it is also uniform in a comonad and a distributive law which together determine a particular recursion scheme for this inductive type. By way of examples, it is shown to subsume iteration, a scheme subsuming primitive recursion, and a scheme subsuming courseofvalue iteration.
Comparing Libraries for Generic Programming in Haskell
, 2008
"... Datatypegeneric programming is defining functions that depend on the structure, or “shape”, of datatypes. It has been around for more than 10 years, and a lot of progress has been made, in particular in the lazy functional programming language Haskell. There are more than 10 proposals for generic p ..."
Abstract

Cited by 20 (10 self)
 Add to MetaCart
Datatypegeneric programming is defining functions that depend on the structure, or “shape”, of datatypes. It has been around for more than 10 years, and a lot of progress has been made, in particular in the lazy functional programming language Haskell. There are more than 10 proposals for generic programming libraries or language extensions for Haskell. To compare and characterize the many generic programming libraries in a typed functional language, we introduce a set of criteria and develop a generic programming benchmark: a set of characteristic examples testing various facets of datatypegeneric programming. We have implemented the benchmark for nine existing Haskell generic programming libraries and present the evaluation of the libraries. The comparison is useful for reaching a common standard for generic programming, but also for a programmer who has to choose a particular approach for datatypegeneric programming.
Monadic Maps and Folds for Arbitrary Datatypes
 Memoranda Informatica, University of Twente
, 1994
"... Each datatype constructor comes equiped not only with a socalled map and fold (catamorphism), as is widely known, but, under some condition, also with a kind of map and fold that are related to an arbitrary given monad. This result follows from the preservation of initiality under lifting from the ..."
Abstract

Cited by 19 (0 self)
 Add to MetaCart
Each datatype constructor comes equiped not only with a socalled map and fold (catamorphism), as is widely known, but, under some condition, also with a kind of map and fold that are related to an arbitrary given monad. This result follows from the preservation of initiality under lifting from the category of algebras in a given category to a certain other category of algebras in the Kleisli category related to the monad.
Calculating Accumulations
, 1999
"... this paper, we shall formulate accumulations as higher order catamorphisms , and propose several general transformation rules for calculating accumulations (i.e., finding and manipulating accumulations) by calculationbased (rather than a searchbased) program transformation methods. Some examples ..."
Abstract

Cited by 16 (6 self)
 Add to MetaCart
this paper, we shall formulate accumulations as higher order catamorphisms , and propose several general transformation rules for calculating accumulations (i.e., finding and manipulating accumulations) by calculationbased (rather than a searchbased) program transformation methods. Some examples are given for illustration.
Induction and Recursion on Datatypes
, 1995
"... this paper we introduce a notion of induction over an arbitrary datatype and go on to show how the notion is used to establish unicity of a certain (broad) class of equations. Our overall goal is to develop a calculational theory of mathematical induction. That is we want to be able to calculate rel ..."
Abstract

Cited by 16 (7 self)
 Add to MetaCart
this paper we introduce a notion of induction over an arbitrary datatype and go on to show how the notion is used to establish unicity of a certain (broad) class of equations. Our overall goal is to develop a calculational theory of mathematical induction. That is we want to be able to calculate relations on which inductive arguments may be based using laws that relate admitting induction to the mechanisms for constructing datatypes. We also want to incorporate such calculations into a methodology for calculating inductive hypotheses rather than leaving their creation to inspired guesswork. This is a bold aim, in view of the vast amount of knowledge and experience that already exists on proof by induction, but recent advances in the role played by Galois connections in the calculus of relations have led us to speculate that significant progress can be made in the short term. The theory developed in this paper is general and not specific to any particular datatype. We define a notion of F reductivity (so called in order to avoid confusion with existing notions of inductivity), where F stands for a "relator", and show that F reductive relations always exist, whatever the value of F . We also give laws for constructing reductive relations from existing reductive relations. We conclude the paper by introducing the dual notion of F inductivity and briefly contrast it with F reductivity. The organisation of this note is as follows. In section 2 we give a very brief introduction to the relational calculus. In section 3 the notion of reductivity is defined. This notion is a generalisation of wellfoundedness, or inductivity. Then in section 4 we define a class of equations and prove that an equation from that class has a unique solution if one of its components enjoys a red...
Between Functions and Relations in Calculating Programs
, 1992
"... This thesis is about the calculational approach to programming, in which one derives programs from specifications. One such calculational paradigm is Ruby, the relational calculus developed by Jones and Sheeran for describing and designing circuits. We identify two shortcomings with derivations made ..."
Abstract

Cited by 15 (4 self)
 Add to MetaCart
This thesis is about the calculational approach to programming, in which one derives programs from specifications. One such calculational paradigm is Ruby, the relational calculus developed by Jones and Sheeran for describing and designing circuits. We identify two shortcomings with derivations made using Ruby. The first is that the notion of a program being an implementation of a specification has never been made precise. The second is to do with types. Fundamental to the use of type information in deriving programs is the idea of having types as special kinds of programs. In Ruby, types are partial equivalence relations (pers). Unfortunately, manipulating some formulae involving types has proved difficult within Ruby. In particular, the preconditions of the `induction' laws that are much used within program derivation often work out to be assertions about types; such assertions have typically been verified either by informal arguments or by using predicate calculus, rather than by ap...
From Dynamic Programming to Greedy Algorithms
 Formal Program Development, volume 755 of Lecture Notes in Computer Science
, 1992
"... A calculus of relations is used to reason about specifications and algorithms for optimisation problems. It is shown how certain greedy algorithms can be seen as refinements of dynamic programming. Throughout, the maximum lateness problem is used as a motivating example. 1 Introduction An optimisat ..."
Abstract

Cited by 14 (3 self)
 Add to MetaCart
A calculus of relations is used to reason about specifications and algorithms for optimisation problems. It is shown how certain greedy algorithms can be seen as refinements of dynamic programming. Throughout, the maximum lateness problem is used as a motivating example. 1 Introduction An optimisation problem can be solved by dynamic programming if an optimal solution is composed of optimal solutions to subproblems. This property, which is known as the principle of optimality, can be formalised as a monotonicity condition. If the principle of optimality is satisfied, one can compute a solution by decomposing the input in all possible ways, recursively solving the subproblems, and then combining optimal solutions to subproblems into an optimal solution for the whole problem. By contrast, a greedy algorithm considers only one decomposition of the argument. This decomposition is usually unbalanced, and greedy in the sense that at each step the algorithm reduces the input as much as poss...