Skip to main content

The School of Squiggol

A History of the Bird–Meertens Formalism

  • Conference paper
  • First Online:
Formal Methods. FM 2019 International Workshops (FM 2019)

Part of the book series: Lecture Notes in Computer Science ((LNPSE,volume 12233))

Included in the following conference series:

Abstract

The Bird–Meertens Formalism, colloquially known as “Squiggol”, is a calculus for program transformation by equational reasoning in a function style, developed by Richard Bird and Lambert Meertens and other members of IFIP Working Group 2.1 for about two decades from the mid 1970s. One particular characteristic of the development of the Formalism is fluctuating emphasis on novel ‘squiggly’ notation: sometimes favouring notational exploration in the quest for conciseness and precision, and sometimes reverting to simpler and more rigid notational conventions in the interests of accessibility. This paper explores that historical ebb and flow.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 39.99
Price excludes VAT (USA)
  • Available as EPUB and PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 54.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Notes

  1. 1.

    Guido van Rossum, who worked on the ABC project in Amsterdam, was mentored by Meertens and went on to design Python [55] based on some of the ideas in ABC.

  2. 2.

    From its start, my own research career has been intimately entwined with WG2.1 and the BMF, although I came somewhat late to the party. Bird supervised my DPhil dissertation (1987–1991) [35], and Meertens was my external examiner. I have worked on and off with Bird ever since, and most of my research has been inspired by the BMF; I am Bird’s co-author on his forthcoming book [24]. I served as secretary of WG2.1 for thirteen years (1996–2009), during the Chairmanships of Doug Smith and Lambert Meertens, and then succeeded Meertens as Chair myself for the following six years (2009–2015).

  3. 3.

    It is fair to say that the Reports did not meet with universal acclaim. One reason for the mixed reception was the use of van Wijngaarden’s two-level grammar notation for describing the language, whereby a possibly infinite language grammar is generated by a finite meta-grammar. The Algol 68 experience has engendered a keen interest in notational issues within the Group ever since.

  4. 4.

    Indeed, the loop body in the first exponentiation program is a ‘specification statement’ in Morgan’s sense [49], albeit one without a frame.

  5. 5.

    In fact, Bird and Meertens had both been present at Meeting #27 in Wheeling in August 1980, although the meeting of minds evidently had to wait a bit longer.

  6. 6.

    Meertens’ preface in the Abstracto Reader, Meertens’ contemporary papers, and the WG2.1 minutes all record Bird’s paper under the title “Some Notational Suggestions...” [17]; but the technical report [16] is entitled “Notational Suggestions...”.

  7. 7.

    Applying g to every element of S and then f to every element of the result is the same as applying g then f to every element of S in a single pass.

  8. 8.

    Applying f to every element and then filtering to keep the results that satisfy P is the same as filtering first, using the predicate “P after f”, then applying f to every element that will subsequently satisfy P.

  9. 9.

    Publication of the proceedings of this conference seems to have taken frustratingly long: in a 1984 working paper [44] using the same notation, Meertens cites the Algorithmics paper [45] as appearing in the year “\({[]/}~{(1984{\le })\triangleleft }~\mathbb {U}\)”, that is, the arbitrary choice of any number at least 1984. The same joke appears in a 1985 working paper [12] but with a 1985 lower bound.

  10. 10.

    Nevertheless, Wile’s ‘sectioning’ notation (giving a binary operator one of its two arguments, as in the positivity predicate “\(({>}0)\)” and the reciprocal function “(1/)”) was discussed, and it persists today in Haskell.

  11. 11.

    In fact, Meertens says that he deliberately used a very small asterisk for ‘map’, looking from a distance or on a poor photocopy like a ragged dot, so as not to have to choose between the two notations.

  12. 12.

    Essentially the same canonical scheme is commonly used today in modern functional programming languages like Haskell:

    but for the signature of asymmetric ‘cons’ lists, rather than symmetric ‘cat’ lists. This again depends on lists being a free algebra, so the equations have a unique solution, namely the function being defined.

References

  1. Back, R.-J.: On correct refinement of programs. J. Comput. Syst. Sci. 23(1), 49–68 (1981)

    Article  MathSciNet  MATH  Google Scholar 

  2. Back, R.-J., von Wright, J.: Refinement Calculus: A Systematic Introduction. Graduate Texts in Computer Science. Springer, Heidelberg (1998). https://doi.org/10.1007/978-1-4612-1674-2

    Book  MATH  Google Scholar 

  3. Backhouse, R.: An exploration of the Bird-Meertens formalism. In: International Summer School on Constructive Algorithmics, Hollum, Ameland. STOP project: Also available as Technical report CS 8810, p. 1988. Groningen University, Department of Computer Science (1989)

    Google Scholar 

  4. Backus, J.W., et al.: Report on the algorithmic language ALGOL 60. Numer. Math. 2(1), 106–136 (1960)

    Article  MathSciNet  MATH  Google Scholar 

  5. Barron, D.W.: Christopher Strachey: a personal reminiscence. Comput. Bull. 2(5), 8–9 (1975)

    Google Scholar 

  6. Bauer, F.L.: Programming as an evolutionary process. In: International Conference on Software Engineering, pp. 223–234. IEEE (1976)

    Google Scholar 

  7. Brauer, F.L., et al.: The Munich Project CIP, Volume I: The Wide Spectrum Language CIP-L. LNCS, vol. 183. Springer, Heidelberg (1985). https://doi.org/10.1007/3-540-15187-7

    Book  MATH  Google Scholar 

  8. Bauer, F.L., et al.: The Munich Project CIP, Volume II: The Programme Transformation System CIP-S. LNCS, vol. 292. Springer, Heidelberg (1987). https://doi.org/10.1007/3-540-18779-0

    Book  MATH  Google Scholar 

  9. Bird, R.: “Algebra of Programming” as the textbook on Algorithmics. Private email to JG, February 2020

    Google Scholar 

  10. Bird, R., de Moor, O.: Algebra of Programming. Prentice-Hall, Upper Saddle River (1997)

    MATH  Google Scholar 

  11. Bird, R., de Moor, O.: Website for The Algebra of Programming (1997). http://www.cs.ox.ac.uk/publications/books/algebra/

  12. Bird, R., Meertens, L., Wile, D.: A common basis for algorithmic specification and development. IFIP WG2.1 Working Paper ARK-3 (1985)

    Google Scholar 

  13. Bird, R., Rabe, F.: How to calculate with nondeterministic functions. In: Hutton, G. (ed.) MPC 2019. LNCS, vol. 11825, pp. 138–154. Springer, Cham (2019). https://doi.org/10.1007/978-3-030-33636-3_6

    Chapter  Google Scholar 

  14. Bird, R.S.: Improving programs by the introduction of recursion. Commun. ACM 20(11), 856–863 (1977)

    Article  MathSciNet  MATH  Google Scholar 

  15. Bird, R.S.: Notes on recursion elimination. Commun. ACM 20(6), 434–439 (1977)

    Article  MATH  Google Scholar 

  16. Bird, R.S.: Notational suggestions for transformational programming. Technical report RCS 144, University of Reading, April 1981

    Google Scholar 

  17. Bird, R.S.: Some notational suggestions for transformational programming. Working Paper NIJ-3, IFIP WG2.1 (1981)

    Google Scholar 

  18. Bird, R.S.: The promotion and accumulation strategies in transformational programming. ACM Trans. Program. Lang. Syst. 6(4), 487–504 (1984)

    Article  MATH  Google Scholar 

  19. Bird, R.S.: An introduction to the theory of lists. Monograph PRG-56, Programming Research Group, University of Oxford, October 1986. Published in [27]

    Google Scholar 

  20. Bird, R.S.: Transformational programming and the paragraph problem. Sci. Comput. Program. 6, 159–189 (1986)

    Article  MATH  Google Scholar 

  21. Bird, R.S.: A calculus of functions for program derivation. Monograph PRG-64, Programming Research Group, University of Oxford, December 1987. Published in [62]

    Google Scholar 

  22. Bird, R.S.: Lectures on constructive functional programming. Monograph PRG-69, Programming Research Group, University of Oxford, September 1988. Published in [28]

    Google Scholar 

  23. Bird, R.S.: Algebraic identities for program calculation. Comput. J. 32(2), 122–126 (1989)

    Article  MathSciNet  Google Scholar 

  24. Bird, R.S., Gibbons, J.: Algorithm Design with Haskell. Cambridge University Press, Cambridge (2020, to appear)

    Google Scholar 

  25. Bird, R.S., Meertens, L.: Two exercises found in a book on algorithmics. In: Meertens, L. (ed.) Program Specification and Transformation, pp. 451–457. North-Holland (1987)

    Google Scholar 

  26. Boom, H.: Further thoughts on Abstracto. Working Paper ELC-9, IFIP WG2.1 (1981)

    Google Scholar 

  27. Broy, M. (ed.): Logic of Programming and Calculi of Discrete Design. NATO ASI Series F, vol. 36. Springer, Heidelberg (1987). https://doi.org/10.1007/978-3-642-87374-4

    Book  MATH  Google Scholar 

  28. Broy, M. (ed.): Constructive Methods in Computer Science. NATO ASI Series F, vol. 55. Springer, Heidelberg (1988). https://doi.org/10.1007/978-3-642-74884-4

    Book  Google Scholar 

  29. de Moor, O.: Categories, relations and dynamic programming. Ph.D. thesis, Programming Research Group, Oxford, April 1992. Available as Technical Monograph PRG-98

    Google Scholar 

  30. Dewar, R.: Letter to members of IFIP WG2.1, 26 July 1977. http://ershov-arc.iis.nsk.su/archive/eaindex.asp?did=29067

  31. Dewar, R.: Letter to members of IFIP WG2.1, 19 September 1979. http://ershov-arc.iis.nsk.su/archive/eaindex.asp?did=29096

  32. Freyd, P., Scedrov, A.: Categories, Allegories. Mathematical Library, vol. 39. North-Holland, Amsterdam (1990)

    MATH  Google Scholar 

  33. Geurts, L., Meertens, L.: Remarks on Abstracto. ALGOL Bull. 42, 56–63 (1978). Also in [46]

    Google Scholar 

  34. Geurts, L., Meertens, L., Pemberton, S.: The ABC Programmer’s Handbook. Prentice-Hall, Upper Saddle River (1990). ISBN 0-13-000027-2

    Google Scholar 

  35. Gibbons, J.: Algebras for tree algorithms. D. Phil. thesis, Programming Research Group, Oxford University (1991). Available as Technical Monograph PRG-94. ISBN 0-902928-72-4

    Google Scholar 

  36. Iverson, K.E.: A Programming Language. Wiley, New York (1962)

    Book  MATH  Google Scholar 

  37. Koster, C.H.A.: The making of Algol 68. In: Bjørner, D., Broy, M., Pottosin, I.V. (eds.) PSI 1996. LNCS, vol. 1181, pp. 55–67. Springer, Heidelberg (1996). https://doi.org/10.1007/3-540-62064-8_6

    Chapter  Google Scholar 

  38. Lindsey, C.H.: A history of Algol 68. In: HOPL-II: The Second ACM SIGPLAN Conference on History of Programming Languages, pp. 97–132, April 1993

    Google Scholar 

  39. Malcolm, G.: Algebraic data types and program transformation. Ph.D. thesis, Rijksuniversiteit Groningen, September 1990

    Google Scholar 

  40. Malcolm, G.: Data structures and program transformation. Sci. Comput. Program. 14, 255–279 (1990)

    Article  MathSciNet  MATH  Google Scholar 

  41. Meertens, L.: Abstracto 84: the next generation. In: Proceedings of the 1979 Annual Conference, pp. 33–39. ACM (1979)

    Google Scholar 

  42. Meertens, L.: Draft proposal for the B programming language. Technical report, Mathematisch Centrum, Amsterdam (1981)

    Google Scholar 

  43. Meertens, L.: Issues in the design of a beginners’ programming language. In: de Bakker, J.W., van Vliet, H. (eds.) Algorithmic Languages, pp. 167–184. Elsevier North-Holland, New York, July 1981

    Google Scholar 

  44. Meertens, L.: Some more examples of algorithmic developments. IFIP WG2.1 Working Paper ADP-7 (1984)

    Google Scholar 

  45. Meertens, L.: Algorithmics: towards programming as a mathematical activity. In: de Bakker, J.W., Hazewinkel, M., Lenstra, J.K. (eds.) Proceedings of the CWI Symposium on Mathematics and Computer Science, pp. 289–334. North-Holland (1986). https://ir.cwi.nl/pub/20634

  46. Meertens, L.: An Abstracto reader prepared for IFIP WG 2.1. Technical report CS-N8702, CWI, Amsterdam, April 1987

    Google Scholar 

  47. Meertens, L.: Squiggol versus Squigol. Private email to JG, September 2019

    Google Scholar 

  48. Meertens, L.G.L.T., Pemberton, S.: Description of B. SIGPLAN Not. 20(2), 58–76 (1985)

    Article  Google Scholar 

  49. Morgan, C.: The specification statement. ACM Trans. Program. Lang. Syst. 10(3), 403–419 (1988)

    Article  MATH  Google Scholar 

  50. Morgan, C.: Programming from Specifications. Prentice Hall, Upper Saddle River (1990)

    MATH  Google Scholar 

  51. Paige, R.: Transformational programming: applications to algorithms and systems. In: Wright, J.R., Landweber, L., Demers, A.J., Teitelbaum, T. (eds.) Principles of Programming Languages, pp. 73–87. ACM (1983)

    Google Scholar 

  52. Paige, R., Koenig, S.: Finite differencing of computable expressions. ACM Trans. Program. Lang. Syst. 4(3), 402–454 (1982)

    Article  MATH  Google Scholar 

  53. Peck, J.E.L.: Aad van Wijngaarden and the mathematisch centrum: a personal recollection. In: Alberts, G. (ed.) Conference on the History of ALGOL 68, volume AM-HN9301. CWI, Amsterdam (1993)

    Google Scholar 

  54. Pemberton, S.: A short introduction to the ABC language. SIGPLAN Not. 26(2), 11–16 (1991)

    Article  Google Scholar 

  55. Python Software Foundation. Python website (1997). https://www.python.org/

  56. Schuman, S.A. (ed.): New directions in algorithmic languages. Prepared for IFIP Working Group 2.1 on Algol, Institut de Recherche d’Informatique et d’Automatique (1975)

    Google Scholar 

  57. Schuman, S.A. (ed.): New directions in algorithmic languages. Prepared for IFIP Working Group 2.1 on Algol, Institut de Recherche d’Informatique et d’Automatique (1976)

    Google Scholar 

  58. Schwartz, J.T.: On programming: an interim report on the SETL project. Technical report, New York University (1974)

    Google Scholar 

  59. Schwartz, J.T., Dewar, R.B.K., Dubinsky, E., Schoenberg, E.: Programming with Sets: An Introduction to SETL. Texts and Monographs in Computer Science. Springer, Heidelberg (1986). https://doi.org/10.1007/978-1-4613-9575-1

    Book  MATH  Google Scholar 

  60. Spackman, S.: Boom and Abstracto. Private email to JG, October 2019

    Google Scholar 

  61. Spackman, S., Boom, H.: Foop, poof, and parsing. Working Paper 560 COR-15, IFIP WG2.1 (1987)

    Google Scholar 

  62. Turner, D.A. (ed.): Research Topics in Functional Programming. University of Texas at Austin, Addison-Wesley, Boston (1990)

    Google Scholar 

  63. van Wijngaarden, A., Mailloux, B.J., Peck, J.E.L., Koster, C.H.A.: Report on the algorithmic language ALGOL 68. Numer. Math. 14(2), 79–218 (1969)

    Google Scholar 

  64. van Wijngaarden, A., et al.: Revised report on the algorithmic language Algol 68. Acta Inform. 5(1–3), 1–236 (1975). https://doi.org/10.1007/BF00265077. Also appeared as Mathematical Centre Tract 50, CWI, Amsterdam, and published by Springer Verlag in 1976

  65. Wile, D.S.: A generative, nested-sequential basis for general purpose programming languages. Ph.D. thesis, Department of Computer Science, Carnegie-Mellon University, Pittsburgh, Pennsylvania, November 1973

    Google Scholar 

Download references

Acknowledgements

I am especially indebted to Richard Bird and Lambert Meertens: for much discussion about this work, and correcting some of my misunderstandings, but more importantly for being the inspiration for essentially my entire research career. I would also like to thank Doaitse Swierstra, Hendrik Boom, and Stephen Spackman for answering my many questions, and Cezar Ionescu, Dan Shiebler, the members of IFIP WG2.1, the participants at the workshop on the History of Formal Methods in Porto in October 2019, and the anonymous reviewers for their helpful comments and enthusiastic feedback.

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Jeremy Gibbons .

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2020 Springer Nature Switzerland AG

About this paper

Check for updates. Verify currency and authenticity via CrossMark

Cite this paper

Gibbons, J. (2020). The School of Squiggol. In: Sekerinski, E., et al. Formal Methods. FM 2019 International Workshops. FM 2019. Lecture Notes in Computer Science(), vol 12233. Springer, Cham. https://doi.org/10.1007/978-3-030-54997-8_2

Download citation

  • DOI: https://doi.org/10.1007/978-3-030-54997-8_2

  • Published:

  • Publisher Name: Springer, Cham

  • Print ISBN: 978-3-030-54996-1

  • Online ISBN: 978-3-030-54997-8

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics