Source: http://www.iro.umontreal.ca/~sahraouh/cours/ift3030/05_alg_rel.pdf