4. Eigenschaften von Algorithmen 67
4.2. Berechenbarkeit und Entscheidbarkeit
4.2.1. Existenz nichtberechenbarer Funktionen
Wir gehen der Frage nach, welche Funktionen sich ¨uberhaupt durch Algorithmen
— applikative, imperative oder andere — berechnen lassen.
Gibt es z.B. Funktionen, die sich nicht durch irgendeinen Algorithmus berech-nen lassen?
Daß dies tats ¨achlich der Fall sein muß, l ¨aßt sich unschwer einsehen. Wir be-nutzen hierzu nur eine — sicherlich unabdingbare — Eigenschaft eines jeden Algo-rithmus, n ¨amlich:
4.2. Berechenbarkeit und Entscheidbarkeit Jeder Algorithmus l ¨aßt sich durch einen endlichen Text
¨
uber einem festen, endlichen Alphabet beschreiben.
SeiA = fa1
;:::;a
n
g ein Alphabet mit der alphabetischen Ordnunga1
< a
2
<
::: < a
n. Mit A bezeichnen wir die Menge der Texte (Zeichenketten, endlichen Folgen, Worte) ¨uberA:
Hierbei istder leere Text der L¨ange 0.
Wir k¨onnenA nun auflisten, und zwar
1. der L ¨ange nach. Zu jeder L ¨ange l gibt esnl verschiedene Texte ¨uber A, also endlich viele.
2. lexikographisch innerhalb der Texte gleicher L ¨ange:
b
Hierdurch ist eine Ordnung aufAeindeutig bestimmt, so daß wir von dem ersten, zweiten, dritten, etc. Text ¨uberA (gem ¨aß dieser Ordnung) reden k¨onnen. Daraus folgt:
Satz 4.1 A ist abz ¨ahlbar. 2
Da es nicht mehr berechenbare Funktionen als sie berechnende Algorithmen und nicht mehr Algorithmen als sie beschreibende Texte geben kann, gilt offenbar folgende Aussage:
Satz 4.2 Die Menge der berechenbaren Funktionen ist abz ¨ahlbar. 2 Betrachten wir nun speziell einstellige Funktionen auf Z, f : Z ! Z. Wie bewiesen, gibt es nur abz ¨ahlbar viele berechenbare solche Funktionen. Funktionen insgesamt gibt es jedoch weit mehr, wie der folgende Satz zeigt:
Satz 4.3 Die Menge F = ff j f : Z ! Zg der einstelligen Funktionen auf Z
¨
uberabz ¨ahlbar.
Beweis: Wir nehmen an, F sei abz ¨ahlbar, so daß wir nun alle f 2 F auflisten k¨onnen,F = ff0
4. Eigenschaften von Algorithmen Dann ist f ¨ur i = 1;2;:::g(i) 6= fi
(i), also ist f ¨ur i = 1;2;::: immer g 6= fi. g kommt demnach in der obigen Folge nicht vor. Offensichtlich istgaber eine einstel-lige Funktion aufZund m ¨ußte somit in der obigen Folge aller dieser Funktionen vorkommen. Der Widerspruch l¨aßt sich nur l ¨osen, wenn wir die Annahme
fallen-lassen,F sei abz ¨ahlbar. 2
Berechenbare Funktionen sind also unter allen Funktionen genauso “seltene”
Ausnahmen wie ganze (oder nat ¨urliche oder rationale) Zahlen unter den reellen.
Bemerkung 4.5 Die obige Beweismethode ist unter dem Namen “Cantorsches Dia-gonalverfahren” bekannt. Auf ¨ahnliche Weise hat Cantor erstmals bewiesen, daß die reellen Zahlen ¨uberabz ¨ahlbar sind.
Nachdem wie wissen, daß berechenbare Funktionen eher seltene Ausnahmen sind, ist die Frage naheliegend, ob sich nicht-berechenbare Funktionen konkret angeben lassen. Um zu beweisen, daß eine gegebene Funktion berechenbar ist, braucht man nur einen Algorithmus anzugeben, der sie berechnet. So schwie-rig dies in Einzelfall sein mag, so ist es doch prinzipiell schwieschwie-riger zubeweisen, daß eine gegebene Funktion nicht berechenbar ist. Die erfordert n¨amlich eine Be-weisf ¨uhrung, ¨uber alle denkbaren und m¨oglichen Algorithmen!
Derartige Ergebnisse ¨uber Algorithmen lassen sich nur gewinnen, wenn man den Begriff des Algorithmus mit hinreichender mathematischer Genauigkeit defi-niert, wie dies am Anfang dieses Kapitels geschah.
4.2.2. Konkrete Nicht-berechenbare Funktionen
Nun kehren wir zu dem Problem zur ¨uck, eine nicht berechenbare Funktion konkret anzugeben. Wir benutzen dazu ein beliebiges Algorithmenmodell, welches folgen-den Kriterien gen ¨ugt:
1. Berechnet werden partielle Funktionen f : A ! A uber einem festen Al-¨ phabetA.
2. Auch die Algorithmen selbst lassen sich als Text ¨uberAdarstellen.
Damit k ¨onnen Algorithmentexte wiederum als Eingaben f ¨ur Algorithmen genom-men werden!
Bemerkung 4.6 Z.B. lassen sich Markov-Algorithmen leicht als Text ¨uber einem geeigneten AlphabetA codieren. Codierungen von Algorithmen durch nat ¨urliche Zahlen gehen auf K. G ¨odel (1931) zur ¨uck. Man spricht von “G¨odelisierung”. 2 Definition 4.9 Sei x 2 A. Dann bezeichnet 'x die vom Algorithmus mit Text
x berechnete Funktion. Ist x kein sinnvoller Algorithmentext, so sei 'x ¨uberall undefiniert.
4.2. Berechenbarkeit und Entscheidbarkeit Definition 4.10 Seif : A !A eine partielle Funktion. Dann ist
domf := fx2A
jf(x)ist definiertg
der Urbildbereich vonf (“domain”). 2
Nun sind wir endlich in der Lage, eine nicht berechenbare Funktion konkret anzugeben. Dazu seia2Aein fest gew ¨ahlter Buchstabe.
Satz 4.4 Die (totale) Funktionh: A ! A,
h(x) = (
; fallsx2dom'x
a sonst (4.1)
ist nicht berechenbar. 2
Die obige Funktionhist mathematischer Ausdruck eines recht anschaulichen Pro-blems, des sog. Halteproblems. h entscheidet durch die Ausgabe oder a, ob x 2
dom '
x ist oder nicht. Nun bedeutet x 2 dom 'x, daß'x
(y) definiert ist, und das heißt, daß der Algorithmus mit Text x bei Eingabe vony irgendwann anh ¨alt. Die Funktionhdr ¨uckt also die Frage aus:
“H ¨alt ein Algorithmus irgendwann an, wenn man ihm seinen eigenen Text eingibt?”
4.2.3. Das Halteproblem
Entscheidungsprobleme, derern Entscheidungsfunktion nicht berechenbar ist, nennt man nicht entscheidbar. Es gibt eine große F ¨ulle nicht entscheidbarer Probleme.
Das Problemx 2dom'x ist ein spezielles Halteproblem, auch Selbstanwendungs-problem genannt. Das allgemeine HalteSelbstanwendungs-problem isty2dom'x, also:
“H ¨alt Algorithmusxbei der Eingabe vony?”
Korollar 4.5 Das allgemeine Halteproblem ist nicht entscheidbar.
Beweis: G ¨abe es einen Entscheidungsalgorithmus f ¨ur y 2 dom 'x, so k¨onnte
man damit auch speziellx2dom'xentscheiden. 2
Bemerkung 4.7 So einfach dieser Beweis ist, er zeigt das typische Grundmuster, n ¨amlich “Reduktion auf ein als nicht entscheidbar bewiesenes Problem”. Fast alle Nicht-Entscheidbarkeits-Beweise sind so konstruiert: “W¨are das (neue) Problem Y entscheibar, so auch das (alte) Problem X”. Das Halteproblem spielt hierbei die Rolle einer Wurzel, auf die letzten Endes alle Nicht-Entscheidbarkeits-Probleme
reduziert werden. 2
4. Eigenschaften von Algorithmen
Wegen der grundlegenden Bedeutung des Halteproblems f ¨ur die Theorie der Ent-scheidbarkeit wollen wir zun ¨achst einen “anschaulichen” Beweis f ¨ur seine Nicht-Entscheidbarkeit liefern.
Angenommen, wir h ¨atten eine Maschine (Algorithmus) STOP mit zwei Einga-ben, n ¨amlich einem Algorithmentext x und einer Eingabe y f ¨ur x, sowie zwei Aus-gaben:
JA: x stoppt bei Eingabe von y
NEIN: x stoppt nicht bei Eingabe von y Graphisch dargestellt:
STOP x
y NEIN
JA
Mit dieser Maschine STOP k ¨onnten wir dann eine neue Maschine SELTSAM konstruieren:
STOP x
x NEIN
JA SELTSAM
x
OK
Bei Eingabe von x wird getestet, ob x bei Eingabe von x stoppt. Im JA-Fall wird in eine Endlosschleife gegangen, die nie anh ¨alt. Im NEIN-Fall h ¨alt SELTSAM an mit der Anzeige OK.
Nun geben wir SELTSAM als Eingabe f ¨ur sich selbst ein und fragen:
H ¨alt SELTSAM bei der Eingabe von SELTSAM?
1. Wenn ja, so wird der JA-Ausgang von STOP angelaufen und SELTSAM ger ¨at in die Endlosschleife, h ¨alt also nicht. Widerspruch!
2. Wenn nein, so wird der NEIN-Ausgang von STOP angelaufen und SELTSAM stoppt mit OK. Widerspruch!
Diese Widerspr ¨uche folgen aus der Annahme, daß eine STOP-Maschine exi-stiert, was daher verneint werden muß.
4.2. Berechenbarkeit und Entscheidbarkeit Beweis 4.6 Mathematischer Beweis von Satz 4.4: Wir nehmen an,hsei berechen-bar, dann ist aufgrund der Church’schen These auch die Funktiong: A!A
g(x) = (
'
x
(x)a; fallsh(x) =
sonst
berechenbar. Nun ist sicherlichg(x) 6='x
(x)f ¨ur allex 2A. Dagberechenbar ist, gibt es eine Algorithmus mit einem Texty2A, dergberechnet, d.h. es istg='y. Damit folgt nun:
'
y
(y) = g(y) 6= '
y (y)
Dies ist offenbar ein Widerspruch, der sich nur dadurch l¨osen l ¨aßt, daß wir die
Annahme aufgeben,hsei berechenbar. 2
Bemerkung 4.8 Dies ist wiederum ein Diagonalbeweis.
4.2.4. Nicht-entscheidbare Probleme
Das Halteproblem ist ein Beispiel f ¨ur ein semantisches Problem von Algorithmen, n ¨amlich ein Problem der Art:
Kann man anhand eines Programmtextes (Syntax) entscheiden, ob die berechnete Funktion (Semantik) eine bestimmte Eigenschaft hat?
Beim Halteproblem ist dies die Eigenschaft, ob die berechnete Funktion an ei-ner bestimmten Stelle definiert ist. Wie steht es nun mit anderen semantischen Eigenschaften von Algorithmen?
Aus einem tiefliegenden Satz der Algorithmentheorie (Satz von Rice) folgt die folgende bemerkenswerte Aussage:
Jede nicht triviale semantische Eigenschaft von Algorithmen ist nicht-entscheidbar!
Dabei ist eine Eigenschaft genau dann trivial, wenn entweder jede oder keine berechnete Funktion sie hat. Nichttriviale semantische Eigenschaften sind dem-nach solche, die manche berechneten Funktionen haben und manche nicht.
Nicht entscheidbar sind also u.a. folgende Probleme:
1. Ist die berechnete Funktion total? ¨uberall undefiniert? injektiv? surjektiv?
bijektiv? etc. etc.
2. Berechnen zwei gegebene Algorithmen dieselbe Funktion?
3. Ist ein gegebener Algorithmus korrekt, d.h. berechnet er die gegebene (gew¨ unsch-te) Funktion?
4. Eigenschaften von Algorithmen
Diese Ergebnisse bedeuten nicht, daß man solche Fragen nicht im Einzelfall ent-scheiden k¨onnte! Dies ist durchaus m ¨oglich. So behandeln wir z.B. im n ¨achsten Abschnitt das Problem, die Korrektheit von Algorithmen nachzuweisen. Es ist je-doch prinzipiell unm ¨oglich, eine allgemeine Methode hierf ¨ur zu finden, also z.B.
einen Algorithmus, der die Korrektheit aller Algorithmen nachweist (und damit auch seine eigene!).
4.2.5. Post’sches Korrespondenzproblem
Ein besonders einfaches und verbl ¨uffendes nicht-entscheidbares Problem ist das Post’sche Korrespondenzproblem (E. Post): Gegeben seien ein AlphabetAund zwei gleichlange Listen von Worten ¨uberA:
= (
fg und n 1. Das Problem besteht darin, eine
“Korrespondenz” zu finden, d.h. eine endliche Folge(i1
;i
Dieses Post’sche Korrespondenzproblem besitzt eine L¨osung, n ¨amlich (2,1,1,3):
10111:1:1:10 = 10:111:111:0
2
Beispiel 4.14
A = f0;1g = (10; 011; 101)
= (101; 11; 011)
Dieses Post’sche Korrespondenzproblem besitzt keine L¨osung. G ¨abe es n ¨amlich eine, so m ¨ußte sie mit 1 anfangen: