P(0) ( n N. P(n) P(n + 1) ) = ( n N. P(n) ) February 15, 2011
Summa summarum Vi får et tip om at følgende kunne finde på at holde for n N: n N. n i = n(n + 1). 2 Vi husker at summation læses meget som for-løkker: n i = 0 + 1 + 2 + 3 + + n. Men hvordan kan vi vise den lighed?
Empiri og eksempler Vi kunne bare gå i gang med n = 0 og så ellers tjekke derudad: n = 0 : 0 i = 0 = 0(0 + 1). 2 n = 1 : 1 i = 0 + 1 = 1 = 1(1 + 1). 2 n = 2 : 2 i = 0 + 1 + 2 = 3 = 2(2 + 1). 2 n = 3 : 3 i = 0 + 1 + 2 + 3 = 6 = 3(3 + 1). 2 Det går jo meget fint, men der er stadig lidt vej til målet.
Computer Aided Experimentation Summation i Java for(long n = 0; true; n++) { long sum = 0; for(int i = 0; i <= n; i++) {sum += i;} if(sum == (n * (n+1)) / 2) { System.out.println("n = " + n + " ok. "); } else { System.out.println("n = " + n + " ærgerlig. "); } } Resultat n = 0 ok.... n = 321868 ok. (efter 5 min.) Se det gik noget mere tjept. Og vi kom noget længere. Men helt til uendelig nåede vi ikke.
Lad n N være vilkårlig... Men vi er jo ikke dummere end som så. Man viser sligt ved at lade n N være vilkårligt og regne: n i = 0 + 1 + 2 + + n =? Hvad pokker gør vi? Krydser fingrene, prøver med n + 1 og snyder: ( n ) 0 + 1 + 2 + + n + n + 1 = i + n + 1 n(n + 1) = + n + 1 2 n(n + 1) + 2(n + 1) = = 2 (n + 1)(n + 2). 2 Svindel og humbug lyder tilråbene vi bliver holdt for nar! Du bruger jo den lighed du vil vise. Eller gør jeg?
Induktion er snyd off-by-one Notation er rar: for n N skriver vi P(n) for sandhedsværdien af n i = n(n + 1). 2 P er altså et prædikat med domæne N for vi ønsker n N. P(n). Vi ved at P(0) er god nok. Og lige før viste vi at P(n + 1) er ok når ellers vi snyder og bruger P(n) i udregningerne. Vi har med andre ord at n N. P(n) P(n + 1). Og det er faktisk nok. Selvom det kun er 1 fra at være snyd.
Jørgen Clevin argumentet Her er altså hvad vi ved om P: P(0) : S P(1) :? P(2) :? P(3) :? Første implikation giver os så P(0) : S P(1) : S P(2) :? P(3) :? Den næste giver P(0) : S P(1) : S P(2) : S P(3) :? Og så fremdeles. Der er S er hele vejen derudad, voila!
P(0) ( n N. P(n) P(n + 1) ) = ( n N. P(n) ) Et skridt tilbage: Induktionsprincippet Vi ønsker n N. P(n) for prædikat P med domæne N. Vi viser: P(0) holder. P(n + 1) følger ud fra P(n) for vilkårligt n N. Det er ren kogebog. Man kalder gerne punkterne for induktionsstarten hhv. induktionsskridtet. Og når man er i gang med induktionsskridtet kalder man gerne antagelsen P(n) for induktionshypotesen. Der er en oplagt analogi til brugen af rekursion i programmering: Reducer problemet til et mindre af samme type og kald dig selv.
Geometriske rækker, basisskridt Vi vil vise følgende, hvor r R og r = 1: n N. n r i = 1 r n+1. 1 r Højresiden kaldes en endelig geometrisk række. Den render man tit ind i, så det er rart at vide hvad summen faktisk er. Induktionskogebogen siger: Induktionsstart, vis for n = 0: 0 r i = r 0 = 1 = 1 r 1 1 r.
Geometriske rækker, induktionsskridt Induktionskogebogen siger nu: Induktionsskridt, antag ok for n N vilkårlig, vis for n + 1: n+1 r i = r 0 + r 1 + + r n + r n+1 ( n ) = r i + r n+1 IH = 1 r n+1 + r n+1 1 r = 1 r n+1 + r n+1 (1 r) 1 r = 1 r n+2. 1 r Hokus pokus bemærk den lille IH over 3. lighedstegn!
Søgen efter romkugler Kantinen sælger romkugler i pakker med 3 stk. og pakker med 8 stk. Måske du har lyst til 6 romkugler det er 2 pakker af 3. Eller 11 det er 1 gange 3 og 1 gange 8. Så den er fin. Men 13 romkugler det er straks sværere. I folkesundhedens navn sætter vi os for at undersøge: For hvilke n N kan vi købe n romkugler ved at kombinere pakker med 3 hhv. 8. Med andre ord, for hvilke n N har vi at i, j N. n = 3i + 8j?
Java som (rom)kugleramme Java ind for(int n = 0; n <= 30; n++) { for(int i = 0; 3*i <= n; i++) { for(int j = 0; 8*j <= n; j++) { if (n == 3*i + 8*j) {System.out.print( n + " = 3*" + i + " + 8*" + j + ". "); } } } } Java ud 0=3*0+8*0. 3=3*1+8*0. 6=3*2+8*0. 8=3*0+8*1. 9=3*3+8*0. 11=3*1+8*1. 12=3*4+8*0. 14=3*2+8*1. 15=3*5+8*0. 16=3*0+8*2. 17=3*3+8*1. 18=3*6+8*0. 19=3*1+8*2. 20=3*4+8*1. 21=3*7+8*0. 22=3*2+8*2. 23=3*5+8*1. 24=3*0+8*3. 24=3*8+8*0. 25=3*3+8*2. 26=3*6+8*1. 27=3*1+8*3. 27=3*9+8*0. 28=3*4+8*2. 29=3*7+8*1. 30=3*2+8*3. 30=3*10+8*0.
Romkugle sætningen På baggrund af vores kørsel gætter vi på at man kan ramme alle naturlige tal større eller lig 14. Med andre ord: Romkugle resultatet n 14. i, j N. n = 3i + 8j. Vi sjusker lidt med domænet for n, men N {0, 1, 2,..., 13} er simpelthen for grimt. Go induktion! Og dog vi kigger ikke på hele N med kun fra og med 14. Derfor må vi starte induktionen ved 14; det går også an samme argument som før. En slags forskudt induktion.
Romkugle beviset Induktionsstart: Her skal vi så vise for n = 14 og ikke for n = 0 som vi plejer. Vi har 14 = 3 2 + 8 1 og så er den i kassen. Induktionsskridt: Lad n N være vilkårligt, dog med n 14. Vi antager at sætningen går for n og skal vise at n + 1 også er ok. Induktionshypotesen giver i, j N med n = 3i + 8j. Hvis j 1 fås n + 1 IH = 3i + 8j + 1 = 3i + 8(j 1) + 9 = 3(i + 3) + 8(j 1). Hvis i 5 skriver vi derimod n + 1 IH = 3i + 8j + 1 = 3(i 5) + 8j + 16 = 3(i 5) + 8(j + 2). Alternativt har vi j = 0 og i 4, men så er n = 3i + 8j 12. Og den går ikke, for vi antog n 14. Færdig bom rom.
Fuldstændig induktion Lad os blive i det sukkersøde hjørne: Chokolade-plade-sætningen Køb en (rektangulær) plade chokolade opdelt i n {1, 2, 3,...} små (rektangulære) bidder. Knæk løs indtil alle bidder er helt fri. Så har du knækket netop n 1 gange....men vi får brug for fuldstændig induktion for at vise dette!
Jørgen Clevin vender tilbage Vi husker de første trin i forklaringen af induktion: P(0) : P(0) P(1) : P(0) = S, P(1) =?, P(2) =?, P(3) =?, P(0) = S, P(1) = S, P(2) =?, P(3) =?, Nu slutter vi normalt P(2) ud fra P(1). Men hov hvorfor så indskrænkede? Vi ved at både P(0) og P(1) holder for nærværende, så med P(0) P(1) P(2) kan vi slutte P(0) P(1) P(2) : P(0) = S, P(1) = S, P(2) = S, P(3) =?, P(4) =?, Tilsvarende giver P(0) P(1) P(2) P(3) os at P(0) P(1) P(2) P(3) : P(0) = S, P(1) = S, P(2) = S, P(3) = S, P(4) =?,
( n N. ( m < n. P(m)) P(n) ) = n N. P(n) Et skridt tilbage (igen): Fuldstændig induktion Vi ønsker (stadig) n N. P(n) for prædikat P med domæne N. Ved fuldstændig induktion er der kun en ting at vise: n N. ( m < n. P(m)) P(n) Vi kalder stadig det ene punkt induktionsskridtet. For n = 0 skal vi vise ( m < 0. P(m)) P(0) hvilket svarer til at vise P(0) uden hjælp her er induktionsstarten. For at vise P(1) kan vi antage P(0), for at vise P(2) må antage P(0) og P(1) og så videre. Igen som brugen af rekursion i programmering: Man reducerer blot til et mindre problem, ikke nødvendigvis et, der er netop 1 mindre.
Chokolade-plade-beviset, del I Tilbage til de søde sager. Først lidt notation. For n N siger vi at P(n) er sand hvis en plade chokolade med n bidder knækkes n 1 gange for at nå usammenhængende bidder. Vi vil vise n 1. P(n) ved (forskudt) fuldstændig induktion, vi hænger på at vise n 1. ( 1 m < n. P(m)) P(n). Vi lader derfor n N med n 1 være vilkårligt. Vi overvejer først tilfældet n = 1. Vores induktionshypotese er her at 1 m < 1. P(m) holder, men den er flad: domænet er tomt. Til gengæld er chokolade pladen allerede fuldstændigt nedbrudt, vi bruger således 0 = 1 1 = n 1 knæk. Tilfældet n = 1 er ok.
Chokolade-plade-beviset, del II Vi behandlede tilfældet n = 1 separat. Sådan går det gerne ved fuldstændig induktion: det første eller de første tilfælde håndteres individuelt. Nu til det generelle tilfælde, n 2. Induktionshypotesen giver os 1 m < n. P(m) holder: resultatet holder for alle mindre plader chokolade. Vi tager vores plade og knækker et eller anden sted ligegyldigt hvor. Det kan vi, idet n 2. Så får vi to nye plader med n 1 1 hhv. n 2 1 bidder således at n = n 1 + n 2. Da n 1 < n ved vi at den første plade knækkes med n 1 1 knæk; tilsvarende knækkes den anden med n 2 1 knæk. Samlet set bruger vi 1 + (n 1 1) + (n 2 1) = n 1 + n 2 1 = n 1 knæk. Knæk og bræk og færdig.