Skript in PDF - Theoretische Informatik - Technische Universität ...
Skript in PDF - Theoretische Informatik - Technische Universität ...
Skript in PDF - Theoretische Informatik - Technische Universität ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
114 KAPITEL 4. CHURCHSCHE THESE<br />
Bemerkung 3. Nicht jede Tur<strong>in</strong>g-berechenbare Funktion ist primitiv-rekursiv. In<br />
der Tat s<strong>in</strong>d alle primitiv-rekursiven total (d.h. überall def<strong>in</strong>iert), und es gibt partielle<br />
Tur<strong>in</strong>g-berechenbare Funktionen.<br />
Aber auch alle totalen Tur<strong>in</strong>g-berechenbaren Funktionen s<strong>in</strong>d leider nicht primitivrekursiv.<br />
Das können wir abstrakt wie folgt zeigen: alle primitiv-rekursiven Funktionen<br />
können wir systematisch aufzählen, z.B. setzen wir f0 = K0, f1 = succ, f2 = π 1 1 .<br />
Mit den gegebenen Funktionen f0, . . . , fi machen wir alle möglichen Verknüpfungen<br />
und primitiven Rekursionen. Dabei entstehen fi+1, . . . , fj, dann ist fj+1 die nächste<br />
noch nicht e<strong>in</strong>genommene Projektion, usw. Diese Aufzählung kann bestimmt e<strong>in</strong>e<br />
TM durchführen. Dann ist die Funktion<br />
P(n) = 1 + fn(n, n, . . .,n)<br />
Tur<strong>in</strong>g-berechenbar. Aber P ist nicht primitiv-rekursiv: falls nämlich P = fn, haben<br />
wir<br />
P(n) = 1 + fn(n) = fn(n) – e<strong>in</strong> Widerspruch.<br />
Es ist U. Ackermann 1928 gelungen, e<strong>in</strong> viel konkreteres Beispiel e<strong>in</strong>er Funktion anzugeben,<br />
die nicht primitiv-rekursiv ist, sich aber mit e<strong>in</strong>em e<strong>in</strong>fachen Algorithmus<br />
berechnen läßt. Die Funktion, die man heute Ackermann-Funktion nennt, ist e<strong>in</strong>e<br />
von R. Peter und R. M. Rob<strong>in</strong>son später entdeckte Vere<strong>in</strong>fachung der ursprünglichen<br />
Idee:<br />
Beispiel 9. Die Ackermann-Funktion A :<br />
A(0, m) = m + 1<br />
A(n + 1, 0) = A(n, 1) und<br />
A(n + 1, m + 1) = A(n, A(n + 1, m)).<br />
Es gilt also<br />
A(0, 0) = 1,<br />
A(0, 1) = 2,<br />
A(1, 0) = A(0, 1) = 2,<br />
A(0, 2) = 3,<br />
A(1, 1) = A(0, A(1, 0)) = A(0, 2) = 3,<br />
A(2, 0) = A(1, 1) = 3,<br />
2 → ist wie folgt def<strong>in</strong>iert:<br />
usw. Wir erhalten e<strong>in</strong>en Algorithmus, um jeden Wert A(n, m) zu berechnen: alle<br />
möglichen Paare (n, m) werden so aufgezählt, dass der Wert A(n, m) direkt aus den<br />
vorigen Werten berechnet wird:<br />
(0, 0), (0, 1), (1, 0), (0, 2), (1, 1), (2, 0), . . ., Das können wir durch e<strong>in</strong>e TM realisieren,<br />
und wir sehen also, dass die Ackermann-Funktion TM-berechenbar ist.<br />
Trotzdem ist sie nicht primitiv-rekursiv! Man kann nämlich beweisen, dass sie<br />
schneller wächst, als jede primitiv-rekursive Funktion.<br />
Es gilt z.B. folgendes, wie sich leicht durch Induktion über m beweisen lässt:<br />
A(1, m) = m + 2<br />
A(2, m) = 2m + 3<br />
A(3, m) = 2 m+3 − 3<br />
A(4, m) = 22..2 − 3, wobei 22..2 Zum Beispiel<br />
m + 2 Exponentiationen hat.<br />
A(4, 1) = 216 − 3 und A(4, 2) = 2216 − 3 > 101000 .<br />
Bemerkung 4. Wir wollen jetzt die Klasse aller primitiv-rekursiven Funktionen<br />
durch e<strong>in</strong>e neue Operation ergänzen, um alle berechenbaren Funktionen repräsentieren<br />
zu können. Das wird der M<strong>in</strong>imierungsoperator µ se<strong>in</strong>, der z.B. jeder 2-stelligen<br />
Funktion f(n, m) die 1-stellige Funktion<br />
µf(n) = m<strong>in</strong>{m; f(n, m) = 0}<br />
zuordnet. Hier müssen wir aber aufpassen: µf ist nicht immer def<strong>in</strong>iert, da es für<br />
e<strong>in</strong>e Zahl n geschehen kann, dass f(n, m) = 0 für alle m ∈ . Deshalb arbeiten