Source: https://hal.inria.fr/docs/00/89/53/28/PDF/hal-00895328.pdf