Skip to main content

A Tutorial on Co-induction and Functional Programming

  • Conference paper
Book cover Functional Programming, Glasgow 1994

Part of the book series: Workshops in Computing ((WORKSHOPS COMP.))

Abstract

Co-induction is an important tool for reasoning about unbounded structures. This tutorial explains the foundations of co-induction, and shows how it justifies intuitive arguments about lazy streams, of central importance to lazy functional programmers. We explain from first principles a theory based on a new formulation of bisimilarity for functional programs, which coincides exactly with Morris-style contextual equivalence. We show how to prove properties of lazy streams by co-induction and derive Bird and Wadler’s Take Lemma, a well-known proof technique for lazy streams.

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 84.99
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 109.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

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  • Abramsky, S. ( 1987, October 5). Domain Theory and the Logic of Observable Properties. Ph. D. thesis, Queen Mary College, University of London.

    Google Scholar 

  • Abramsky, S. and L. Ong (1993). Full abstraction in the lazy lambda calculus. Information and Computation 105, 159–267.

    Google Scholar 

  • Aczel, P. (1977). An introduction to inductive definitions. In J. Barwise (Ed.), Handbook of Mathematical Logic, pp. 739–782. North-Holland.

    Google Scholar 

  • Bird, R. and P. Wadler (1988). Introduction to Functional Programming. Prentice-Hall.

    Google Scholar 

  • Bloom, B. (1988). Can LCF be topped? Flat lattice models of typed lambda calculus. In Proceedings 3rd LICS, pp. 282–295.

    Google Scholar 

  • Crole, R. L. and A. D. Gordon (1994, September). A sound metalogical semantics for input/output effects. In Computer Science Logic’94, Kazimierz, Poland. Proceedings to appear in Springer LNCS.

    Google Scholar 

  • Davey, B. A. and H. A. Priestley (1990). Introduction to Lattices and Order. Cambridge University Press.

    Google Scholar 

  • Felleisen, M. and D. Friedman (1986). Control operators, the SECD-machine, and the A-calculus. In Formal Description of Programming Concepts III, pp. 193–217. North-Holland.

    Google Scholar 

  • Gordon, A. D. (1994a). Bisimilarity as a theory of functional programming. Submitted for publication.

    Google Scholar 

  • Gordon, A. D. (1994b). Functional Programming and Input/Output. Cambridge University Press. Revision of 1992 PhD dissertation.

    Google Scholar 

  • Howe, D. J. (1989). Equality in lazy computation systems. In Proceedings 4th LICS, pp. 198–203.

    Google Scholar 

  • Hughes, J. and A. Moran (1993, June). Natural semantics for non-determinism. In Proceedings of El Wintermöte, pp. 211–222. Chalmers PMG. Available as Report 73.

    Google Scholar 

  • Milner, R. (1977). Fully abstract models of typed lambda-calculi. TCS 4, 1–23.

    Google Scholar 

  • Milner, R. (1989). Communication and Concurrency. Prentice-Hall.

    Google Scholar 

  • Morris, J. H. ( 1968, December). Lambda-Calculus Models of Programming Languages. Ph. D. thesis, MIT.

    Google Scholar 

  • Ong, C.-H. L. (1993, June). Non-determinism in a functional setting (extended abstract). In Proceedings 8th LICS, pp. 275–286.

    Google Scholar 

  • Ong, C.-H. L. (1994, January). Correspondence between operational and denotational semantics: The full abstraction problem for PCF. Submitted to Handbook of Logic in Computer Science Volume 3, OUP 1994.

    Google Scholar 

  • Park, D. (1981, March). Concurrency and automata on infinite sequences. In P. Deussen (Ed.), Theoretical Computer Science: 5th GI-Conference, Volume 104 of Lecture Notes in Computer Science, pp. 167–183. Springer-Verlag.

    Google Scholar 

  • Pitts, A. and I. Stark (1993, June). On the observable properties of higher order functions that dynamically create local names (preliminary report). In SIPL’93, pp. 31–45.

    Google Scholar 

  • Pitts, A. M. (1994). A co-induction principle for recursively defined domains. TCS 124, 195–219.

    Google Scholar 

  • Plotkin, G. D. (1977). LCF considered as a programming language. TCS 5, 223–255.

    Google Scholar 

  • Ritter, E. and A. M. Pitts (1994, September). A fully abstract translation between a A-calculus with reference types and Standard ML. To appear in TLCA’95.

    Google Scholar 

  • Sander, H. (1992). A Logic of Functional Programs with an Application to Concurrency. Ph. D. thesis, Chalmers PMG.

    Google Scholar 

  • Sands, D. (1992). Operational theories of improvement in functional languages (extended abstract). In Functional Programming, Glasgow 1991, Workshops in Computing, pp. 298–311. Springer-Verlag.

    Google Scholar 

  • Sands, D. (1994, May). Total correctness and improvement in the transformation of functional programs (1st draft). DIKU, University of Copenhagen.

    Google Scholar 

  • Smith, S. F. (1991). From operational to denotational semantics. In MFPS VII, Pittsburgh, Volume 598 of Lecture Notes in Computer Science, pp. 54–76. Springer-Verlag.

    Google Scholar 

  • Turner, D. (Ed.) (1990). Research Topics in Functional Programming. Addison-Wesley.

    Google Scholar 

  • Winskel, G. (1993). The Formal Semantics of Programming Languages. MIT Press, Cambridge, Mass.

    MATH  Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 1995 Springer-Verlag London

About this paper

Cite this paper

Gordon, A.D. (1995). A Tutorial on Co-induction and Functional Programming. In: Hammond, K., Turner, D.N., Sansom, P.M. (eds) Functional Programming, Glasgow 1994. Workshops in Computing. Springer, London. https://doi.org/10.1007/978-1-4471-3573-9_6

Download citation

  • DOI: https://doi.org/10.1007/978-1-4471-3573-9_6

  • Publisher Name: Springer, London

  • Print ISBN: 978-3-540-19914-4

  • Online ISBN: 978-1-4471-3573-9

  • eBook Packages: Springer Book Archive

Publish with us

Policies and ethics