**Mathematical induction** is a mathematical proof technique. It is essentially used to prove that a statement *P*(*n*) holds for every natural number *n* = 0, 1, 2, 3, . . . ; that is, the overall statement is a sequence of infinitely many cases *P*(0), *P*(1), *P*(2), *P*(3), . . . . Informal metaphors help to explain this technique, such as falling dominoes or climbing a ladder:

MATHEMATICAL INDUCTION PROVES THAT WE CAN CLIMB AS HIGH AS WE LIKE ON A LADDER, by proving that we can climb onto the bottom rung (the

basis) and that from each rung we can climb up to the next one (thestep).—Concrete Mathematics, page 3 margins.

A **proof by induction** consists of two cases. The first, the **base case** (or **basis**), proves the statement for *n =* 0 without assuming any knowledge of other cases. The second case, the **induction step**, proves that *if* the statement holds for any given case *n = k*, *then* it must also hold for the next case *n* = *k* + 1. These two steps establish that the statement holds for every natural number *n*.^{[3]} The base case does not necessarily begin with *n =* 0, but often with *n =* 1, and possibly with any fixed natural number *n = N*, establishing the truth of the statement for all natural numbers *n ≥ N*.

The method can be extended to prove statements about more general well-founded structures, such as trees; this generalization, known as structural induction, is used in mathematical logic and computer science. Mathematical induction in this extended sense is closely related to recursion. Mathematical induction is an inference rule used in formal proofs, and in some form is the foundation of all correctness proofs for computer programs.^{[4]}

Although its name may suggest otherwise, mathematical induction should not be confused with inductive reasoning as used in philosophy (see Problem of induction). The mathematical method examines infinitely many cases to prove a general statement, but does so by a finite chain of deductive reasoning involving the variable *n*, which can take infinitely many values