Source: https://hal.inria.fr/docs/00/15/67/24/PDF/A31.pdf