Source: https://www.ceremade.dauphine.fr/~detiliere/Cours/polycop_ADD.pdf