Source: https://www-lipn.univ-paris13.fr/~recanati/docs/L1-ProgC/Partie1.pdf