Source: https://inria.hal.science/hal-00841688/PDF/Livre2.pdf