VL-12: LOOP und WHILE Programme II
(Berechenbarkeit und Komplexit¨ at, WS 2017) Gerhard Woeginger
WS 2017, RWTH
Organisatorisches
N¨achste Vorlesung:
Donnerstag, November 30, 12:15–13:45 Uhr, Aula Webseite:
http://algo.rwth-aachen.de/Lehre/WS1718/BuK.php
Wiederholung
Wdg.: Programmiersprache LOOP
Wir betrachten eine einfache Programmiersprache namens LOOP, deren Programme aus den folgenden syntaktischen Komponenten aufgebaut sind:
Variablen: x1 x2 x3 . . . Konstanten: 0 1 2 . . . Symbole: ; := + −
Schl¨usselw¨orter: LOOP DO ENDLOOP
Wdg. LOOP / Semantik
Ein LOOP-ProgrammP mitk Variablen
berechnet einek-stellige Funktion der Form[P] : Nk →Nk. IstP die Zuweisungxi :=xj+c,
so ist[P](r1, . . . ,rk) = (r1, . . . ,ri−1,rj+c,ri+1, . . . ,rk).
IstP die Zuweisungxi :=xj−c,
ist[P](r1, . . . ,rk) = (r1, . . . ,ri−1,rj−c,ri+1, . . . ,rk)fallsrj≥c, und andernfalls[P](r1, . . . ,rk) = (r1, . . . ,ri−1,0,ri+1, . . . ,rk).
IstP=P1;P2 eine Hintereinanderausf¨uhrung, so ist[P](r1, . . . ,rk) = [P2]([P1](r1, . . . ,rk)).
IstP=LOOPxi DOQENDLOOPein LOOP-Konstrukt, so gilt[P](r1, . . . ,rk) = [Q]ri(r1, . . . ,rk).
Wdg.: WHILE / Semantik
Die Eingabe ist in den Variablen x1, . . . ,xn enthalten.
Alle anderen Variablen werden mit0initialisiert.
Das Resultat eines WHILE-Programms ist die Zahl, die sich am Ende der Abbarbeitung in der Variablenx1 ergibt.
Das ProgrammWHILExi6=0 DOP ENDWHILEhat folgende Bedeutung:
P wird solange ausgef¨uhrt, bisxi den Wert0erreicht.
Ein WHILE-ProgrammP mitk Variablen
berechnet einek-stellige Funktion der Form[P] : Nk →Nk. IstP=WHILExi6=0 DOQ ENDWHILE ein WHILE-Konstrukt,
so ist[P](r1, . . . ,rk) = [Q]`(r1, . . . ,rk)f¨ur die kleinste Zahl`, f¨ur die diei-te Komponente von[Q]`(r1, . . . ,rk)gleich0ist.
Falls solch ein `nicht existiert, so ist[P](r1, . . . ,rk)undefiniert.
Wdg.: WHILE versus LOOP
Es gibt WHILE-Programme, die nicht terminieren.
LOOP-Programme terminieren immer.
Jede LOOP-berechenbare Funktionf:Nk →Nist auch WHILE-berechenbar.
Satz
Die Programmiersprache WHILE ist Turing-m¨achtig.
Landschaft um LOOP, WHILE, TM, RAM
TM = RAM = WHILE = entscheidbar
LOOP = primitiv rekursiv + − × ab ab kn
A(m,n)
Ackermann Funktion
Vorlesung VL-12
LOOP und WHILE Programme II
Die Ackermann Funktion
Eigenschaften der Ackermann Funktion Ackermann Funktion und LOOP-Programme Primitiv rekursive Funktionen
M¨ achtigkeit von LOOP
Vermutung von David Hilbert (1926)
Die Menge der LOOP-berechenbaren Funktionen
stimmt mit der Menge der berechenbaren Funktionen ¨uberein.
Falsch, falsch, falsch, v¨ollig falsch!!
Satz (Ackermann, 1928)
Es gibt berechenbare Funktionen, die nicht LOOP-berechenbar sind.
Wilhelm Ackermann (1896–1962)
Wikipedia: Wilhelm Friedrich Ackermann war ein deutscher Mathematiker (und ein Sch¨uler von Hilbert).
1926 entdeckte er die nach ihm benannte Ackermann Funktion, die in der Berechenbarkeitstheorie eine wichtige Rolle spielt. Ackermann war Gymnasiallehrer an verschiedenen Schulen in M¨unster, Burgsteinfurt und L¨udenscheid; er hielt auch Vorlesungen an der Universit¨at M¨unster.
Die Ackermann Funktion
Ackermann Funktion: Definition
Definition
Die Ackermann FunktionA:N2→Nist folgendermassen definiert:
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ackermann Funktion: Beispiele (1)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ein paar Beispiele f¨urm=1: A(1,0) =A(0,1) =2
A(1,1) =A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5 Beobachtung
A(1,n) =n+2
Ackermann Funktion: Beispiele (1)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ein paar Beispiele f¨urm=1:
A(1,0) =A(0,1) =2
A(1,1) =A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5 Beobachtung
A(1,n) =n+2
Ackermann Funktion: Beispiele (1)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ein paar Beispiele f¨urm=1:
A(1,0) =A(0,1) =2
A(1,1) =A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5 Beobachtung
A(1,n) =n+2
Ackermann Funktion: Beispiele (1)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ein paar Beispiele f¨urm=1:
A(1,0) =A(0,1) =2 A(1,1) =
A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5 Beobachtung
A(1,n) =n+2
Ackermann Funktion: Beispiele (1)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ein paar Beispiele f¨urm=1:
A(1,0) =A(0,1) =2
A(1,1) =A(0,A(1,0)) =A(1,0) +1=3
A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5 Beobachtung
A(1,n) =n+2
Ackermann Funktion: Beispiele (1)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ein paar Beispiele f¨urm=1:
A(1,0) =A(0,1) =2
A(1,1) =A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5
Beobachtung A(1,n) =n+2
Ackermann Funktion: Beispiele (1)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ein paar Beispiele f¨urm=1:
A(1,0) =A(0,1) =2
A(1,1) =A(0,A(1,0)) =A(1,0) +1=3 A(1,2) =A(0,A(1,1)) =A(1,1) +1=4 A(1,3) =A(0,A(1,2)) =A(1,2) +1=5
Beobachtung A(1,n) =n+2
Ackermann Funktion: Beispiele (2)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ein paar Beispiele f¨urm=2:
A(2,0) =A(1,1) =3
A(2,1) =A(1,A(2,0)) =A(2,0) +2=5
A(2,2) =A(1,A(2,1)) =A(2,1) +2=7
Beobachtung
A(2,n) =2n+3
Ackermann Funktion: Beispiele (2)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ein paar Beispiele f¨urm=2:
A(2,0) =A(1,1) =3
A(2,1) =A(1,A(2,0)) =A(2,0) +2=5 A(2,2) =A(1,A(2,1)) =A(2,1) +2=7
Beobachtung
A(2,n) =2n+3
Ackermann Funktion: Beispiele (2)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ein paar Beispiele f¨urm=2:
A(2,0) =A(1,1) =3
A(2,1) =A(1,A(2,0)) =A(2,0) +2=5 A(2,2) =A(1,A(2,1)) =A(2,1) +2=7
Beobachtung A(2,n) =
2n+3
Ackermann Funktion: Beispiele (2)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Ein paar Beispiele f¨urm=2:
A(2,0) =A(1,1) =3
A(2,1) =A(1,A(2,0)) =A(2,0) +2=5 A(2,2) =A(1,A(2,1)) =A(2,1) +2=7
Beobachtung
A(2,n) =2n+3
Ackermann Funktion: Beispiele (3)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Und ein paar Beispiele f¨urm=3:
A(3,0) =A(2,1) =5
A(3,1) =A(2,A(3,0)) =2·A(3,0) +3=13 A(3,2) =A(2,A(3,1)) =2·A(3,1) +3=29 A(3,3) =A(2,A(3,2)) =2·A(3,2) +3=61 Beobachtung
A(3,n) =2n+3−3
Ackermann Funktion: Beispiele (3)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Und ein paar Beispiele f¨urm=3:
A(3,0) =A(2,1) =5
A(3,1) =A(2,A(3,0)) =2·A(3,0) +3=13
A(3,2) =A(2,A(3,1)) =2·A(3,1) +3=29 A(3,3) =A(2,A(3,2)) =2·A(3,2) +3=61 Beobachtung
A(3,n) =2n+3−3
Ackermann Funktion: Beispiele (3)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Und ein paar Beispiele f¨urm=3:
A(3,0) =A(2,1) =5
A(3,1) =A(2,A(3,0)) =2·A(3,0) +3=13 A(3,2) =A(2,A(3,1)) =2·A(3,1) +3=29 A(3,3) =A(2,A(3,2)) =2·A(3,2) +3=61
Beobachtung
A(3,n) =2n+3−3
Ackermann Funktion: Beispiele (3)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Und ein paar Beispiele f¨urm=3:
A(3,0) =A(2,1) =5
A(3,1) =A(2,A(3,0)) =2·A(3,0) +3=13 A(3,2) =A(2,A(3,1)) =2·A(3,1) +3=29 A(3,3) =A(2,A(3,2)) =2·A(3,2) +3=61
Beobachtung A(3,n) =
2n+3−3
Ackermann Funktion: Beispiele (3)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Und ein paar Beispiele f¨urm=3:
A(3,0) =A(2,1) =5
A(3,1) =A(2,A(3,0)) =2·A(3,0) +3=13 A(3,2) =A(2,A(3,1)) =2·A(3,1) +3=29 A(3,3) =A(2,A(3,2)) =2·A(3,2) +3=61 Beobachtung
A(3,n) =2n+3−3
Ackermann Funktion: Beispiele (4)
Zusammenfassung der Beispiele
Wenn man den ersten Parameter fixiert ...
A(1,n) =n+2 A(2,n) =2n+3 A(3,n) =2n+3−3 A(4,n) = 22··
·2
| {z } n+3 viele
Zweien
−3
Bereits der Wert A(4,2) =265536−3
ist gr¨osser als die Anzahl aller Atome im Weltraum.
Exkurs: UpArrow-Notation (1)
Addition ist iterierte Nachfolgerbildung:
S(S(. . .(S(a). . .)
| {z }
bmal
= a+b
Multiplikation ist iterierte Addition: a+· · ·+a
| {z }
bmal
= a·b
Potenzierung ist iterierte Multiplikation: a× · · · ×a
| {z }
bmal
= ab =: a↑b
Der Potenzturm ist iterierte Potenzierung: aa. .
.a
| {z }
bmal
=: a↑↑b
Wiederholte Potenzturmbildung gibt a↑↑a↑↑. . .↑↑a
| {z }
bmal
=: a↑↑↑b
Exkurs: UpArrow-Notation (1)
Addition ist iterierte Nachfolgerbildung:
S(S(. . .(S(a). . .)
| {z }
bmal
= a+b
Multiplikation ist iterierte Addition:
a+· · ·+a
| {z }
bmal
= a·b
Potenzierung ist iterierte Multiplikation: a× · · · ×a
| {z }
bmal
= ab =: a↑b
Der Potenzturm ist iterierte Potenzierung: aa. .
.a
| {z }
bmal
=: a↑↑b
Wiederholte Potenzturmbildung gibt a↑↑a↑↑. . .↑↑a
| {z }
bmal
=: a↑↑↑b
Exkurs: UpArrow-Notation (1)
Addition ist iterierte Nachfolgerbildung:
S(S(. . .(S(a). . .)
| {z }
bmal
= a+b
Multiplikation ist iterierte Addition:
a+· · ·+a
| {z }
bmal
= a·b
Potenzierung ist iterierte Multiplikation:
a× · · · ×a
| {z }
bmal
= ab =: a↑b
Der Potenzturm ist iterierte Potenzierung: aa. .
.a
| {z }
bmal
=: a↑↑b
Wiederholte Potenzturmbildung gibt a↑↑a↑↑. . .↑↑a
| {z }
bmal
=: a↑↑↑b
Exkurs: UpArrow-Notation (1)
Addition ist iterierte Nachfolgerbildung:
S(S(. . .(S(a). . .)
| {z }
bmal
= a+b
Multiplikation ist iterierte Addition:
a+· · ·+a
| {z }
bmal
= a·b
Potenzierung ist iterierte Multiplikation:
a× · · · ×a
| {z }
bmal
= ab =: a↑b
Der Potenzturm ist iterierte Potenzierung:
aa. .
.a
| {z }
bmal
=: a↑↑b
Wiederholte Potenzturmbildung gibt a↑↑a↑↑. . .↑↑a
| {z }
bmal
=: a↑↑↑b
Exkurs: UpArrow-Notation (1)
Addition ist iterierte Nachfolgerbildung:
S(S(. . .(S(a). . .)
| {z }
bmal
= a+b
Multiplikation ist iterierte Addition:
a+· · ·+a
| {z }
bmal
= a·b
Potenzierung ist iterierte Multiplikation:
a× · · · ×a
| {z }
bmal
= ab =: a↑b
Der Potenzturm ist iterierte Potenzierung:
aa. .
.a
| {z }
bmal
=: a↑↑b
Wiederholte Potenzturmbildung gibt a↑↑a↑↑. . .↑↑a
| {z }
bmal
=: a↑↑↑b
Exkurs: UpArrow-Notation (2)
Definition (UpArrow-Notation von Donald Knuth)
a↑mb :=
1 wennb=0
a·b wennm=0
ab wennm=1
a↑m−1(a↑m(b−1)) sonst
Es gilt:
A(1,n) =2+ (n+3)−3 A(2,n) =2·(n+3)−3 A(3,n) =2↑(n+3)−3 A(4,n) =2↑↑(n+3)−3 A(5,n) =2↑↑↑(n+3)−3 ...
A(m,n) =2↑m−2(n+3)−3 f¨urm≥2
Exkurs: UpArrow-Notation (2)
Definition (UpArrow-Notation von Donald Knuth)
a↑mb :=
1 wennb=0
a·b wennm=0
ab wennm=1
a↑m−1(a↑m(b−1)) sonst Es gilt:
A(1,n) =2+ (n+3)−3 A(2,n) =2·(n+3)−3 A(3,n) =2↑(n+3)−3 A(4,n) =2↑↑(n+3)−3 A(5,n) =2↑↑↑(n+3)−3 ...
A(m,n) =2↑m−2(n+3)−3 f¨urm≥2
Donald Ervin Knuth (1938)
Wikipedia: Don Knuth is an American computer scientist, mathematician, and professor emeritus at Stanford University.
Knuth is the author of the multi-volume work“The Art of Computer Programming”, he popularized the asymptotic notation (big-O), he created theTeXcomputer typesetting system and theMETAFONT font definition language.
Knuth-Morris-Pratt algorithm Knuth-Bendix completion algorithm
Monotonie-Verhalten
der Ackermann Funktion
Monotonie-Verhalten (1)
Monotonie
(M.1) A(m,n+1) > A(m,n) (M.2) A(m+1,n) > A(m,n) (M.3) A(m+1,n−1) ≥ A(m,n)
Folgerung
F¨urm≥m0 undn≥n0 gilt immer: A(m,n) ≥ A(m0,n0)
Monotonie-Verhalten (1)
Monotonie
(M.1) A(m,n+1) > A(m,n) (M.2) A(m+1,n) > A(m,n) (M.3) A(m+1,n−1) ≥ A(m,n)
Folgerung
F¨urm≥m0 undn≥n0 gilt immer:
A(m,n) ≥ A(m0,n0)
Monotonie-Verhalten (2)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Wir wollen nun (M.1) zeigen: A(m,n+1)>A(m,n)
Rekursionsgleichung liefert:
A(m,n+1) = A(m−1,A(m,n)) A(m,n) = A(m−1,A(m,n−1))
Induktion liefert zuerstx :=A(m,n)>A(m,n−1)=:y
und danachA(m−1,x)>A(m−1,y).
Ein analoges induktives Argument zeigt (M.2): A(m+1,n)>A(m,n)
Monotonie-Verhalten (2)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Wir wollen nun (M.1) zeigen: A(m,n+1)>A(m,n) Rekursionsgleichung liefert:
A(m,n+1) = A(m−1,A(m,n)) A(m,n) = A(m−1,A(m,n−1))
Induktion liefert zuerstx :=A(m,n)>A(m,n−1)=:y
und danachA(m−1,x)>A(m−1,y).
Ein analoges induktives Argument zeigt (M.2): A(m+1,n)>A(m,n)
Monotonie-Verhalten (2)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Wir wollen nun (M.1) zeigen: A(m,n+1)>A(m,n) Rekursionsgleichung liefert:
A(m,n+1) = A(m−1,A(m,n)) A(m,n) = A(m−1,A(m,n−1))
Induktion liefert zuerstx:=A(m,n)>A(m,n−1)=:y
und danachA(m−1,x)>A(m−1,y).
Ein analoges induktives Argument zeigt (M.2): A(m+1,n)>A(m,n)
Monotonie-Verhalten (2)
A(0,n) = n+1 f¨urn≥0 A(m+1,0) = A(m,1) f¨urm≥0 A(m+1,n+1) = A(m,A(m+1,n)) f¨urm,n≥0
Wir wollen nun (M.1) zeigen: A(m,n+1)>A(m,n) Rekursionsgleichung liefert:
A(m,n+1) = A(m−1,A(m,n)) A(m,n) = A(m−1,A(m,n−1))
Induktion liefert zuerstx:=A(m,n)>A(m,n−1)=:y
und danachA(m−1,x)>A(m−1,y).
Ein analoges induktives Argument zeigt (M.2): A(m+1,n)>A(m,n)
Monotonie-Verhalten (3)
(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.
Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1. Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0. Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.
A(m+1,n−1)
= A(m,A(m+1,n−2)) (Def)
≥ A(m,A(m,n−1)) (Ind+Mono)
≥ A(m−1,A(m,n−1) +1) (Ind)
≥ A(m−1,A(m,n−1)) (Mono)
= A(m,n) (Def)
Monotonie-Verhalten (3)
(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.
Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.
Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.
Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.
A(m+1,n−1)
= A(m,A(m+1,n−2)) (Def)
≥ A(m,A(m,n−1)) (Ind+Mono)
≥ A(m−1,A(m,n−1) +1) (Ind)
≥ A(m−1,A(m,n−1)) (Mono)
= A(m,n) (Def)
Monotonie-Verhalten (3)
(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.
Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.
Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.
Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.
A(m+1,n−1)
= A(m,A(m+1,n−2)) (Def)
≥ A(m,A(m,n−1)) (Ind+Mono)
≥ A(m−1,A(m,n−1) +1) (Ind)
≥ A(m−1,A(m,n−1)) (Mono)
= A(m,n) (Def)
Monotonie-Verhalten (3)
(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.
Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.
Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.
Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.
A(m+1,n−1)
= A(m,A(m+1,n−2)) (Def)
≥ A(m,A(m,n−1)) (Ind+Mono)
≥ A(m−1,A(m,n−1) +1) (Ind)
≥ A(m−1,A(m,n−1)) (Mono)
= A(m,n) (Def)
Monotonie-Verhalten (3)
(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.
Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.
Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.
Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.
A(m+1,n−1) = A(m,A(m+1,n−2)) (Def)
≥ A(m,A(m,n−1)) (Ind+Mono)
≥ A(m−1,A(m,n−1) +1) (Ind)
≥ A(m−1,A(m,n−1)) (Mono)
= A(m,n) (Def)
Monotonie-Verhalten (3)
(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.
Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.
Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.
Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.
A(m+1,n−1) = A(m,A(m+1,n−2)) (Def)
≥ A(m,A(m,n−1)) (Ind+Mono)
≥ A(m−1,A(m,n−1) +1) (Ind)
≥ A(m−1,A(m,n−1)) (Mono)
= A(m,n) (Def)
Monotonie-Verhalten (3)
(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.
Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.
Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.
Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.
A(m+1,n−1) = A(m,A(m+1,n−2)) (Def)
≥ A(m,A(m,n−1)) (Ind+Mono)
≥ A(m−1,A(m,n−1) +1) (Ind)
≥ A(m−1,A(m,n−1)) (Mono)
= A(m,n) (Def)
Monotonie-Verhalten (3)
(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.
Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.
Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.
Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.
A(m+1,n−1) = A(m,A(m+1,n−2)) (Def)
≥ A(m,A(m,n−1)) (Ind+Mono)
≥ A(m−1,A(m,n−1) +1) (Ind)
≥ A(m−1,A(m,n−1)) (Mono)
= A(m,n) (Def)
Monotonie-Verhalten (3)
(M.3) A(m+1,n−1)≥A(m,n)wird mit einer vollst¨andigen Induktion bewiesen, die ¨uber die lexikographisch sortierten Paare(m,n)l¨auft.
Induktionsanfang:Es giltA(1,n−1) =n+1=A(0,n)f¨ur allen≥1.
Es gilt A(m+1,0) =A(m,1)f¨ur allem≥0.
Induktionsschritt:Wir nehmen an, dass f¨ur(m0,n0)mit(m0<m)oder (m0=m)∧(n0<n)immerA(m0+1,n0−1)≥A(m0,n0)gilt.
A(m+1,n−1) = A(m,A(m+1,n−2)) (Def)
≥ A(m,A(m,n−1)) (Ind+Mono)
≥ A(m−1,A(m,n−1) +1) (Ind)
≥ A(m−1,A(m,n−1)) (Mono)
= A(m,n) (Def)
Monotonie-Verhalten (4)
Visualisierung der vollst¨andigen Induktion ¨uber die lexikographisch sortierten Paare(m,n):
n
0 m 1
Monotonie-Verhalten (4)
Visualisierung der vollst¨andigen Induktion ¨uber die lexikographisch sortierten Paare(m,n):
n
0 m 1
Monotonie-Verhalten (4)
Visualisierung der vollst¨andigen Induktion ¨uber die lexikographisch sortierten Paare(m,n):
n
0 m 1
Monotonie-Verhalten (4)
Visualisierung der vollst¨andigen Induktion ¨uber die lexikographisch sortierten Paare(m,n):
n
0 m 1
Monotonie-Verhalten (4)
Visualisierung der vollst¨andigen Induktion ¨uber die lexikographisch sortierten Paare(m,n):
n
0 m 1
Das Wachstumslemma
Wachstumslemma: Vorbereitung
Ab jetzt betrachten wir ein fixes,wohl-formuliertesLOOP-ProgrammP, das die folgenden zwei Eigenschaften besitzt:
Eigenschaft 1
In allen Zuweisungenxi:=xj+c undxi:=xj−c ist die Konstantec∈ {0,1}.
Andernfalls ersetzen wirxi :=xj+c durch xi:=xj gefolgt von einem Block, der ausc Zuweisungenxi:=xi+1besteht.
Eigenschaft 2
In LOOP-KonstruktenLOOPxi DOP ENDLOOP kommt die Z¨ahlvariablexi nicht inP vor.
Andernfalls f¨uhren wir f¨ur die Schleife eine neue Z¨ahlvariablexi0 ein.
Wachstumslemma: Definitionen
Wir betrachten ein fixes, wohl-formuliertes LOOP-Programm P mit den k Variablen x1,x2, . . . ,xk.
Wir erinnern uns (aus VL-11): Das LOOP-ProgrammP berechnet diek-stellige Funktion[P] :Nk →Nk.
F¨ur die Anfangswertea= (a1, . . . ,ak)∈Nk der Variablen definieren wir fP(a) :=b1+b2+· · ·+bk als die Summe aller Ergebniswerte in[P](a) = (b1, . . . ,bk).
Die Funktion FP:N→Nist definiert durch FP(n) =max
( fP(a)
a∈Nk mit
k
X
i=1
ai≤n )
Intuitiv: Die FunktionFP beschreibt das maximale Wachstum / die maximale Zunahme der Variablenwerte im LOOP-ProgrammP.
Wachstumslemma: Definitionen
Wir betrachten ein fixes, wohl-formuliertes LOOP-Programm P mit den k Variablen x1,x2, . . . ,xk.
Wir erinnern uns (aus VL-11): Das LOOP-ProgrammP berechnet diek-stellige Funktion[P] :Nk →Nk.
F¨ur die Anfangswertea= (a1, . . . ,ak)∈Nk der Variablen definieren wir fP(a) :=b1+b2+· · ·+bk als die Summe aller Ergebniswerte in[P](a) = (b1, . . . ,bk).
Die Funktion FP:N→Nist definiert durch FP(n) =max
( fP(a)
a∈Nk mit
k
X
i=1
ai≤n )
Intuitiv: Die FunktionFP beschreibt das maximale Wachstum / die maximale Zunahme der Variablenwerte im LOOP-ProgrammP.
Wachstumslemma: Definitionen
Wir betrachten ein fixes, wohl-formuliertes LOOP-Programm P mit den k Variablen x1,x2, . . . ,xk.
Wir erinnern uns (aus VL-11): Das LOOP-ProgrammP berechnet diek-stellige Funktion[P] :Nk →Nk.
F¨ur die Anfangswertea= (a1, . . . ,ak)∈Nk der Variablen definieren wir fP(a) :=b1+b2+· · ·+bk als die Summe aller Ergebniswerte in[P](a) = (b1, . . . ,bk).
Die Funktion FP:N→Nist definiert durch FP(n) =max
( fP(a)
a∈Nk mit
k
X
i=1
ai≤n )
Intuitiv: Die FunktionFP beschreibt das maximale Wachstum / die maximale Zunahme der Variablenwerte im LOOP-ProgrammP.
Wachstumslemma: Definitionen
Wir betrachten ein fixes, wohl-formuliertes LOOP-Programm P mit den k Variablen x1,x2, . . . ,xk.
Wir erinnern uns (aus VL-11): Das LOOP-ProgrammP berechnet diek-stellige Funktion[P] :Nk →Nk.
F¨ur die Anfangswertea= (a1, . . . ,ak)∈Nk der Variablen definieren wir fP(a) :=b1+b2+· · ·+bk als die Summe aller Ergebniswerte in[P](a) = (b1, . . . ,bk).
Die Funktion FP:N→Nist definiert durch FP(n) =max
( fP(a)
a∈Nk mit
k
X
i=1
ai≤n )
Intuitiv: Die FunktionFP beschreibt das maximale Wachstum / die maximale Zunahme der Variablenwerte im LOOP-ProgrammP.
Wachstumslemma: Definitionen
Wir betrachten ein fixes, wohl-formuliertes LOOP-Programm P mit den k Variablen x1,x2, . . . ,xk.
Wir erinnern uns (aus VL-11): Das LOOP-ProgrammP berechnet diek-stellige Funktion[P] :Nk →Nk.
F¨ur die Anfangswertea= (a1, . . . ,ak)∈Nk der Variablen definieren wir fP(a) :=b1+b2+· · ·+bk als die Summe aller Ergebniswerte in[P](a) = (b1, . . . ,bk).
Die Funktion FP:N→Nist definiert durch FP(n) =max
( fP(a)
a∈Nk mit
k
X
i=1
ai≤n )
Intuitiv: Die FunktionFP beschreibt das maximale Wachstum / die maximale Zunahme der Variablenwerte im LOOP-ProgrammP.
Wachstumslemma: Zentrale Aussage
Wir werden nun zeigen,
dassFP(n)f¨ur allen∈Necht kleiner ist alsA(m,n),
wenn der Parametermnur gen¨ugend gross (in Abh¨angigkeit vonP) gew¨ahlt wird.
Lemma
F¨ur jedes LOOP-ProgrammP gibt es eine nat¨urliche ZahlmP, so dass f¨ur allen∈Ngilt: FP(n)<A(mP,n).
Beachte:
F¨ur jedes feste ProgrammP ist der ParametermP eine Konstante.
Wachstumslemma: Zentrale Aussage
Wir werden nun zeigen,
dassFP(n)f¨ur allen∈Necht kleiner ist alsA(m,n),
wenn der Parametermnur gen¨ugend gross (in Abh¨angigkeit vonP) gew¨ahlt wird.
Lemma
F¨ur jedes LOOP-ProgrammP gibt es eine nat¨urliche ZahlmP, so dass f¨ur allen∈Ngilt: FP(n)<A(mP,n).
Beachte:
F¨ur jedes feste ProgrammP ist der ParametermP eine Konstante.
Beweis: Induktion ¨ uber den Syntax-Baum
Induktionsanfang (Zuweisungen)
Es seiP von der Formxi :=xj+c f¨urc ∈ {−1,0,1}.
Wir werden zeigen: FP(n)<A(2,n).
Induktionsschritt (Hintereinanderausf¨uhrung) Es seiP von der FormP1;P2.
Induktionsannahme: ∃q∈N:FP1(`)<A(q, `)und FP2(`)<A(q, `).
Wir werden zeigen: FP(n)<A(q+1,n).
Induktionsschritt (LOOP-Konstrukt)
Es seiP von der Form “LOOPxi DOQ ENDLOOP”
Induktionsannahme: ∃q∈N:FQ(`)<A(q, `).
Wir werden zeigen: FP(n)<A(q+1,n).
Beweis: Induktionsanfang
Induktionsanfang (Zuweisungen)
Es seiP von der Form “xi:=xj+c” f¨urc∈ {−1,0,1}
Dann gilt: FP(n)≤2n+1, und somit FP(n)<A(2,n)
Argument:
P ver¨andert nur den Wert der Variablenxi.
Am Anfang war xi≥0, und am Ende istxi =xj+c ≤n+1. Die Summe aller Variablenwerte erh¨oht sich um h¨ochstensn+1, und springt damit von h¨ochstensn(am Anfang) auf h¨ochstens 2n+1(am Ende).
Beweis: Induktionsanfang
Induktionsanfang (Zuweisungen)
Es seiP von der Form “xi:=xj+c” f¨urc∈ {−1,0,1}
Dann gilt: FP(n)≤2n+1, und somit FP(n)<A(2,n) Argument:
P ver¨andert nur den Wert der Variablen xi.
Am Anfang war xi≥0, und am Ende istxi =xj+c ≤n+1. Die Summe aller Variablenwerte erh¨oht sich um h¨ochstensn+1, und springt damit von h¨ochstensn(am Anfang) auf h¨ochstens 2n+1(am Ende).
Beweis: Induktionsanfang
Induktionsanfang (Zuweisungen)
Es seiP von der Form “xi:=xj+c” f¨urc∈ {−1,0,1}
Dann gilt: FP(n)≤2n+1, und somit FP(n)<A(2,n) Argument:
P ver¨andert nur den Wert der Variablen xi.
Am Anfang war xi≥0, und am Ende istxi =xj+c≤n+1.
Die Summe aller Variablenwerte erh¨oht sich um h¨ochstensn+1, und springt damit von h¨ochstensn(am Anfang) auf h¨ochstens 2n+1(am Ende).
Beweis: Induktionsanfang
Induktionsanfang (Zuweisungen)
Es seiP von der Form “xi:=xj+c” f¨urc∈ {−1,0,1}
Dann gilt: FP(n)≤2n+1, und somit FP(n)<A(2,n) Argument:
P ver¨andert nur den Wert der Variablen xi.
Am Anfang war xi≥0, und am Ende istxi =xj+c≤n+1.
Die Summe aller Variablenwerte erh¨oht sich um h¨ochstensn+1, und springt damit von h¨ochstensn(am Anfang) auf h¨ochstens 2n+1(am Ende).
Beweis: Schritt f¨ ur Hintereinanderausf¨ uhrung
Induktionsschritt (Hintereinanderausf¨uhrung) Es seiP von der Form “P1;P2”
Induktionsannahme: ∃q∈N:FP1(`)<A(q, `)und FP2(`)<A(q, `).
Dann gilt: FP(n) < A(q+1,n)
Argument:
Wir verwenden die Absch¨atzung (M.3): A(q,n)≤A(q+1,n−1) Dann folgt mit den Monotonie Eigenschaften, dass
FP(n) ≤ FP2(FP1(n)) (Def)
< A(q,A(q,n)) (Ind)
< A(q,A(q+1,n−1)) (Mono)
= A(q+1,n) (Def)
Beweis: Schritt f¨ ur Hintereinanderausf¨ uhrung
Induktionsschritt (Hintereinanderausf¨uhrung) Es seiP von der Form “P1;P2”
Induktionsannahme: ∃q∈N:FP1(`)<A(q, `)und FP2(`)<A(q, `).
Dann gilt: FP(n) < A(q+1,n) Argument:
Wir verwenden die Absch¨atzung (M.3): A(q,n)≤A(q+1,n−1) Dann folgt mit den Monotonie Eigenschaften, dass
FP(n) ≤ FP2(FP1(n)) (Def)
< A(q,A(q,n)) (Ind)
< A(q,A(q+1,n−1)) (Mono)
= A(q+1,n) (Def)
Beweis: Schritt f¨ urs LOOP-Konstrukt (1)
Induktionsschritt (LOOP-Konstrukt)
Es seiP von der Form “LOOPxi DOQ ENDLOOP”
Induktionsannahme liefert: ∃q∈N:FQ(`)<A(q, `) Dann gilt: FP(n) ≤ A(q+1,n).
Argument:
Wir betrachten jenen Wertα=α(n)f¨ur die Variablexi,
mit dem der gr¨osstm¨ogliche FunktionswertFP(n)angenommen wird Dann giltFP(n) ≤ FQ(FQ(. . .FQ(FQ(n−α)). . .)) +α,
wobei die FunktionFQ(·)hier α-fach ineinander eingesetzt ist. Die Induktionsannahme gibt uns FQ(`)<A(q, `)
Dies wenden wir auf die ¨ausserste FunktionFQ an und erhalten FP(n) < A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α
Beweis: Schritt f¨ urs LOOP-Konstrukt (1)
Induktionsschritt (LOOP-Konstrukt)
Es seiP von der Form “LOOPxi DOQ ENDLOOP”
Induktionsannahme liefert: ∃q∈N:FQ(`)<A(q, `) Dann gilt: FP(n) ≤ A(q+1,n).
Argument:
Wir betrachten jenen Wertα=α(n)f¨ur die Variablexi,
mit dem der gr¨osstm¨ogliche FunktionswertFP(n)angenommen wird
Dann giltFP(n) ≤ FQ(FQ(. . .FQ(FQ(n−α)). . .)) +α, wobei die FunktionFQ(·)hier α-fach ineinander eingesetzt ist. Die Induktionsannahme gibt uns FQ(`)<A(q, `)
Dies wenden wir auf die ¨ausserste FunktionFQ an und erhalten FP(n) < A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α
Beweis: Schritt f¨ urs LOOP-Konstrukt (1)
Induktionsschritt (LOOP-Konstrukt)
Es seiP von der Form “LOOPxi DOQ ENDLOOP”
Induktionsannahme liefert: ∃q∈N:FQ(`)<A(q, `) Dann gilt: FP(n) ≤ A(q+1,n).
Argument:
Wir betrachten jenen Wertα=α(n)f¨ur die Variablexi,
mit dem der gr¨osstm¨ogliche FunktionswertFP(n)angenommen wird Dann giltFP(n) ≤ FQ(FQ(. . .FQ(FQ(n−α)). . .)) +α,
wobei die FunktionFQ(·)hierα-fach ineinander eingesetzt ist.
Die Induktionsannahme gibt uns FQ(`)<A(q, `)
Dies wenden wir auf die ¨ausserste FunktionFQ an und erhalten FP(n) < A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α
Beweis: Schritt f¨ urs LOOP-Konstrukt (1)
Induktionsschritt (LOOP-Konstrukt)
Es seiP von der Form “LOOPxi DOQ ENDLOOP”
Induktionsannahme liefert: ∃q∈N:FQ(`)<A(q, `) Dann gilt: FP(n) ≤ A(q+1,n).
Argument:
Wir betrachten jenen Wertα=α(n)f¨ur die Variablexi,
mit dem der gr¨osstm¨ogliche FunktionswertFP(n)angenommen wird Dann giltFP(n) ≤ FQ(FQ(. . .FQ(FQ(n−α)). . .)) +α,
wobei die FunktionFQ(·)hierα-fach ineinander eingesetzt ist.
Die Induktionsannahme gibt uns FQ(`)<A(q, `)
Dies wenden wir auf die ¨ausserste FunktionFQ an und erhalten FP(n) < A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α
Beweis: Schritt f¨ urs LOOP-Konstrukt (1)
Induktionsschritt (LOOP-Konstrukt)
Es seiP von der Form “LOOPxi DOQ ENDLOOP”
Induktionsannahme liefert: ∃q∈N:FQ(`)<A(q, `) Dann gilt: FP(n) ≤ A(q+1,n).
Argument:
Wir betrachten jenen Wertα=α(n)f¨ur die Variablexi,
mit dem der gr¨osstm¨ogliche FunktionswertFP(n)angenommen wird Dann giltFP(n) ≤ FQ(FQ(. . .FQ(FQ(n−α)). . .)) +α,
wobei die FunktionFQ(·)hierα-fach ineinander eingesetzt ist.
Die Induktionsannahme gibt uns FQ(`)<A(q, `)
Dies wenden wir auf die ¨ausserste FunktionFQ an und erhalten FP(n) < A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α
Beweis: Schritt f¨ urs LOOP-Konstrukt (2)
Und weiter geht’s:
Wiederholte Anwendung liefert dieα-zeilige Ungleichungskette FP(n)< A(q,FQ(,FQ(. . .FQ(FQ(n−α)). . .)) +α
< A(q,A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α ...
< A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) +α
Daraus ergibt sich FP(n) ≤ A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) Im innersten Teil verwenden wir A(q,n−α)≤A(q+1,n−α−1) Ergo: FP(n)≤A(q,A(q,A(q, . . .A(q,A(q+1,n−α−1))). . .)) Jetzt arbeiten wir uns(α−1)-mal von innen nach aussen vor, und wenden in jedem Schritt die Ackermann Definition an.
Das ergibt FP(n)≤A(q+1,n−1)undFP(n)<A(q+1,n).
Beweis: Schritt f¨ urs LOOP-Konstrukt (2)
Und weiter geht’s:
Wiederholte Anwendung liefert dieα-zeilige Ungleichungskette FP(n)< A(q,FQ(,FQ(. . .FQ(FQ(n−α)). . .)) +α
< A(q,A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α ...
< A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) +α
Daraus ergibt sich FP(n) ≤ A(q,A(q,A(q, . . . ,A(q,n−α)). . .))
Im innersten Teil verwenden wir A(q,n−α)≤A(q+1,n−α−1) Ergo: FP(n)≤A(q,A(q,A(q, . . .A(q,A(q+1,n−α−1))). . .)) Jetzt arbeiten wir uns(α−1)-mal von innen nach aussen vor, und wenden in jedem Schritt die Ackermann Definition an.
Das ergibt FP(n)≤A(q+1,n−1)undFP(n)<A(q+1,n).
Beweis: Schritt f¨ urs LOOP-Konstrukt (2)
Und weiter geht’s:
Wiederholte Anwendung liefert dieα-zeilige Ungleichungskette FP(n)< A(q,FQ(,FQ(. . .FQ(FQ(n−α)). . .)) +α
< A(q,A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α ...
< A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) +α
Daraus ergibt sich FP(n) ≤ A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) Im innersten Teil verwenden wir A(q,n−α)≤A(q+1,n−α−1) Ergo: FP(n)≤A(q,A(q,A(q, . . .A(q,A(q+1,n−α−1))). . .))
Jetzt arbeiten wir uns(α−1)-mal von innen nach aussen vor, und wenden in jedem Schritt die Ackermann Definition an.
Das ergibt FP(n)≤A(q+1,n−1)undFP(n)<A(q+1,n).
Beweis: Schritt f¨ urs LOOP-Konstrukt (2)
Und weiter geht’s:
Wiederholte Anwendung liefert dieα-zeilige Ungleichungskette FP(n)< A(q,FQ(,FQ(. . .FQ(FQ(n−α)). . .)) +α
< A(q,A(q,FQ(. . .FQ(FQ(n−α)). . .)) +α ...
< A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) +α
Daraus ergibt sich FP(n) ≤ A(q,A(q,A(q, . . . ,A(q,n−α)). . .)) Im innersten Teil verwenden wir A(q,n−α)≤A(q+1,n−α−1) Ergo: FP(n)≤A(q,A(q,A(q, . . .A(q,A(q+1,n−α−1))). . .)) Jetzt arbeiten wir uns(α−1)-mal von innen nach aussen vor, und wenden in jedem Schritt die Ackermann Definition an.
Das ergibtFP(n)≤A(q+1,n−1)undFP(n)<A(q+1,n).
Die M¨ achtigkeit von LOOP
Die M¨ achtigkeit von LOOP (1)
Satz
Die Ackermann Funktion ist nicht LOOP-berechenbar.
Beweis:
Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.
Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).
Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).
Das Wachstumslemma impliziertB(mP)≤FP(mP).
Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP) Widerspruch! QED!
Die M¨ achtigkeit von LOOP (1)
Satz
Die Ackermann Funktion ist nicht LOOP-berechenbar.
Beweis:
Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.
Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).
Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).
Das Wachstumslemma impliziertB(mP)≤FP(mP).
Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP) Widerspruch! QED!
Die M¨ achtigkeit von LOOP (1)
Satz
Die Ackermann Funktion ist nicht LOOP-berechenbar.
Beweis:
Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.
Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).
Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).
Das Wachstumslemma impliziertB(mP)≤FP(mP).
Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP) Widerspruch! QED!
Die M¨ achtigkeit von LOOP (1)
Satz
Die Ackermann Funktion ist nicht LOOP-berechenbar.
Beweis:
Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.
Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).
Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).
Das Wachstumslemma impliziertB(mP)≤FP(mP).
Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP) Widerspruch! QED!
Die M¨ achtigkeit von LOOP (1)
Satz
Die Ackermann Funktion ist nicht LOOP-berechenbar.
Beweis:
Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.
Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).
Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).
Das Wachstumslemma impliziertB(mP)≤FP(mP).
Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP)
Widerspruch! QED!
Die M¨ achtigkeit von LOOP (1)
Satz
Die Ackermann Funktion ist nicht LOOP-berechenbar.
Beweis:
Zwecks Widerspruchs nehmen wir an, dass die Ackermann Funktion LOOP-berechenbar ist. Dann gibt es auch ein LOOP-ProgrammP, das die Hilfsfunktion B(n) =A(n,n)berechnet.
Das Wachstumslemma gibt uns eine ZahlmP, sodass f¨ur allen∈Ngilt: FP(n)<A(mP,n).
Wird nun das LOOP-ProgrammP mit der Eingabe mP aufgerufen, so berechnet es den FunktionswertB(mP).
Das Wachstumslemma impliziertB(mP)≤FP(mP).
Zusammengefasst: B(mP)≤FP(mP)<A(mP,mP) =B(mP) Widerspruch! QED!
Die M¨ achtigkeit von LOOP (2)
Da die Ackermann Funktion (durch eine TM) berechenbar ist, folgt:
Korollar
Die Menge der LOOP-berechenbaren Funktionen
bildet eineechte Teilmengeder berechenbaren Funktionen.
Ergo: Die Programmiersprache LOOP ist nicht Turing-m¨achtig
Satz (ohne Beweis)
Die Menge der LOOP-berechenbaren Funktionen
f¨allt mit der Menge derprimitiv rekursiven Funktionenzusammen.
Die M¨ achtigkeit von LOOP (2)
Da die Ackermann Funktion (durch eine TM) berechenbar ist, folgt:
Korollar
Die Menge der LOOP-berechenbaren Funktionen
bildet eineechte Teilmengeder berechenbaren Funktionen.
Ergo: Die Programmiersprache LOOP ist nicht Turing-m¨achtig
Satz (ohne Beweis)
Die Menge der LOOP-berechenbaren Funktionen
f¨allt mit der Menge derprimitiv rekursiven Funktionenzusammen.
Primitiv rekursive Funktionen (1)
Die primitiv rekursiven Funktionen bilden eine Unterfamilie der Funktionen Nk →Nmitk ≥0.
Die primitiv rekursiven Funktionen sind induktiv definiert, und k¨onnen im wesentlichen durch zwei Operationen aus den sogenannten Basisfunktionen zusammengebaut werden.
Definition (Basisfunktionen)
Die folgenden drei Funktionsmengen bilden die Basisfunktionen unter den primitiv rekursiven Funktionen:
Alle konstanten Funktionen sind primitiv rekursiv.
Alle Projektionen (Abbildungen auf eine der Komponenten) sind primitiv rekursiv.
Die Nachfolgerfunktions(n) =n+1ist primitiv rekursiv.
Primitiv rekursive Funktionen (1)
Die primitiv rekursiven Funktionen bilden eine Unterfamilie der Funktionen Nk →Nmitk ≥0.
Die primitiv rekursiven Funktionen sind induktiv definiert, und k¨onnen im wesentlichen durch zwei Operationen aus den sogenannten Basisfunktionen zusammengebaut werden.
Definition (Basisfunktionen)
Die folgenden drei Funktionsmengen bilden die Basisfunktionen unter den primitiv rekursiven Funktionen:
Alle konstanten Funktionen sind primitiv rekursiv.
Alle Projektionen (Abbildungen auf eine der Komponenten) sind primitiv rekursiv.
Die Nachfolgerfunktions(n) =n+1ist primitiv rekursiv.
Primitiv rekursive Funktionen (2)
Definition
Des weiteren sind die folgenden Funktionen primitiv rekursiv:
Die Komposition von primitiv rekursiven Funktionen ist primitiv rekursiv.
Jede Funktion, die durchprimitive Rekursionaus primitiv rekursiven Funktionen entsteht ist primitiv rekursiv.
Wenn die beiden Funktioneng:Nk →Nundh:Nk+2→Nprimitiv rekursiv sind, so ist auch die wie folgt definierte Funktion
f :Nk+1→Nprimitiv rekursiv:
f(0,x1, . . . ,xk) = g(x1, . . . ,xk)
f(n,x1, . . . ,xk) = h(n,f(n−1,x1, . . . ,xk), x1, . . . ,xk)
Zusammenfassung: Berechenbarkeit
Zusammenfassung / Berechenbarkeit (1)
Wir haben die folgendenTuring-m¨achtigenRechenmodelle und Programmiersprachen kennen gelernt:
Turingmaschine (TM) k-Band-TM
Registermaschine (RAM)
eingeschr¨ankte Registermaschine (Mini-RAM)
WHILE-Programme (und somit C, Java, Pascal, Postscript, etc.) LOOP-Programme sindnicht Turing-m¨achtig.
Zusammenfassung / Berechenbarkeit (2)
Church-Turing-These
Die Menge der TM-berechenbaren Funktionen stimmt mit der Menge der
“intuitiv berechenbaren” Funktionen ¨uberein.
In anderen Worten:
Ein Problem kann genau dann “algorithmisch gel¨ost werden”, wenn es eine TM f¨ur dieses Problem gibt.
An Stelle von “TM” k¨onnen wir auch jedes andere Turing-m¨achtige Rechenmodell in die obigen S¨atze einf¨ugen.
Zusammenfassung / Berechenbarkeit (3)
Berechenbarkeitslandschaft:
Rekursiv aufz¨ahlbare
Probleme
H
H D
Probleme mit rekursiv aufz¨ahlbarem
Komplement H H D Rekursive
Probleme
Unentscheidbare Probleme mit unentscheidbarem Komplement Htot
MPCP PCP
Dioph A(·,·)
primitiv rekursive Probleme
Zusammenfassung / Berechenbarkeit (4)
Wichtige nicht berechenbare Probleme:
Halteproblem, in verschiedenen Varianten
Satz von Rice:Aussagen ¨uber Eigenschaften von Funktionen, die durch eine gegebene TM berechnet werden, sind nicht entscheidbar Schlussfolgerung:Die automatische Verifikation von Programmen in einer TM-m¨achtigen Programmiersprachen ist unm¨oglich
Postsches Korrespondenzproblem Hilberts 10. Problem
Zusammenfassung / Berechenbarkeit (5)
Methoden zum Nachweis von Nicht-Berechenbarkeit:
Diagonalisierung Unterprogrammtechnik Satz von Rice
Reduktionen (spezielle Variante der Unterprogrammtechnik)