Source: https://hal.inria.fr/docs/00/88/67/62/PDF/hal-00886762.pdf