Proof by Cases
Suppose you want to prove that for every integer , the number is even. There is no single algebraic trick that handles all integers uniformly in an obvious way. But every integer is either even or odd. Each of those two possibilities can be checked separately. This is the essence of proof by cases: split the universe of possibilities into finitely many pieces that together cover everything. Then prove the desired conclusion separately in each piece. Proof by cases matters because many true statements do not have a single uniform argument. The reasoning genuinely differs depending on which "kind" of object you are looking at. Rather than being a weakness, this is often the most natural and transparent way to argue. The proof mirrors the structure of the problem itself. It exposes exactly why the claim is true in each regime. It is one of the most heavily used techniques in all of mathematics. It appears everywhere from elementary number theory and inequalities to geometry, combinatorics, and computer science correctness proofs. The subtlety in proof by cases is entirely logical, not computational. You must be certain that your cases are exhaustive — that they really do cover every possibility, with nothing left out. A proof by cases with a gap in its case list is not a partial proof. It is simply an invalid proof, because there could be an object satisfying none of the listed cases for which the conclusion fails. Cases need not be mutually exclusive (they are allowed to overlap). But they must jointly exhaust all possibilities. This article gives the precise logical justification for proof by cases via a tautology of propositional logic. It states and proves the general theorem. It works through two substantial examples with genuinely asymmetric case splits. It also shows via a counterexample exactly what goes wrong when the case list is not exhaustive. It builds on Direct Proof and prepares the ground for Proof of Biconditionals, where cases often appear in disguise as the two directions of an "if and only if."
- Proof by cases proves by splitting 's hypotheses into cases that jointly cover all possibilities.
- You then prove separately for each ; the cases need not be mutually exclusive, only exhaustive.
- The logical justification is the tautology .
- The single most common error is an incomplete case split — silently assuming a case exists that covers everything when it does not.
- Cases can be nested (sub-cases inside a case) and can come from a known dichotomy (even/odd, positive/negative/zero) or from casework you construct yourself.
- Key idea: to prove something true in general, prove it true in every possible situation, and be certain no situation was left out.
Where this lives today
Proof by cases is not a niche technique confined to introductory courses — it is load-bearing machinery across mathematics and its applications.
- Number theory: Countless divisibility and modular-arithmetic proofs (as in Example 1) split on residues mod ; Fermat's Little Theorem, quadratic reciprocity proofs, and classical Diophantine arguments all lean on exhaustive residue-class casework.
- Real analysis and inequalities: Absolute value arguments (Example 2), the triangle inequality, and epsilon-delta proofs frequently split on the sign or relative size of quantities.
- Geometry: Classical synthetic proofs split on whether points are collinear, whether angles are acute/right/obtuse, or whether a configuration is convex — genuinely different sub-arguments per case.
- Computer science and formal verification: Correctness proofs of algorithms routinely case-split on branches of an `if`/`else` statement or the outcome of a comparison; type-checking rules in programming language theory are proved sound by structural induction combined with case analysis on syntactic form.
- Discrete mathematics and combinatorics: The pigeonhole principle and many counting arguments proceed by exhaustively partitioning a finite set into cases and bounding or counting each separately.
- Cryptography: Security proofs for protocols frequently perform case analysis on adversarial strategies, showing that no matter which of finitely many attack patterns is attempted, a bound on success probability holds.
- Statistics and probability: The law of total probability, for an exhaustive partition of the sample space, is the probabilistic incarnation of exactly the same exhaustiveness principle used here.
Ask the tutor: How does proof by cases combine with proving the two directions of a biconditional, as in Proof of Biconditionals?
Let be a hypothesis (or the domain of discourse under consideration) and let be the statement to be proved. A proof by cases for the claim consists of: 1. A finite list of statements , called the cases. 2. A proof of the exhaustiveness claim
i.e. a proof that whenever holds, at least one of the cases holds. 3. For each , a direct proof of . The cases are not required to be pairwise mutually exclusive; the same object may satisfy several at once. What is required — and is the only thing that can invalidate the proof — is that the disjunction is guaranteed whenever holds.
Intuition
Think of the hypothesis as describing a set of objects (all integers, all real numbers, all triangles) about which you want to prove . A case split partitions — or at least covers — this set into regions. Proof by cases says: if you can show the region boundary lines are drawn so that every object falls into at least one region, and if holds throughout each region separately, then holds everywhere. The picture below shows this as a covering of a number line: the integers are covered by "even" and "odd," two overlapping-free but jointly exhaustive regions, and separately one might instead cover the reals by three overlapping regions "negative," "zero," "positive" used in an inequality argument.
The essential logical content is a disjunction elimination pattern from propositional logic: if you know , and you know both and , then you may conclude regardless of which of actually holds — because in either case follows. This is exactly how "or" is used on the left-hand side of an implication, and it generalizes immediately from two cases to any finite number of cases.
Let be statements (propositional formulas, or predicates over a common domain, all possibly depending on a free variable). Suppose: 1. (Exhaustiveness) is true. 2. (Case adequacy) For each , the implication is true. Then is true.
We argue at the level of propositional logic, treating as propositions (if they are predicates with a free variable ranging over a domain , fix an arbitrary and apply the argument below to the resulting propositions; since was arbitrary this yields the claim for all , which is the standard technique of Universal Generalization).
Step 1: A propositional tautology. We claim that the formula
is a tautology, i.e. true under every truth assignment to the propositional variables . To see this, suppose for contradiction that some truth assignment makes false. Since is an implication, this forces its antecedent to be true and its consequent to be false. The antecedent being true means, by definition of conjunction, that all of the following hold simultaneously:
Since is true, by definition of disjunction at least one disjunct is true; say is true for some particular index . But we also have true. An implication is true and is true forces true (this is the modus ponens tautology , itself checked directly by the truth table: the only row making true is , in which case is indeed true). Applying this with , , we conclude is true. This contradicts our assumption that is false. Hence no truth assignment makes false, so is a tautology. (this establishes Step 1)
Step 2: Chaining with . By hypothesis (1), is true, and by hypothesis (2), each is true. Fix any truth assignment for which is true. Since is true and is true, modus ponens gives that is true. Combined with the truth of each , the antecedent of from Step 1 is true. Since is a tautology it is true under this assignment, so (as is an implication whose antecedent is true) its consequent must be true as well, again by modus ponens. We have shown: whenever is true, is true. This is precisely the statement that is true.
Remark on the proof technique. The argument used here is a direct semantic verification (truth-table style case analysis on the truth values of the propositional variables themselves) to establish a tautology, followed by two applications of modus ponens. No result depending on proof by cases was used, so the argument is non-circular; it rests only on the basic definitions of and the modus ponens tautology, which is checked directly from the four-row truth table of .
∎If , , and are all true, then is true. In particular, taking to be any statement and (so that is the tautology "law of excluded middle," automatically satisfying exhaustiveness for any ), we get: if and , then is true outright. This is the common pattern "either holds or it doesn't; either way follows."
Worked examples
Example 1 (asymmetric three-way split, number theory). Claim. For every integer , the number is divisible by . Proof. Factor , a product of three consecutive integers . We will show by showing separately that divides this product and that divides it (and are coprime, so their product divides it too — we justify this subordinate fact below). Divisibility by . Among any two consecutive integers, one is even. Since and are consecutive, at least one of them is even, hence , hence . Divisibility by , by cases on . Every integer leaves remainder , , or upon division by ; this is the exhaustiveness step, justified by the division algorithm ( with uniquely determined). We consider the three cases.
- Case : . Then , so .
- Case : . Then , so , so .
- Case : . Then , so , so .
In every case , and since is guaranteed for every integer , we conclude always, by Proof by Cases (the theorem proved above). Combining. We now have and for every integer . Since , whenever two coprime integers both divide an integer , their product divides (this is a standard consequence of unique factorization / Bézout's identity, itself provable by direct proof and not requiring proof by cases). Hence divides for every integer . Notice the case split here was over remainders mod — a genuinely three-way, non-symmetric split — nested inside a divisibility argument that itself used a two-way parity split. This illustrates that cases can be nested: a case-by-case proof of one sub-claim () sits inside a larger direct argument.
Example 2 (asymmetric split driven by absolute values, inequalities). Claim. For all real numbers and ,
Proof. We use the case split on the sign of and the sign of separately, but exploit an asymmetric shortcut rather than checking all sign-combinations symmetrically, to show the method does not require a mechanically uniform grid of cases. First, a preliminary fact used repeatedly: for any real , we have . Indeed, if then , so holds with equality, and since . If then , so , giving ; and , giving . Either way . (This itself was a two-case proof of a lemma.) Applying this lemma to and and adding the inequalities:
So lies between and . Now we split into cases on the sign of — an exhaustive two-case split since every real number is or .
- Case : . Then , and we showed directly above, so .
- Case : . Then . From we get, multiplying both sides by (which reverses the inequality), . Hence .
Since is guaranteed (every real number is nonnegative or negative — exhaustive by trichotomy of the reals) and follows in each case, we conclude for all real . This example shows a case split reduced from a naive "four cases on signs of and " to a leaner two-case split on the sign of the sum , after a shared computation (the lemma) did the common work up front — a typical and desirable feature of well-organized casework: push shared reasoning before the split, and split only on what actually differs.
Consider the false claim: every integer satisfies . A tempting but broken "proof by cases": split into and .
- In case (): multiplying both sides of by gives . Correct.
- In case (): here is negative, so , and indeed . Correct.
Both individual case proofs are entirely valid. Yet the overall claim is false: take . Then and , so in fact holds numerically for too — so let's use a genuinely failing instance instead to make the logical gap bite: take the claim every integer satisfies (strict inequality) with the same two cases , .
- Case (): for , , so fails. So actually even case was proved incorrectly if asserted carelessly (one must restrict to for a strict inequality) — but set that aside and focus on the real point:
The list is not exhaustive: it omits entirely. Nothing in hypothesis (1) of the theorem — the exhaustiveness clause — is satisfied, since for neither nor holds. The theorem's conclusion therefore simply does not follow from the two case-proofs, no matter how correct each case-proof individually is. And indeed for the strict claim , the omitted case is exactly where the overall statement fails (). This shows precisely why hypothesis (1), exhaustiveness, cannot be dropped or merely assumed: a proof by cases with a gap in the case list proves nothing about the missing region, and reality is free to disagree with the conclusion exactly there. The two valid sub-proofs give zero information about ; only the (false, in this variant) exhaustiveness claim would have licensed extending the conclusion there.
Scope, edge cases & common traps
| Situation | What to check | Common mistake |
|---|---|---|
| Splitting on a dichotomy (even/odd, positive/negative) | The dichotomy is a genuine tautology or provable exhaustive disjunction over the domain | Forgetting a boundary value (e.g. omitting , or ) |
| Splitting on remainders mod | Division algorithm guarantees exactly one remainder in | Using cases but only checking of them |
| Cases overlap | This is fine — the theorem never required mutual exclusivity | Wasting effort trying to force cases to be disjoint when unnecessary |
| Nested cases | Each sub-case list must itself be exhaustive within its parent case | Treating a sub-case list as exhaustive globally when it was only exhaustive inside one branch |
| Infinitely many "cases" | Proof by cases as stated is for a finite list; infinite case lists typically need Mathematical Induction instead | Attempting an infinite case-by-case argument without induction or a uniform argument |
The mathematician behind it
Proof by cases has no single inventor — it is as old as deductive argument itself, embedded already in Euclid's Elements, where geometric configurations are routinely split according to whether a point lies inside, on, or outside a given figure. Its formal logical justification, however, crystallizes with the development of propositional logic.
Origins · 1 minGeorge Boole and how this was discovered
George Boole, a largely self-taught English mathematician and logician, developed in The Mathematical Analysis of Logic (1847) and An Investigation of the Laws of Thought (1854) an algebra for propositions in which conjunction, disjunction, and negation obey precise laws — the ancestor of the truth-table machinery used to certify tautologies like the one underlying proof by cases. Boole's algebraization of logic made it possible to verify, mechanically and exhaustively, that a disjunction-elimination pattern is universally valid rather than merely intuitively plausible.
Do the cases in a proof by cases have to be mutually exclusive?
No. The theorem underlying proof by cases only requires that the disjunction follows from the hypothesis — that is, every object satisfies at least one case. It never requires that an object satisfy at most one case. If cases overlap, the proof is not weakened at all: for an object satisfying two cases, say and , either sub-proof ( or ) already establishes for it. Mutual exclusivity is sometimes convenient for organizing a proof cleanly, but it is a stylistic choice, not a logical requirement.
How is proof by cases different from proof by contradiction or direct proof?
Direct Proof derives from via a single unbroken chain of implications. Proof by contradiction assumes (alongside ) and derives a logical absurdity. Proof by cases is a hybrid strategy: it does not avoid direct argument, but rather organizes it — you still give a direct sub-proof of inside each case, but you split the overall argument because no single uniform chain of implications from to presents itself. Many proofs combine all three: a case split where one or more branches are themselves handled by contradiction.
Can I use proof by cases with infinitely many cases, like one case per natural number?
Not directly in the form stated here, which is built from a finite disjunction and finitely many implications — this is essential to the tautology-checking argument in the proof, which relies on finite conjunction and disjunction. When you want to handle infinitely many cases indexed by (e.g., "for every , case holds"), the appropriate tool is Mathematical Induction, which handles the infinite case list via a base case plus an inductive step rather than by writing out infinitely many separate arguments.
What exactly goes wrong logically if my case list is not exhaustive?
The hypothesis "(exhaustiveness) " in the theorem is simply false, so the theorem's conclusion is not licensed by it at all — not "weakly supported," but entirely unproved. Concretely, there may exist an object satisfying but none of ; for that object none of your case-proofs say anything, and may fail for it even though it held in every case you did check. The counterexample above with omitting illustrates exactly this gap.
Is it better to make cases mutually exclusive or is overlap fine to leave in for simplicity?
Both are logically fine; it is purely a matter of style and clarity. Mutually exclusive cases (like even vs. odd) often make a proof easier to read because each object falls into exactly one branch, avoiding any concern about consistency across branches. Overlapping cases (like and , which overlap at ) are sometimes easier to state and verify, at the minor cost that an object satisfying both cases gets "proved twice," which is harmless. Choose whichever split makes each individual sub-proof cleanest.
How does proof by cases relate to the law of total probability or to programming "if/else" branches?
Both are direct structural analogues. The law of total probability, for an exhaustive, mutually exclusive partition of the sample space, computes a global probability by combining case-by-case (conditional) probabilities — exhaustiveness of the partition is exactly what proof by cases requires of . Similarly, correctness proofs for a program with branches (`if C1 ... else if C2 ... else ...`) must verify a postcondition holds along every branch, and the branches are exhaustive by construction (the `else` catches everything else) — a direct computational incarnation of the same logical pattern.
Why does the proof of the underlying tautology not itself use proof by cases, avoiding circularity?
The proof of the tautology in the Theorem's proof argues by reductio: assume some truth assignment falsifies , derive that this assignment must make both true and false, a contradiction, hence no falsifying assignment exists. This is a direct semantic argument about truth assignments and the definitions of , together with the modus ponens tautology (itself verified by an exhaustive but explicit four-row truth table, not by invoking "proof by cases" as a licensed inference rule). So the justification is built from more primitive logical facts, not from the very technique being justified — this is what makes the argument non-circular.