Source: https://ouebe.polytech.umontpellier.fr/pravo/cours/Logique/Polycops-pdf/Chap7.pdf