Source: https://www.i3s.unice.fr/master-info/assets/s2/methodes-avancees/proglin.pdf