Source: http://people.rennes.inria.fr/Olivier.Sentieys/teach/SlidesTNS.pdf