Source: http://www.applis.univ-tours.fr/theses/2009/isabelle.derose_3018.pdf