Source: https://www.cse.msu.edu/~pramanik/teaching/courses/cse260/11s/lectures/proofs/SS10_CSE260_ProofMethods2.pdf