Source: https://web.lmd.jussieu.fr/~aslmd/teaching/LP211_POLY_2013_2014_spiga.pdf