An introduction to the theory of lists
Proceedings of the NATO Advanced Study Institute on Logic of programming and calculi of discrete design
Infinite objects in type theory
TYPES '93 Proceedings of the international workshop on Types for proofs and programs
Generating power of lazy semantics
Theoretical Computer Science - Special volume on computer algebra
The art of computer programming, volume 3: (2nd ed.) sorting and searching
The art of computer programming, volume 3: (2nd ed.) sorting and searching
The associativity of equivalence and the Towers of Hanoi problem
Information Processing Letters - Special issue in honor of Edsger W. Dijkstra
Information Processing Letters - Special issue in honor of Edsger W. Dijkstra
Communication and Concurrency
Introduction to Functional Programming
Introduction to Functional Programming
An Extensional Characterization of Lambda-Lifting and Lambda-Dropping
FLOPS '99 Proceedings of the 4th Fuji International Symposium on Functional and Logic Programming
MPC '98 Proceedings of the Mathematics of Program Construction
Behavioural differential equations: a coinductive calculus of streams, automata, and power series
Theoretical Computer Science
Mathematical Structures in Computer Science
Perfect trees and bit-reversal permutations
Journal of Functional Programming
Journal of Functional Programming
A coinductive calculus of streams
Mathematical Structures in Computer Science
Proof Methods for Corecursive Programs
Fundamenta Informaticae - Program Transformation: Theoretical Foundations and Basic Techniques. Part 1
Applicative programming with effects
Journal of Functional Programming
Functional pearl: streams and unique fixed points
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
The worker/wrapper transformation
Journal of Functional Programming
Journal of Functional Programming
A coinductive calculus of binary trees
Information and Computation
Representations of first order function types as terminal coalgebras
TLCA'01 Proceedings of the 5th international conference on Typed lambda calculi and applications
Sampling, splitting and merging in coinductive stream calculus
MPC'10 Proceedings of the 10th international conference on Mathematics of program construction
AMAST'10 Proceedings of the 13th international conference on Algebraic methodology and software technology
Scans and convolutions: a calculational proof of Moessner's theorem
IFL'08 Proceedings of the 20th international conference on Implementation and application of functional languages
Proving the unique fixed-point principle correct: an adventure with category theory
Proceedings of the 16th ACM SIGPLAN international conference on Functional programming
Adjoint folds and unfolds-An extended study
Science of Computer Programming
Hi-index | 0.00 |
This paper shows how to reason about streams concisely and precisely. Streams, infinite sequences of elements, live in a coworld: they are given by a coinductive datatype, operations on streams are implemented by corecursive programs, and proofs are typically concocted using coinduction. This paper offers an alternative to coinduction. Suitably restricted, stream equations possess unique solutions. This property gives rise to a simple and attractive proof technique, essentially bringing equational reasoning to the coworld. We redevelop the theory of recurrences, finite calculus and generating functions using streams and stream operators, building on the cornerstone of unique solutions. The paper contains a smörgåsbord of examples: we study recursion elimination, investigate the binary carry sequence, explore Sprague-Grundy numbers and present two proofs of Moessner's Theorem. The calculations benefit from the rich structure of streams. As the type of streams is an applicative functor we can effortlessly lift operations and their properties to streams. In combination with Haskell's facilities for overloading, this greatly contributes to conciseness of notation. The development is indeed constructive: streams and stream operators are implemented in Haskell, usually by one-liners. The resulting calculus or library, if you wish, is elegant and fun to use.