Higher-Order and Symbolic Computation

, Volume 24, Issue 3, pp 191-206

Open Access This content is freely available online to anyone, anywhere at any time.

A proof of Moessner’s theorem by coinduction

  • M. NiquiAffiliated withCentrum Wiskunde & Informatica
  • , J. J. M. M. RuttenAffiliated withCentrum Wiskunde & InformaticaRadboud Universiteit Nijmegen Email author 


We present a coinductive proof of Moessner’s theorem. This theorem describes the construction of the stream (1 n ,2 n ,3 n ,…) (for n≥1) out of the stream of positive natural numbers by repeatedly dropping and summing elements. Our formalisation consists of a direct translation of the operational description of Moessner’s procedure into the equivalence of—in essence—two functional programs. Our proof fully exploits the circularity that is implicitly present in Moessner’s procedure, and it is more elementary than existing proofs. As such, it serves as a non-trivial illustration of the relevance and power of coinduction.


Stream Stream bisimulation Coalgebra Coinduction Stream differential equation Stream calculus Moessner’s theorem