CSE 311 Lecture 17:
Strong Induction

Emina Torlak and Kevin Zatloukal

Topics

Midterm review on Sunday 3-5pm in SAV 260
Bring questions!
Induction
A brief review of Lecture 16.
Induction starting at any integer
Proving theorems about all integers $n\geq b$ for some $b\in\mathbb{Z}$.
Strong induction
Induction with a stronger hypothesis.
Using strong induction
An example proof and when to use strong induction.
Recursively defined functions
Recursive function definitions and examples.

Midterm review on Sunday 3-5pm in SAV 260

Bring questions!

Induction

A brief review of Lecture 16.

A template for proofs by induction

① Let $P(n)$ be [ definition of $P(n)$ ].
We will show that $P(n)$ is true for every integer $n\geq 0$ by induction.
② Base case ($n=0$):
[ Proof of $P(0)$. ]
③ Inductive hypothesis:
Suppose that $P(k)$ is true for an arbitrary integer $k\geq 0$.
④ Inductive step:
We want to prove that $P(k+1)$ is true.
[ Proof of $P(k+1)$. This proof must invoke the inductive hypothesis. ]
⑤ The result follows for all $n\geq 0$ by induction.
 

Induction$\rule{P(0); \forall k. P(k)\rightarrow P(k+1)}{\forall n. P(n)}$

Induction starting at any integer

Proving theorems about all integers $n\geq b$ for some $b\in\mathbb{Z}$.

Changing the start line

How can we prove $P(n)$ for all integers $n\geq b$ for some integer $b$?

Define a predicate $Q(n) = P(n+b)$ for all $n\geq0$.
Then $(\forall n. Q(n))\equiv(\forall n \geq b. P(n))$.
Use ordinary induction to prove $Q$:
Prove $Q(0) \equiv P(b)$.
Prove $(\forall k. Q(k)\rightarrow Q(k+1)) \equiv (\forall k\geq b. P(k)\rightarrow P(k+1))$.
This gives us a proof of $P$.
 

By convention, we don’t define $Q$ explicitly. Instead, we modify our proof template to account for the non-zero base case $b$.

Inductive proofs for any base case $b\in\Z$

① Let $P(n)$ be [ definition of $P(n)$ ].
We will show that $P(n)$ is true for every integer $n\geq b$ by induction.
② Base case ($n = b$):
[ Proof of $P(b)$. ]
③ Inductive hypothesis:
Suppose that $P(k)$ is true for an arbitrary integer $k\geq b$.
④ Inductive step:
We want to prove that $P(k+1)$ is true.
[ Proof of $P(k+1)$. This proof must invoke the inductive hypothesis. ]
⑤ The result follows for all $n\geq b$ by induction.
 

Example: prove $3^n \geq n^2 + 3$ for all $n\geq 2$

① Let $P(n)$ be $3^n \geq n^2 + 3$.
We will show that $P(n)$ is true for every integer $n\geq 2$ by induction.
② Base case ($n = 2$):
$3^2 = 9 \geq 7 = 4 + 3 = 2^2 + 3$ so $P(2)$ is true.
③ Inductive hypothesis:
Suppose that $P(k)$ is true for an arbitrary integer $k\geq 2$.
④ Inductive step:
We want to prove that $P(k+1)$ is true, i.e., $3^{(k+1)} \geq (k+1)^2 + 3$ $=$ $k^2 + 2k + 4$. Note that $3^{(k+1)} = 3($$3^k$$)$ $\geq$ $3($$k^2+3$$)$ by the inductive hypothesis. From this we have $3(k^2+3) = 2k^2 + k^2 + 9$ $\geq$ $k^2 + 2k + 4$ $=$ $(k+1)^2 + 3$ since $k\geq 2$. Therefore $P(k+1)$ is true.
⑤ The result follows for all $n\geq 2$ by induction.
 

Strong induction

Induction with a stronger hypothesis.

Recall how induction works

Induction$\rule{P(0); \forall k. P(k)\rightarrow P(k+1)}{\forall n. P(n)}$

Domain: natural numbers ($\N$).

How do we get $P(5)$ from $P(0)$ and $\forall k. P(k)\rightarrow P(k+1)$?

1. First, we have $P(0)$. $P(0)$
2. Since $P(k)\rightarrow P(k+1)$ for all $k$, we have $P(0)\rightarrow P(1)$. $\ \Downarrow_{\ P(0)\rightarrow P(1)}$
3. Applying Modus Ponens to 1 and 2, we get $P(1)$. $P(1)$
4. Since $P(k)\rightarrow P(k+1)$ for all $k$, we have $P(1)\rightarrow P(2)$. $\ \Downarrow_{\ P(1)\rightarrow P(2)}$
5. Applying Modus Ponens to 3 and 4, we get $P(2)$. $P(2)$
$\vdots$   $\ \Downarrow_{\ P(k)\rightarrow P(k+1)}$
11. Applying Modus Ponens to 9 and 10, we get $P(5)$. $P(5)$

Note that we have $P(0), \ldots, P(k)$ when proving $k+1$.
So we can safely assume all of them, rather than just $P(k)$.

The strong induction rule of inference

Strong Induction$\rule{P(0); \forall k. (P(0)\wedge P(1)\wedge\ldots\wedge P(k))\rightarrow P(k+1)}{\forall n. P(n)}$

Domain: $\N$.

Strong induction for $P$ follows from ordinary induction for $Q$ where
$Q(k) = P(0) \wedge P(1) \wedge P(2) \wedge \ldots \wedge P(k)$
To see why, note the following:
$Q(0) \equiv P(0)$
$Q(k+1) \equiv Q(k) \wedge P(k+1)$
$(\forall n. Q(n))\equiv(\forall n. P(n))$

Strong inductive proofs for any base case $b\in\Z$

① Let $P(n)$ be [ definition of $P(n)$ ].
We will show that $P(n)$ is true for every integer $n\geq b$ by strong induction.
② Base case ($n = b$):
[ Proof of $P(b)$. ]
③ Inductive hypothesis:
Suppose that for some arbitrary integer $k\geq b$, $P(j)$ is true for every integer $b \leq j \leq k$.
④ Inductive step:
We want to prove that $P(k+1)$ is true.
[ Proof of $P(k+1)$. The proof must invoke the strong inductive hypothesis. ]
⑤ The result follows for all $n\geq b$ by strong induction.
 

Using strong induction

An example proof and when to use strong induction.

Example: the fundamental theorem of arithmetic

Fundamental theorem of arithmetic
Every positive integer greater than 1 has a unique prime factorization.
Examples
$48= 2\cdot 2\cdot 2\cdot 2\cdot 3$
$591 = 3 \cdot 197$
$45,523 = 45,523$
$321,950 = 2 \cdot 5 \cdot 5 \cdot 47 \cdot 137$
$1,234,567,890 = 2 \cdot 3 \cdot 3 \cdot 5 \cdot 3,607 \cdot 3,803$

We use strong induction to prove that a factorization into primes exists (but not that it is unique).

Prove that every integer $\geq 2$ is a product of primes

① Let $P(n)$ be “$n$ is a product of one or more primes”.
We will show that $P(n)$ is true for every integer $n\geq 2$ by strong induction.
② Base case ($n = 2$):
2 is prime, so it is a product of primes. Therefore $P(2)$ is true.
③ Inductive hypothesis:
Suppose that for some arbitrary integer $k\geq 2$, $P(j)$ is true for every integer $2 \leq j \leq k$.
④ Inductive step:
We want to prove that $P(k+1)$ is true, i.e., $k+1$ is a product of primes.
Case: $k+1$ is prime. Then by definition, $k+1$ is a product of primes.
Case: $k+1$ is composite. Then by $k+1 = ab$ for some integers $ab$ where $2\leq a, b\leq k$. By inductive hypothesis, we have $P(a) = p_1p_2\ldots p_r$ and $P(b) = q_1q_2\ldots q_s$, where $p_1,p_2,\ldots, p_r, q_1, q_2, \ldots, q_s$ are prime. Thus, $k+1 = ab = p_1p_2\ldots p_rq_1q_2\ldots q_s$, which is a product of primes.
⑤ The result follows for all $n\geq 2$ by strong induction.
 

Strong induction is particularly useful when …

We need to reason about procedures that given an input $k$ invoke themselves recursively on an input different from $k-1$.

Example:
Euclidean algorithm for computing $\gcd{a}{b}$.
// Assumes a >= b >= 0.
public static int gcd(int a, int b) {
  if (b == 0)
    return a;             // GCD(a, 0) = a
  else  
    return gcd(b, a % b); // GCD(a, b) = GCD(b, a mod b)
}

We will use strong induction to reason about this algorithm and other functions with recursive definitions.

Recursively defined functions

Recursive function definitions and examples.

Giving a recursive definition for a function

To define a recursive function $f$ over $\N$, give its output in two cases:
Base case: the value of $f(0)$.
Recursive case: the value of $f(n+1)$, given in terms of $f(n)$.
Examples:
$F(0) = 1, F(n+1) = F(n) + 1$ $\quad\quad n+1$ for $n\in\N$
$G(0) = 1, G(n+1) = 2\cdot G(n)$ $\quad\quad 2^n$ for $n\in\N$
$K(0) = 1, K(n+1) = (n+1)\cdot K(n)$ $\quad\quad n!$ for $n\in\N$

When the recursive case refers only to $f(n)$, as in these examples, we can prove properties of $f(n)$ easily using ordinary induction.

Example: prove $n! \leq n^n$ for all $n\geq 1$

① Let $P(n)$ be $n! \leq n^n$.
We will show that $P(n)$ is true for every integer $n\geq 1$ by induction.
② Base case ($n = 1$):
$1! = 1\cdot 0! = 1 \cdot 1 = 1 = 1^1$ so $P(1)$ is true.
③ Inductive hypothesis:
Suppose that $P(k)$ is true for an arbitrary integer $k\geq 1$.
④ Inductive step:
We want to prove that $P(k+1)$ is true, i.e., $(k+1)! \leq (k+1)^{(k+1)}$.
⑤ The result follows for all $n\geq 1$ by induction.
 

Fun: can we verify $n! \leq n^n$ for all natural numbers?

Prove $n! \leq n^n$ for $n\in\N$ with Dafny:

// x^y where 0^0 = 1
function expt(x : nat, y: nat) : nat {
   if y == 0 then 1 else x * expt(x, y-1)
}

// n!
function fact(n : nat) : nat {
  if n == 0 then 1 else n * fact(n-1)   
}

// n! <= n^n for all natural numbers
lemma factLemma(n : nat)
  ensures fact(n) <= expt(n, n)
{ }

Dafny can’t prove this theorem because the proof involves several steps that are too difficult for Dafny to discover on its own.

Really prove $n! \leq n^n$ for $n\in\N$ with Dafny:

// x^y where 0^0 = 1
function expt(x : nat, y: nat) : nat {
   if y == 0 then 1 else x * expt(x, y-1)
}

// n!
function fact(n : nat) : nat {
  if n == 0 then 1 else n * fact(n-1)   
}

// n! <= n^n for all natural numbers
lemma factLemma(n : nat)
  ensures fact(n) <= expt(n, n)
{
  if (n == 0) {           // Base case
    assert fact(0) <= expt(0, 0);
  } else {               // Inductive step
    factLemma(n-1);      // Inductive hypothesis
    exptLemma(n-1, n-1); // (n-1)^(n-1) <= n^(n-1)
    assert fact(n) == n * fact(n-1);               // by fact defn
    assert n * fact(n-1) <= n * expt(n-1, n-1);    // by IH
    assert n * expt(n-1, n-1) <= n * expt(n, n-1); // by exptLemma
    assert fact(n) <= expt(n, n);                  // qed.
  }
}

// x^y <= (x+1)^y for all natural numbers.
lemma exptLemma(x: nat, y: nat)
  ensures expt(x, y) <= expt(x + 1, y)
{}

Summary

Induction lets us prove statements about all natural numbers.
A proof by induction must show that $P(0)$ is true (base case).
And it must use the inductive hypothesis $P(k)$ to show that $P(k+1)$ is true (inductive step).
Induction also lets us prove theorems about integers $n\geq b$ for $b\in\Z$.
Adjust all parts of the proof to use $n\geq b$ instead of $n\geq 0$.
Strong induction lets us assume a stronger inductive hypothesis.
This makes some proofs easier.
But every proof by strong induction can be transformed into a proof by ordinary induction and vice versa.