Source: https://perso-sdt.univ-brest.fr/~jacdev/ens/cours_m2_1_NOCQUET.pdf