Source: https://www.emse.fr/~zimmermann/Teaching/CSI/cours_CSI.pdf