Source: http://informatica.uv.es/iiguia/2000/IPI/libro/chapter2cgc.pdf