A Tutorial on Co-induction and Functional Programming

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.

[1]  Richard S. Bird,et al.  Introduction to functional programming , 1988, Prentice Hall International series in computer science.

[2]  Andrew M. Pitts,et al.  A Fully Abstract Translation between a Lambda-Calculus with Reference Types and Standard ML , 1995, TLCA.

[3]  C.-H. Luke Ong,et al.  Full Abstraction in the Lazy Lambda Calculus , 1993, Inf. Comput..

[4]  Scott F. Smith From Operational to Denotational Semantics , 1991, MFPS.

[5]  Peter Aczel,et al.  An Introduction to Inductive Definitions , 1977 .

[6]  Andrew D. Gordon Bisimilarity as a theory of functional programming , 1995, MFPS.

[7]  Robin Milner,et al.  Fully Abstract Models of Typed lambda-Calculi , 1977, Theor. Comput. Sci..

[8]  Bard Bloom Can LCF be topped? Flat lattice models of typed lambda calculus , 1988, [1988] Proceedings. Third Annual Information Symposium on Logic in Computer Science.

[9]  Matthias Felleisen,et al.  Control operators, the SECD-machine, and the λ-calculus , 1987, Formal Description of Programming Concepts.

[10]  G.D. Plotkin,et al.  LCF Considered as a Programming Language , 1977, Theor. Comput. Sci..

[11]  David Sands,et al.  Operational Theories of Improvement in Functional Languages (Extended Abstract) , 1991, Functional Programming.

[12]  Roy L. Crole,et al.  A Sound Metalogical Semantics for Input/Output Effects , 1994, CSL.

[13]  H. Luke Ong,et al.  Non-Determinism in a Functional Setting (Extended Abstract) , 1993 .

[14]  Eike Ritter Calculus with Reference Types and Standard ML , 1994 .

[15]  G. Winskel The formal semantics of programming languages , 1993 .

[16]  David Turner,et al.  Research topics in functional programming , 1990 .

[17]  Herbert P. Sander A logic of functional programs with an application to concurrency , 1992 .

[18]  Robin Milner,et al.  Communication and concurrency , 1989, PHI Series in computer science.

[19]  Andrew Keith Moran Natural semantics for non-determinism , 1994 .

[20]  H. Keisler,et al.  Handbook of mathematical logic , 1977 .

[21]  Andrew Donald Gordon,et al.  Functional programming and input/output , 1995 .

[22]  James H. Morris,et al.  Lambda-calculus models of programming languages. , 1969 .

[23]  I. Stark,et al.  On the Observable Properties of Higher Order Functions that Dynamically Create Local Names (Preliminary Report) , 1993 .

[24]  David Park,et al.  Concurrency and Automata on Infinite Sequences , 1981, Theoretical Computer Science.

[25]  Brian A. Davey,et al.  An Introduction to Lattices and Order , 1989 .

[26]  Douglas J. Howe Equality in lazy computation systems , 1989, [1989] Proceedings. Fourth Annual Symposium on Logic in Computer Science.

[27]  Andrew M. Pitts,et al.  A co-Induction Principle for Recursively Defined Domains , 1994, Theor. Comput. Sci..

[28]  C.-H.L. Ong,et al.  Correspondence between operational and denotational semantics: the full abstraction problem for PCF , 1995, LICS 1995.