Source: https://people.mio.osupytheas.fr/~petrenko/TEACHING/OPCB343/OPCB343_chap2.pdf