Source: http://perso.numericable.fr/jules.svartz/prepa/pdf/poly_caml.pdf