See https://lifeware.inria.fr/wiki/Fages/Teaching/C2-4-1.htm