Administrative info HW1 solution on Piazza If you are still on the waitlist, you may need to remove yourself and then re-add the class. Make sure to do so before the deadline! Question to think about There is a children's toy that has rings of various sizes that can be stacked together. However, they only fit properly if they happen to be stacked in order, with the largest at the bottom and the smallest on top. So if we have them stacked in the wrong order, we can remove them all and stack them in the right order. This gets boring after a while, so suppose instead that we restrict ourselves to a single move: we can place our hand under any ring and flip the entire portion of the stack above our hand. We can repeat this move as many times as we like. Is it always possible to properly reorder the stack using just this move? Review Proof by induction Map Coloring We want to color the countries on a map of the world so that no two adjacent countries have the same color. That would be bad, since we wouldn't be able to tell what the border was, which could lead to wars, illegal immigration, etc. It turns out that if countries are contiguous, only four colors are required. This was conjectured in 1852, and many proof attempts were made in the years following, all erroneous. Then in 1976, it was finally proven with the help of a computer that checked a large number of cases (~2000) and was hundreds of pages long. However, this proof wasn't universally accepted, since it required believing that the computer program was correct. Finally, a human-readable but still long and difficult proof was published in 1996. Let's consider a simpler version that doesn't require hundreds of pages and a computer. Assume that the map is drawn by drawing n infinite lines in the plane, dividing it into regions. Then only two colors are required to color the plane such that no two adjacent regions have the same color. (Two regions are adjacent if they share a border, not just a point.) What should we do induction over? The number of regions? The number of borders? We can't easily break down a map into a simpler map by just removing one region or border. Instead, we do induction over the number of lines used to generate the map. This illustrates that in a real-world (well, kind of) problem, it's not always obvious how to express it in math and how to prove it. There may be many ways to do so, some better than others. Formally, our claim is ∀n∈N . any map generated using n lines can be colored using two colors. [Note that there is a second implicit forall in this statement, so we could actually further refine the mathematical formulation of this statement. We also have to be careful to show that all maps with n lines can be colored.] Proof: Base case: P(0) A map with no lines needs only one color. Inductive hypothesis: Assume P(k). Inductive step: Prove P(k+1). Consider an arbitrary map with k+1 lines. Let's remove a line to create a map with k lines. Then by the inductive hypothesis, we know that the resulting map can be colored using just two colors, say red and blue. Now if we consider the k+1 line again, it passes through some regions of the smaller map and not others. Pick one side of the line, and on that side, we flip all the colors, so what was red becomes blue and vice versa. Now consider any two adjacent regions in the new map. Case 1: The two regions are both on the side of the line that did not have its colors swapped. Then they are the same color as they were in the smaller map, so they still have different colors. Case 2: The two regions are both on the side of the line that had its colors swapped. Then they have opposite colors as they did in the smaller map, so when their colors were switched, they still ended up with different colors. Case 3: The two regions are on different sides of the line. Then in the smaller map, they were part of the same region, since the line that divides them now didn't exist. Thus, they had the same color, but since we switched the colors on one side of the line, the region that is on that side now has a different color than the one on the other side. So the two regions have different colors. In all cases, the two adjacent regions have different colors, so this is a valid coloring of the new map. Thus, any map with k+1 lines can be properly colored using this procedure. Answer to initial question Induction! [Briefly discuss proof in class, but not repeated here since it is a common homework problem.] Proving something stronger As you know, Cory Hall isn't the prettiest building on campus. Suppose we secure funding to renovate the courtyard, so we decide to re-tile using L-shaped tiles. However, we want to leave a hole in the center for a nice palm tree to provide shade. Can we do so? Let's formalize the problem. Let's assume that the courtyard is square; in fact, it's size is 2^n x 2^n for some n, where our tiles are 2 x 2 with one missing square. Can we tile the courtyard by leaving a 1 x 1 square hole in the center? Let's try to prove by induction that we can tile a 2^n x 2^n courtyard and leave a center hole. Proof: Base case: P(1) states that we can tile a 2^2 courtyard with a hole in the center. But this just takes one tile. [Side note: what do we actually mean by a "hole in the center?" Since no square occupies the center, we mean a hole that has a corner at the center of the courtyard.] Inductive hypothesis: Assume P(n), i.e. we can tile a 2^n x 2^n courtyard with a hole in the center. Inductive step: Consider a 2^(n+1) x 2^(n+1) courtyard. We can divide it into four smaller 2^n x 2^n courtyards and apply our inductive hypothesis. However, each subsquare has a hole in the middle, which we can't fill using our tiles. Furthermore, the larger courtyard doesn't have a hole in the center either. What we need instead are four 2^n x 2^n courtyards with holes at their corners, so we can cover three of the holes with a single tile and leave the remaining hole, which is now at the center of the larger courtyard. But our inductive hypothesis does not let us assume that we can tile a smaller courtyard with a hole at the corner. We're stuck! What do we do? Once again, we are desperate, so let's do something crazy. Let's try to prove that we can tile a 2^n x 2^n courtyard with a hole wherever we want. Proof: Base case: P(1) states that we can tile a 2^2 courtyard with a hole in the anywhere. But this just takes one tile, and we can rotate the tile as needed. Inductive hypothesis: Assume P(n), i.e. we can tile a 2^n x 2^n courtyard with a hole anywhere. Inductive step: Consider a 2^(n+1) x 2^(n+1) courtyard, with a hole anywhere. As before, we can divide it into four smaller 2^n x 2^n courtyards. For the quadrant with the hole, we apply our inductive hypothesis to get a 2^n x 2^n tiling with a hole in that exact location. For the remaining three quadrants, we apply inductive hypothesis to get holes at their shared corner, i.e. the middle of the original courtyard, and we fill the holes with a single tile. Thus, we have shown that we can tile a 2^(n+1) x 2^(n+1) courtyard with a hole anywhere. Why was it easier to prove something stronger than to prove our original claim? While we have to prove more, we also get to assume more in our inductive hypothesis, which is what we needed here. Bad induction Sometimes, we can make mistakes in our proofs that allow us the show things that are false. Here is one example. Theorem: All horses have the same color. Can state as "In any set of n horses, they all have the same color." Proof: By induction over n, the number of horses. Base case: P(1) is obviously true, since there is only one horse. Inductive hypothesis: P(k), i.e. any set of k horses consists of just one color. Inductive step: Consider an arbitrary set of k+1 horses, call them h(1), h(2), ..., h(k+1). Consider the subset {h(1),...,h(k)}. By the inductive hypothesis, all horses in this subset must have the same color, so horses h(1), ..., h(k) have the same color. Now consider the subset {h(2),...,h(k+1)}. By the inductive hypothesis, all horses in this subset must have the same color, so horses h(2), ..., h(k+1) have the same color. Since h(1), ..., h(k) have the same color and h(k+1) must have the same color as h(2), it must be that h(1), ..., h(k+1) all have the same color. We proved something that is clearly false! Does this mean induction is broken? In fact, we messed up in the inductive step, since our reasoning doesn't hold up for k+1 = 2. In this case, the two subsets do not overlap, so we haven't proven that the h(1) and h(2) have the same color. This is another example of why we have to make sure reasoning holds for all values of k. In this case, there was just one value of k where it didn't hold, and the entire proof broke down as a result. Strong induction Recall the lemma that we used to prove that there are infinitely many primes. Lemma: Every integer n > 1 is either prime or can be written as a product of two or more primes. Let's try to prove this using induction. Proof: Base case: Prove P(2). 2 is prime. Inductive hypothesis: Assume P(k), i.e. k is prime or can be written as a product of two or more primes. Inductive step: Prove P(k+1). There are two cases. Case 1: k+1 is prime. Then we are done. Case 2: k+1 is composite. Now what? How does knowing that k is a prime or a product of primes help us? In fact, k and k+1 don't ever share any prime factors! We are stuck. The induction that we have seen so far doesn't give us enough to prove the above without some ugly contortions. Let's go back to our analogy with recursion. Suppose I asked you to compute the nth Fibonacci number. Recall that the Fibonacci numbers are defined using the following recurrence relation: F(n) = { 1 if n = 0 or n = 1 { F(n-1) + F(n-2) if n > 1 To compute the nth Fibnonacci number, we'd turn the above into a recursive program. fibonacci(n): if (n == 0 || n == 1) then 1 else fibonacci(n-1) + fibonacci(n-2) Notice that we broke down the n case into two smaller cases, one of which is even smaller than n-1. (Not by a whole lot, but if we needed to, we could use something much smaller.) So in recursion, we're allowed to use any smaller cases, not just the next smallest one. We need something similar in induction. If we remember our inductive chain, we start with P(0), which we proved in our base case. Then when we prove the inductive step, we rely on the fact that we can prove P(k) by recursively applying the inductive step as follows: P(0) => P(1) => ... => P(k) Thus, we only needed to prove P(k) => P(k+1) to extend the chain. Notice that in the recursion, we've already done the hard work of proving P(0), P(1), ..., P(k), but we throw out everything except for P(k) and use just that. What if we kept that information and used it to our advantage? If we do so, we end up with strong induction, which consists of the following: (1) Prove P(0) (i.e. the base case). (2) Prove ∀k∈N . (P(0) ∧ P(1) ∧ ... ∧ P(k)) => P(k+1). In proving the inductive step (2), we get to assume as our inductive hypothesis P(0) ∧ P(1) ∧ ... ∧ P(k) for an arbitrary k∈N and then show that P(k+1) follows. Let's go back to proving our lemma in order to make this more concrete. Proof: Base case: Prove P(2). 2 is prime. Inductive hypothesis: Assume P(2) ∧ ... ∧ P(k), i.e. any integer between 2 and k is prime or can be written as a product of two or more primes. Inductive step: Prove P(k+1). There are two cases. Case 1: k+1 is prime. Then we are done. Case 2: k+1 is composite. By definition, k+1 = xy for some integers k+1 > x,y > 1. Then by the inductive hypothesis, x is prime or can be written as a product of primes and similarly for y. Thus, k+1 = xy can be written as a product of primes. In PA1, you will generate a direct proof of the above lemma given a particular n. It turns out that strong induction logically isn't any stronger than simple induction and is just a reformulation of the same principle. See the course reader for details. Induction and recursion As we saw in developing simple induction and then extending it to strong induction, induction and recursion are very intimately related. Indeed, one of main uses of induction is to prove facts about recursive algorithms. Consider again our function for computing the Fibonacci sequence: fibonacci(n): if (n == 0 || n == 1) then 1 else fibonacci(n-1) + fibonacci(n-2) How many additions A(n) does this algorithm perform in computing F(n)? Can you prove by induction that A(n) = F(n+1) - 1 for all n? How many base cases do you need, and what are they? How are they related to the base cases in fibonacci(), and how are the applications of the inductive hypothesis related to the recursive calls in fibonacci()?