Source: https://hal.inria.fr/docs/00/88/19/61/PDF/hal-00881961.pdf