Source: https://www.cs.unm.edu/~williams/cs530/theorems6.pdf