Source: https://www.cs.ox.ac.uk/people/michael.wooldridge/teaching/soft-eng/lect07.pdf