Open main menu

Bird–Meertens formalism

  (Redirected from Bird-Meertens Formalism)

The Bird–Meertens formalism (BMF) is a calculus for deriving programs from specifications (in a functional-programming setting) by a process of equational reasoning. It was devised by Richard Bird and Lambert Meertens as part of their work within IFIP Working Group 2.1.

It is sometimes referred to in publications as BMF, as a nod to Backus–Naur form. Facetiously it is also referred to as Squiggol, as a nod to ALGOL, which was also in the remit of WG 2.1, and because of the "squiggly" symbols it uses. A less-used variant name, but actually the first one suggested, is SQUIGOL.

Contents

Basic examples and notationsEdit

Map is a well-known second-order function that applies a given function to every element of a list; in BMF, it is written  :

 

Likewise, reduce is a function that collapses a list into a single value by repeated application of a binary operator. It is written / in BMF. Taking   as a suitable binary operator with neutral element e, we have

 

Using those two operators and the primitives   (as the usual addition), and   (for list concatenation), we can easily express the sum of all elements of a list, and the flatten function, as   and  , in currified notation. We have:

 
 

Similarly, writing   for functional composition and   for conjunction, it is easy to write a function testing that all elements of a list satisfy a predicate p, simply as  :

 

The homomorphism lemma and its applications to parallel implementationsEdit

A function h on lists is a list homomorphism if there exists an associative binary operator   and neutral element   such that the following holds:

 

The homomorphism lemma states that h is a homomorphism if and only if there exists an operator   and a function f such that  .

A point of great interest for this lemma is its application to the derivation of highly parallel implementations of computations. Indeed, it is trivial to see that   has a highly parallel implementation, and so does   — most obviously as a binary tree. Thus for any list homomorphism h, there exists a parallel implementation. That implementation cuts the list into chunks, which are assigned to different computers; each computes the result on its own chunk. It is those results that transit on the network and are finally combined into one. In any application where the list is enormous and the result is a very simple type – say an integer – the benefits of parallelisation are considerable. This is the basis of the map-reduce approach.

See alsoEdit

ReferencesEdit

  • Lambert Meertens (1986). "Algorithmics — Towards programming as a mathematical activity." (PDF). In J.W. de Bakker; M. Hazewinkel; J.K. Lenstra. Mathematics and Computer Science, CWI Monographs Volume 1. North-Holland. pp. 289–334.
  • Lambert Meertens; Richard Bird (1987). "Two Exercises Found in a Book on Algorithmics" (PDF). North-Holland.
  • Richard S. Bird (1989). "Algebraic Identities for Program Calculation" (PDF). The Computer Journal. 32 (2): 122&mdash, 126. doi:10.1093/comjnl/32.2.122.
  • Richard Bird; Oege de Moor (1997). Algebra of Programming, International Series in Computing Science, Vol. 100. Prentice Hall. ISBN 0-13-507245-X.