Table 6
| Case | 1st Condition | 2nd Condition | 3rd Condition |
| 1 | T | T | T |
| 2 | F | T | T |
| 3 | T | F | T |
| 4 | F | F | T |
| 5 | T | T | F |
| 6 | F | T | F |
| 7 | T | F | F |
| 8 | F | F | F |
Instead of T’s and F’s, we would ordinarily use check-marks (✓) and crosses (✕), which, of course, have the same meaning. We may consider and study each case individually. In any event, we must make sure that the proposed contract or set of rules covers all the cases without conflicts or loopholes.
The number of possible cases that we have to consider doubles whenever one more condition is added. Clearly, it soon becomes too much work to consider each case individually, and so we must turn to a second method, thoughtful classifying and reasoning about classes of cases.
Now suppose that the number of conditions increases: 4 conditions give rise to 16 possible cases; 5, 6, 7, 8, 9, 10, ··· conditions give rise to 32, 64, 128, 256, 512, 1024, ··· cases respectively. Because of the large number of cases, we soon begin to make mistakes while reasoning about classes of cases. We need a more efficient way of knowing whether all cases are covered properly.