Source: https://pauillac.inria.fr/~cheno/taupe/cours.pdf