Beweisbarkeit, Berechenbarkeit, Unvollst¨andigkeit

Werbung
Kapitel 3
Beweisbarkeit, Berechenbarkeit,
Unvollständigkeit
In diesem Kapitel wollen wir uns mit der Tragweite und Mächtigkeit der im letzten Kapitel erstellten prädikatenlogischen Sprache beschäftigen. Wir werden uns hierbei verschiedenen Themen widmen.
Zunächst soll gezeigt werden, inwieweit sich mit der Sprache der Prädikatenlogik mathematische Strukturen formalisieren lassen. Wir werden dies beispielhaft an der Modellierung von Eigenschaften natürlicher Zahlen verdeutlichen. Mit diesem Rüstzeug wenden wir uns dann dem für die Informatik extrem
wichtigen Begriff der Berechenbarkeit zu. Hierbei werden wir sehen, wie sich sogar die Funktionsweise
eines Computers komplett auf prädikatenlogische Formeln abbilden lässt. Als mathematisches Pendant
zum Begriff der Berechenbarkeit betrachten wir danach den Begriff der Beweisbarkeit. Ziel hierbei wird
es sein, das Beweisen mathematischer Aussagen“ so weit als möglich auf eine rein syntaktische Basis
”
(d.h. auf das blinde Manipulieren von Zeichenketten) zu reduzieren. Abschliessend werden wir einen groben Einblick in die Aussagen der Gödelschen Unvollständigkeitssätze geben. Diese werden uns zeigen,
dass das eben genannte Ziel, Beweisbarkeit zu einen rein mechanischen Vorgang zu machen, in gewisser Weise immer zum Scheitern verurteilt sein wird. Gewissermassen erreichen wir hiermit das höchste
Ziel der Logik, nämlich den formalen Beweis, dass mit reiner Logik nicht alle formalen Probleme gelöst
werden können.
3.1
Modellierung der natürlichen Zahlen
Unser erstes Ziel soll es sein, Eigenschaften der natürlichen Zahlen, durch prädikatenlogische Formeln
abzubilden. Eine der Leitfragestellungen wird hierbei die Folgende sein
Ist es möglich eine prädikatenlogische Formel anzugeben, so dass das einzig mögliche
”
Modell die natürlichen Zahlen sind?“
Im Folgenden werden wir diese zum jetzigen Zeitpunkt noch etwas unpräzise Fragestellung formal präzisieren und verfeinern. Zunächst einmal ist es natürlich klar, dass die obige Formulierung viel zu ausdrucksschwach ist, da sie noch keinerlei Bezug auf die üblichen auf natürlichen Zahlen existierenden
Verknüpfungen (Rechenregeln) nimmt.
Wir definieren uns daher genauer was wir unter den natürlichen Zahlen“ verstehen, indem wir eine
”
angeben. Wir setzen
und enthalte eine Konstante a, eine
konkrete Struktur
einstellige Funktion f x und zwei zweistellige Funktionen plus x y und mal x y mit den folgenden
Interpretationen:
60
a
0
x 1 plus x y x y
mal x y x y
f x
Wenn wir im Folgenden von den natürlichen Zahlen“ reden meinen wir die oben definierte konkrete
”
.
Struktur
Wir werden ganz am Ende dieses Kapitels einsehen müssen, dass die Antwort auf die Frage, ob wir (im
als
Rahmen unserer Prädikatenlogik erster Stufe) eine Formel angeben können, die ausschliesslich
Modell hat, leider Nein“ lautet. Auf dem Weg dahin werden wir aber viele Erkenntnisse über Möglich”
keiten und Grenzen der Logik machen.
3.1.1
Isomorphie von Modellen
Jetzt wollen wir einige triviale Schwachstellen unserer obigen Fragestellung ausräumen. Finden wir zu
einer prädikatenlogischen Formel irgend ein Modell, so können wir natürlich beliebig viele verschiede”
ne“ Modelle angeben, indem wir die Elemente des Universums einfach umbenennen. Derart durch reine
Umbenennung entstandene Modelle wollen wir als gleichwertig (isomorph) zum ursprünglichen Modell
ansehen. Der Vollständigkeit halber definieren wir dazu einen formalen Isomorphiebegriff.
Definition 3.1.1 (Isomorphie von Strukturen) Es seien 1
2 2 Strukturen
1 1 und 2
beide mit Funktionensymbolen f1 fn , Prädiaktensymbolen P1 Pm (die Stelligkeit sei jeweils be
reits durch den Namen eindeutig identifiziert) und Variablen x1 xl . Für i 1 n seien fi 1 und
fi 2 die Interpretationen der Funktionensymbole in den jeweiligen Strukturen. Für i 1 m seien
Pi 1 und Pi 2 die Interpretationen der Prädikatensymbole in den jeweiligen Strukturen. Weiterhin seien
noch x 1 1 x l 1 und x 1 2 x l 2 die Interpretationen der jeweiligen Variablen. Die beiden Strukturen
gibt mit:
1 und 2 heissen isomorph, wenn es eine bijektive Funktion φ: 1
2
fi
1
x x 1
k
y g.d.w. fi
2
für alle Funktionensymbole fi (mit Stelligkeit k) und
Pi
1
x x "
1
k
Pi
2
φ x ! φ x "
1
k
φy
φ x ! φ x 1
k
für alle Prädikatensymbole Pi (mit Stelligkeit k) und
φ x i
1
x
i
2
für alle Variablen xi .
# 1 2 3 $ und einem Funktionensymbol f mit f 1 1
2,
Beispiel 3.1.2 Sei 1 eine Struktur mit 1
%
%
&# rot grün blau $ und einem Funktionensym1
1
f 2
3 und f 3
3. Es sei 2 eine Struktur mit 1
% grün, f 2 grün % blau und f 2 blau % blau. Die beiden Strukturen sind isomorph
bol f mit f 2 rot
"
grün
blau.
mit der Isomorphieabbildung φ 1
rot, φ 2
und φ 3
Isomorphie bedeutet also, dass beide Strukturen einfach nur durch Umbenennen der Symbole auseinander hervorgehen. Später wird uns auch der Begriff der Teilstruktur noch sehr nützlich sein.
61
'()
*
+-,.
Definition 3.1.3 (Teilstruktur) Ist
eine Struktur und ist
+
+
nennt man
Teilstruktur, falls folgende drei Bedingung erfüllt sind:
(i) Für jede Funktion f :
k
(ii) Für alle Variablen x i gilt x i
(iii)
0+
/
aus
+.
und alle x1
xk
/
+
eine Teilmenge von
so
x + ,
k /
gilt f x1
ergibt sich aus der Einschränkung der Funktionen und Prädikatensymbole von
auf
+ .
Eine Teilstruktur liegt also immer dann vor, wenn man eine Teilmenge des Universums hat, aus der man
durch Anwenden der Funktionen in nicht herausgelangen kann.
3.1.2
Abgrenzen von Strukturen — Axiome
Oft kann man prädikatenlogische Formeln dazu benutzen, zugehörige Modelle bis auf Isomorphie festzulegen. Betrachten wir z.B. die folgende Formel:
1 x f f f x 2
x
3
1 x x a4 f x
"
a4 f f x
a
Diese legt fest, dass ein Modell bis auf Isomorphie die folgende Form haben muss (Warum ?):
56# 1 2 3 $ a "
1 f 1
"
2 f 2
"
3 f 3
1
Von der Möglichkeit Strukturen durch Formeln abzugrenzen haben wir bereits in manchen unserer Beispiele Gebrauch gemacht. So haben wir in Beispiel 2.6.3 eine Formel angegeben, welche den mathematischen Begriff der Gruppe“ abgrenzt. Jedes Modell der dort angegebenen Formel GR wird Gruppe
”
genannt. Hat man einmal eine mathematische Struktur durch eine Formel definiert, so ist es möglich, Eigenschaften dieser Struktur durch logische Schlussfolgerungen rein formaler Art (wie z.B. in Abschnitt
2.8 angegeben) herzuleiten. Häufig kann man eine solche Formel F dadurch erhalten, dass man wesent
liche Eigenschaften der zu isolierenden mathematischen Struktur in Formeln F1 Fm beschreibt und
3
3 3
diese dann durch -Verknüpfungen zusammenfasst: F F1 Fm . Man nennt in diesem Zusammen
hang die Formeln F1 Fm auch oft Axiome der Struktur. Beim Beispiel der Gruppe galt
und GR
3
3
F1
F2
F3
1 x1 y1 z g g x y !
z 1 x g x e x 1 x7 y g x y e
gxgyz
F1 F2 F3 . Die Formeln F1 bis F3 sind die Gruppenaxiome“.
”
Unsere obige Frage nach der Abgrenzung der natürlichen Zahlen können wir nun unter Verwendung des
Isomorphiebegriffs wie folgt präzisieren.
Ist es möglich eine prädikatenlogische Formel anzugeben, so dass bis auf Isomorphie das
”
ist.“
einzig mögliche Modell
Idealerweise wollen wir die gesuchte Formel F durch Angabe einiger weniger kurzer Axiome darstellen1 .
1 Eine kleine Anmerkung zu den Sprachmitteln“, die wir uns im Rahmen unserer Überlegungen erlauben, ist an dieser
”
Stelle angebracht. Wir wollen uns im Folgenden auf endliche Axiomensysteme beschränken. Prinzipiell könnten wir zwar davon
ausgehen, dass wir unendlich viele Formeln zur Beschreibung einer Struktur heranziehen, so lange wir nur endliche Ableitungen
aus ihnen zulassen. Wir wollen uns aber die daraus entstehenden Subtilitäten hier ersparen. Weiterhin sei angemerkt, dass es
sich bei der von uns in Kapitel 2 eingeführten Theorie um die so genannte Prädikatenlogik erster Stufe handelt. Es gibt auch
eine Prädikatenlogik zweiter Stufe die mächtiger in ihrer Ausdrucksweise ist. Der Unterschied lässt sich folgendermassen
charakterisieren. Während in der Prädikatenlogik erster Stufe nur Quantisierungen über Variablen möglich sind, erlaubt die
Prädikatenlogik zweiter Stufe auch die Quantisierung über Prädikate. Auf zweiter Stufe sind also auch Aussagen denkbar wie
z.B. Für alle einstelligen Prädikate P x folgt aus P a und P x
P f x die Aussage xP x “. (Dem geübten Logiker wird
”
auffallen, dass dies gerade die Formalisierung des Prinzips der vollständigen Induktion ist, welche auf erster Stufe nicht als
Axiom formulierbar ist.)
8 9
8 9
8 9;:
62
8 8 9<9
= 8 9
3.1.3
Arithmetik
Wir stellen nun ein Axiomensystem vor, welches (mit Mitteln endlicher Axiomensysteme erster Stufe)
unserer gesuchten Charakterisierung der natürlichen Zahlen schon recht nahe kommt. Insgesamt werden
wir sechs Axiome verwenden, die wir hier gleich komplett angeben wollen.
A1
A2
A3
A4
A5
A6
1 x ? > f x a
1 x1 y f x f y
1 x plus x a" x 1 x1 y plus x f y "
1 x mal x a" a 1 x1 y mal x f y "
x
y
f plus x y
!
plus mal x y x
Erinnern wir uns, dass die Konstante a die Rolle der 0“ übernehmen soll, f x die Nachfolgerfunktion
”
ergeben soll und plus x y und mal x y Addition und Multiplikation darstellen sollen. Die sechs Axiome
kodieren also die folgenden Eigenschaften der natürlichen Zahlen.
A1:
A2:
A3:
A4:
A5:
A6:
0 hat keinen Vorgänger,
aus x 1 y 1 folgt x y,
x 0 x
@ x y 1 x y 1
x 0 0
x y x x y 1
3
3
3
3
3
Wir betrachten nun die Formel F
A1 A2 A3 A4 A5 A6. Da die sechs Axiome offensichtlich
ABC
ein Modell
Eigenschaften der natürlichen Zahlen verkörpern, ist leicht nachprüfbar, dass
für F darstellt.
Wie sieht es nun umgekehrt aus? Was haben Modelle von F mit den natürlichen Zahlen zu tun? Nehmen
5D
- gegeben. Wir werden zeigen, das wir in diesem
wir an, wir haben ein bestimmtes Modell
die natürlichen Zahlen zumindest als Teilstruktur wiederfinden können. (Um uns etwas Formalismus und
E)
- gegeSchreibarbeit zu sparen gehen wir im Folgenden davon aus, dass ein konkretes Modell
ben ist. Die darin definierten konkreten Funktionen und Konstanten a f plus und malA bezeichnen
wir im Folgenden, unter leichtem Missbrauch unserer Notation, einfach als a f plus und mal.)
Untersuchen wir zunächst einmal, wo wir die natürlichen Zahlen in einem beliebigen Modell für F
wiederfinden. (Achtung: wir gehen jetzt von einem beliebigen Modell von F aus — dies müssen nicht
notwendig die natürlichen Zahlen selbst sein.) Mit der Konstanten a und der Funktion f x sind natürlich
!
!
F!
G in unserem Universum enthalten. Diese
auch alle Elemente der Form a f a f f a f f f a
Elemente ordnen wir (in dieser Reihenfolge) den natürlichen Zahlen zu:
0H
aH
1H
f K a LFH
2H
f K f K a LJLFH
3H
IIJI
f K f K f K a LJLLHMIIJI
kH
IIJI
N f K fOK?P IIJI Qf K aLRIIJISLJLFHTIIJI
k-mal f
Wir wollen uns nun sukzessive die Bedeutung der Axiome verdeutlichen. Während die Axiome A1 und
A2 wesentliche Eigenschaften der Nachfolgefunktion sichern, implementieren“ die Axiome A3 bis A6
”
die Eigenschaften der plus, bzw mal Funktionen.
Die Nachfolgefunktion
Wir wollen zunächst die Eigenschaften der Nachfolgefunktion bildhaft verdeutlichen. Hierzu stellen wir
die Elemente unseres Universums als Punkte in einem Graph dar (dies können durchaus unendlich viele
63
sein). Gilt für zwei Elemente x und y die Beziehung f x
y, so zeichnen wir einen Pfeil von x nach y.
Auf diese Weise können wir die Wirkungsweise“ der einstelligen Funktion f x bildlich darstellen. Wir
”
erhalten dabei Bilder der folgenden Art.
U
x
PSfrag replacements
f
f x
Wie kann ein solches Bild nun für ein Modell für F aussehen. Die Form dieses Graphen wird durch A1
und A2 beträchtlich eingeschränkt. Axiom A1 besagt, dass das Element a keine Vorgänger hat. Es zeigt
also kein Pfeil auf das Element a.
PSfrag replacements
a
a
unmöglich
möglich
Axiom A2 besagt nun, das jedes Element nur höchstens einen Vorgänger haben kann. Insbesondere bedeutet dies, dass die von a ausgehende Folge von Pfeilen niemals bei einem der bereits vorher erreichten
Elemente wieder ankommen kann (a darf nämlich keinen Vorgänger haben und jedes andere Element
darf höchstens einen Vorgänger haben.) Mit anderen Worten heisst dies, dass in der Folge
!
!
f f f a F!
F
a f a f f a
kein Element doppelt vorkommt.
PSfrag replacements
....
a
a
unmöglich
möglich
Diese Eigenschaft rechtfertigt nun letztlich auch die Identifikation der Folge
+ : a f a!
f f a!
f f f a V
F mit den natürlichen Zahlen. Aufgrund unserer Axiome ist es keinesfalls ausgeschlossen, dass es nicht
noch weitere Elemente im Universum gibt. Das folgende Szenario ist nach unseren Axiomen A1 bis A2
absolut denkbar.
PSfrag replacements
....
a
unmöglich
möglich . . . .
....
64
Wichtig ist aber hierbei, dass sich nach unseren Axiomen die einzelnen Komponenten, die durch eine
Kette von Pfeilen verbunden sind, nicht mischen können. Insbesondere gibt es auch keinen Pfeil, der von
+ auf ein Element in + zeigt.
einem Element ausserhalb von
Addition
Wenden wir uns nun den Axiomen A3 und A4 zu. Diese geben eine rekursive Definition der Addition
+ stellen sie sicher, dass auf ihnen die Addition auch tatsächlich korrekt ausgeführt
an. Für Elemente in
+ aufgrund unsere Axiome den
wird. In jedem Modell von F können wir für zwei Elemente x y /
Wert von plus x y folgern.
W ZX 3Y [ \
W ZX 2 Y [ V
f f a
. Zweimaliges Anwenden von
Betrachten wir den Ausdruck plus f f f a
Beispiel 3.1.4
A3 und einmaliges Anwenden von A4 ergibt:
W X]3Y [ \
W XZ2 Y [ plus f f f a
f plus f f f af!
ff aa
!
a
f f plus f f f a
Y f f f f[ZW f a X
5
Zurückinterpretiert auf die natürlichen Zahlen bedeutet dies 3 2
5.
Multiplikation
Analog zur Addition wird die Multiplikation durch die Axiome A5 und A6 beschrieben. Der mittlerweile
geübte Leser sei dazu ermutigt unter Heranziehung aller Axiome zu folgern, dass in jedem Modell von
!
f f a^ f f f f f f a gilt (3 2 6).
F die Beziehung mal f f f a
3.1.4
Natürliche Zahlen als Teilstruktur von F_
Fassen wir zusammen und formalisieren wir ein wenig, so können wir aus den Überlegungen des letzten
Abschnittes den folgenden Satz herleiten:
Satz 3.1.5 Jedes Modell
@)
*
von F enthält eine zu
isomorphe Teilstruktur.
Beweis: Um diesen Satz formal korrekt zu beweisen, wollen wir nun ein wenig strenger mit den Bezeichnungen umgehen, denn im Folgenden kommen die Symbole f , a, plus und mal in mindestens drei
verschiedenen Bedeutungen vor.
( .
Es sei
und a
also
x y. Ferner seimit Universum
mal x y
ein beliebiges Modell von F
Funktionen a , f , plus und mal . Es sei weiterhin `
seien a ` , f ` , plus ` und mal ` die Einschränkungen von a
b+c G a f plus ` mal ` nun dass die Teilstruktur
` ` `
65
0, f x
x 1, plus x y
x y und
mit Universum und Interpretation der
'# a f a !
f f a !
a$ und es
:
, f , plus und mal auf ` Wir zeigen
ist.
isomorph zu
Da die Menge ` wie bereits gezeigt unendlich gross ist (wegen A2) können wir eine Bijektion φ :
definieren gemäss:
`
φ n : f ` f ` f ` a ` Y
g
Wir haben somit per Definition φ 0
h
f x
die anderen Funktionen gelten.
f x:
Die Beziehung
”
ist und der Definition von φ.
[]W
n-mal f
dfe
X
a ` . Wir müssen nun zeigen, dass die Isomorphiebedingungen für
y g.d.w. f `
φ x φ y “ folgt direkt aus der Tatsache das f x%
x 1
i
!
z g.d.w. plus ` φ x φ y
plus x y : Wir zeigen durch vollständige Induktion, dass plus x y
”
φ z “ gilt. Wegen der Definition von plus x y können wir
diese Aussage auch gleich als x y z
!
φ z “ schreiben. Als Induktionsanfang betrachten wir die Aussage ” x 0 z
g.d.w. plus ` φ x φ y
+
!
- ” !
-
g.d.w. plus ` φ x a φ z “. Da ein Modell für F ist, gilt wegen A3 die Beziehung plus ` φ x a
φ x . Somit übersetzt sich die Aussage zu x 0 z g.d.w. φ xi φ z “ was wegen der Bijektivität
”
von φ natürlich wahr ist. Im Induktionsschritt gehen wir nun von der Annahme aus, das x y z
”
!
j
y i bewiesen ist und beweisen sie für y i 1. Es sei also
g.d.w. plus"` φ x φ y
j φ fz “ φfür ialle
y i 1. Somit gilt φ y
(wegen
von φ). Wir können unsere Aussage also
` !
2 der Definition
+ Modell von F ist gilt A4 und
als x i 1 z g.d.w. plus` φ x f ` φ i
φ z “ schreiben. Da
!
g
!
”
f ` plus ` φ x φ i . Unsere Aussage wird also zu x i 1 z g.d.w.
somit plus ` φ x f ` φ y
!
" φ z “. Wegen der Bijektivität von φ ist die gleichwertig zu ”x i z k 1 g.d.w.
f "` plus ` φ x φ i
!
φ z k 1 “ Was ja per Induktionsvoraussetzung als bewiesen galt.”
plus ` φ x φ i
2
!
^ φ z “. Unter Verwendung von
z g.d.w. mal ` φ x φ y
mal x y : Es bleibt zu zeigen mal x y
”
Vollständiger Induktion und der Axiome A5 und A6 geschieht der Beweis vollständig analog zum letzten
Fall.
Jedes Modell
von F enthält also die natürlichen Zahlen als Teilstruktur. Weiterhin stellen unsere
Beobachtungen in Satz 3.1.5 und Satz 3.1.6 sicher, dass falls weitere Elemente (ausser dem isomor+ von ) enthält, diese durch die Funktionen f , plus und mal niemals auf Elemente in +
phen Abbild
abgebildet werden können.
3.1.5
Implementation anderer Funktionen und Prädikate
Wir können unsere Axiome A3 bis A6 als eine Art Implementation“ der Addition und Multiplikation
”
basierend auf der Nachfolgerfunktion f als Primitivoperation auffassen. Dies ist vollkommen analog zur
Tatsache, dass man in einer Programmiersprache, die über eine Increment- und Decrement-Operationen
verfügt auch Funktionen für Addition und Multiplikation schreiben kann. Sind Increment und Decrement
durch Funktionen inc(x) und dec(x) realisiert, so könnte der Code in einer Pascal-artigen Sprache in
etwa so aussehen:
function integer plus(x,y) {
if (y==0) then
return x;
else
return inc(plus(x,dec(y)));
}
66
Die Fallunterscheidung entspricht hierbei genau unseren beiden Axiomen A3 und A4. Code für Multiplikation sieht unter Verwendung von plus wie folgt aus:
function integer mal(x,y) {
if (y==0) then
return 0;
else
return plus(mal(x,dec(y)),x);
}
Auch hier finden wir die Axiome A5 und A6 direkt in der Fallunterscheidung wieder.
Entsprechend können wir nun auch weitere mathematisch nützliche Funktionen und Prädikate definieren,
zum Beispiel ein paar einfache zahlentheoretische Prädikate.
Zunächst betrachten wir das Prädikat Teilt x y , welches immer dann wahr sein soll, wenn x Teiler von
y ist. Wir können dies einfach durch ein Axiom
1 x1 y Teilt x yl 7 z mal x z "
y
definieren.
Genauso wie beim Programmieren kann man nun aus einfachen Operationen immer komplexere zusam mensetzen. Definieren wir z.B. das Prädikat Prim x welches immer dann wahr sein soll, wenn x eine
Primzahl ist:
1 x Prim x"lm Teilt y
x y
4
f a
y
x
Dies ist nichts anderes als die wörtliche Definition des Primzahlbegriffes: Eine Zahl ist Primzahl, wenn
”
die einzigen Teiler 1 und die Zahl selbst sind.“
Betrachten wir abschliessend noch eine Implementation einer Subtraktions-Funktion welche noch ein anderes Implementationsprinzip ausnutzt: Die Reinterpretation einer bereits definierten Funktion. Zunächst
müssen wir den minus-Operator, den wir mit
“ abkürzen geeignet definieren um ihn auf die natürli” n
chen Zahlen einzuschränken. Wir setzen:
"
minus x y
x
y
(o x k
0
y für x p y
sonst
Die folgende Formel gewährleistet, dass zusammen mit F der Operator das Gewünschte leistet.
1 x1 y1 z minus x y
z
lq plus y
z
x4
7 w plus x w y
03
z
a
In Sprache übersetzt heisst diese Formel
j
Der Ausdruck minus x y
”
z ist gleichwertig dazu, dass entweder x
grösser oder gleich x ist und z 0 gilt.“
67
y z gilt oder y
3.2
Berechenbarkeit
Während wir im letzten Abschnitt gesehen haben, dass man prädikatenlogische Formeln dazu benutzen
kann, arithmetische Sachverhalte zu modellieren, wollen wir jetzt einen Perspektivenwechsel“ vorneh”
men und uns dem Begriff der Berechenbarkeit zuwenden. Dieser Begriff soll abgrenzen, was mit einem
Computer (der heutigen prinzipiell digitalen Bauweise) machbar ist, und was nicht. Insbesondere werden
wir sehen, dass zwischen Berechenbarkeit und prädikatenlogischen Strukturen enge Bezüge bestehen.
Später werden wir dann sehen, dass es durchaus formal abgrenzbare Probleme gibt, deren Lösung nicht
berechenbar ist und dass die prinzipiellen Grenzen der Berechenbarkeit sehr viel mit den prinzipiellen
Grenzen der logischen Ableitbarkeit zu tun haben.
3.2.1
Was heisst berechenbar?
Die Vielfalt der Computertypen, die derzeit auf dem Markt sind (von kleinen Taschencomputern bis hin
zu über das Internet vernetzten Clustern von Tausenden 1-Gigahertz-Prozessoren) erweckt leicht den
Anschein, dass es eine sehr weit gefächerte Massskala für den Begriff der Berechenbarkeit“ gibt. In der
”
Tat erscheint der Begriff der Berechenbarkeit noch wesentlich weiter gefasst zu sein, wenn man auch
noch mechanische, wasser- oder luftgetriebene Apparaturen in Betracht zieht.
Wasseruhr, die man in mehreren Städten (Berlin, Paris, Indianapolis) findet.
Der Zählvorgang findet ausschliesslich durch hydraulische Effekte statt.
Eine weitere Differenzierung scheint sich bei der Betrachtung verschiedener Programmiersprachen zu
ergeben. Eine Hochsprache wie Lisp, Smalltalk oder Java, erscheint weitaus mächtiger zu sein, als Assemblerprogrammierung. Tatsächlich unterscheiden sich diese verschiedenen Berechnungsmodelle“ (ob
”
68
im Hard- oder Softwarebereich) jedoch mehr in quantitativer als in qualitativer Hinsicht. Diese quantitativen Aspekte sind z.B. Wieviel Speicherplatz steht zur Verfügung“, Wie schnell ist der Rechner“,
”
”
Welche Funktionalität lässt sich mit wieviel Zeilen Code ausdrücken“ oder Wie ergonomisch und intui”
”
tiv ist eine Programmiersprache“. Eine weitere (vom Standpunkt der Logik irrelevante) Differenzierung
ergibt sich aus der Art“ der verwendeten Hardware (wird Information elektronisch in Flip-Flops gespei”
chert, durch Gefüllt-sein von Wassergefässen ausgedrückt, oder durch das Umlegen mechanischer Hebel
realisiert).
Abstrahieren wir von diesen (für den Logiker unerheblichen) Unterschieden und gehen wir von einer im
wesentlichen digitalen“ Rechnerarchitektur mit unbegrenztem Speichervorrat und beliebigen Rechen”
zeitresourcen aus, so stellen sich alle der oben erwähnten Rechenapparaturen als im Wesentlichen äquivalent heraus. Der Grund dafür ist einfach. Man kann jeweils ein Modell auf dem anderen simulieren. Dies
gilt sowohl für die Ebene der Hard- als auch der Software. Die strukturellen Vorgänge in mechanischen
oder hydraulischen Apparaturen, können z.B. problemlos auf einen Rechner übertragen werden. (für
eine JavaSkript Simulation der Wasseruhr siehe http://www.time-flow-clock.de und für eine Java
Simulation der von Konrad Zuse entworfenen Rechner Z1 bis Z3 siehe http://www.zib.de/zuse.)
In der Tat war die Z1 noch ein rein mechanischer Computer, während die strukturell im Wesentlichen
identische Z3 aus elektrischen Relais gefertigt war.)
y
w {
e
r
uw
xy
f
a
x
rt
y
s1
a:
b:
c, d:
e, f:
g:
s1, s2:
v
vv
ss
I
s2
z
u
d
t
~c
c
II
~c
III
~c
b
g
Bewegendes Blech
Bewegtes Blech
Schwimmende Bleche
Steuernde Bleche
Festblech
Schaltstifte
|b
~c
}a
|b
}a
}a
~c
|b
~c
|b
}a
|b
}a
}a
|b
Aus Konrad Zuses Patentschriften für die Z1.
Entsprechende Überlegungen gelten auch auf der Ebene verschiedener Programmiersprachen. Letztlich
fällt jede Ausführung eines z.B. in LISP geschriebenen Programmes auf eine Hintereinanderausführung
verschiedener Assemblerbefehle zurück. Umgekehrt lässt sich in LISP ein Emulationsprogramm für
einen Assemblerrechner schreiben.
Was sind nun (auf abstrakter Ebene) die Operationen, die ein (digitaler) Computer tatsächlich ausführt?
Wir fassen hierzu die Hardware des Rechners mit einem darauf abgelegten Programm zusammen als
eine Einheit auf. Die Daten, auf denen operiert wird, bilden eine andere Einheit. Im Computer ist nun
Information durch eine Folge von Nullen und Einsen abgelegt. Als eine solche Folge von Nullen und
Einsen sind insbesondere die Eingabedaten für das Programm kodiert. Der Computer beginnt nun (durch
das Programm gesteuert) auf dieser Folge von Nullen und Einsen Operationen auszuführen und diese
damit zu verändern. Irgendwann gelangt das Programm (hoffentlich) in einen Zustand, in dem es anhält.
Aus der am Ende vorliegenden Folge von Nullen und Einsen im Speicher können wir das Ergebnis
ablesen. Egal wie komplex ein Computerprogramm ist, ob es ein Programm zum Quadrieren natürlicher
Zahlen ist, ein Texteditor, ein Bildverarbeitungsprogramm oder ein Expertensystem, letztlich lässt sich
alles auf dieser elementaren Ebene ausdrücken. Die Folgen von Nullen und Einsen“ werden wir im
”
Folgenden als eine Zahl auffassen. Auf diese Weise können wir unser Bild der Berechenbarkeit wie folgt
zusammenfassen:
69
Eingabe (Zahl)
k
Programm “
”
Programm hält
k
Ausgabe (Zahl)
Die Eingabe ist eine Zahl. Das Programm wird gestartet. Wenn das Programm anhält, liegt die Ausgabe
wieder in Form einer Zahl vor2 € 3 € 4 .
3.2.2
Die Registermaschine
Nach diesen eher philosophischen Betrachtungen kommen wir nun zur eigentlichen Definition des Berechenbarkeitsbegriffs. Die Überlegungen des letzten Abschnitts gestatten es, uns hierbei auf ein Programmiermodell mit sehr einfachen Grundoperationen zu beschränken. Dieses Programmiermodell basiert im
Prinzip auf einer sehr einfachen Programmiersprache die nur sieben Befehlstypen kennt. Die Motivation
eine möglichst schlanke“ Programmiersprache zur Definition des Berechenbarkeitsbegriffs heranzuzie”
hen hat folgenden Grund. Wir wollen später über diese Programmiersprche formale Aussagen machen,
insbesondere wollen wir deren Verhalten auf der Stufe der Prädikatenlogik nachbilden. Je weniger Befehlstypen unsere Sprache hat um so weniger Arbeit muss für diesen Prozess geleistet werden.
Das Programmiermodell, welches wir hier verwenden wollen, ist die sogenannte Registermaschine (RM).
In der Registermaschine gibt es eine unbegrenzte Anzahl von Registern, in denen natürliche Zahlen beliebiger Grösse gespeichert werden können. Wir bezeichnen diese Register mit
R0 R1 R2 R3
Ein Programm der RM besteht aus einer endlichen Folge von durchlaufend nummerierten Zeilen. Jede
Zeile ist einer der folgenden sieben Befehlstypen:
Ri 1
Ri R j Rk
Ri R j  Rk
Ri R j Rk
n
IF Ri 0 GOTO L
GOTO L
STOP
Die Zeilennumerierung fängt bei Zeile 0 an. Die letzte Zeile enthält einen STOP Befehl. Sprünge sind nur
zu existierenden Zeilen erlaubt. Zu Beginn werden in einer Initialisierungsphase endlich viele Register
2 Die Grenze, die wir zwischen Programm einerseits und Daten andererseits angegeben haben, ist hierbei ein wenig
willkürlich gewählt. Man kann im Extremfall z.B. alles, was im Rechner wirklich unveränderlich ist (d.h. die Hardware und
die im ROM abgelegte BIOS Information), als das Programm“ auffassen und alles, was veränderlich ist (inklusive Betriebs”
system, und aktueller Anwendung), als Daten. Letztlich führt dies jedoch (durch den Simulationsbegriff) immer wieder zu
gleichwertigen Strukturen, die nichts an dem Begriff der Berechenbarkeit ändern.
3 Es soll an dieser Stelle nicht unerwähnt bleiben, das es durchaus physikalische Situationen gibt, die (über das eben gesagte
hinaus) zu einer wirklich grundlegenden Erweiterung des Berechenbarkeitsbegriffes führen könnten. So herrscht z.B. in der
Kognitionswissenschaft immer noch eine lebhafte Diskussion darüber, ob zur Beschreibung des menschlichen Denkens der
Begriff der Berechenbarkeit ausreichend ist oder grundlegend neue Konzepte eingesetzt werden müssten. Insbesondere ist es
nicht klar, ob z.B. quantenphysikalische Effekte ausnutzen kann, um im bisherigen Modell als unberechenbar geltende Probleme
doch zu einer Lösung zu führen.
4 Noch eine Fussnote: Das hier definierte Berechenbarkeitsmodell geht davon aus, dass eine Berechnung immer dem Modell
Eingabe/Berechnung/Ausgabe erfolgt. Für viele der heute marktüblichen Programme erscheint dieses Modell als unangebracht.
So nimmt z.B. ein Action-Computerspiel einen ständigen Strom von Eingabedaten (durch den Joystick o.ä.) auf und produziert
einen scheinbar fliessenden Strom von Bildern. Dennoch kann ein jedes solches Programm in elementare Ein-/Ausgabezyklen
zerlegt werden, die dem obigen Modell folgen
70
mit Zahlen ( ‚ 0) belegt (dies ist die Eingabe). Alle restlichen Register sind zu Beginn auf 0 gesetzt.
Das Programm startet bei Zeile 0. Falls das Programm jemals eine STOP-Zeile erreicht, hält es an. Der
Registerinhalt nach Programmende ist die Ausgabe des Programmes.
Beispiel 3.2.1 Wir wollen ein kleines RM-Programm schreiben, welches uns zu einer Zahl n ihre Fakultät
n! : 1 2 3 GV n berechnet. Zur Initialisierung setzen wir R0 n. Nach Anhalten des Programmes soll
das Ergebnis der Berechnung wieder in R0 stehen. Das Programm könnte wie folgt aussehen.
0:
1:
2:
3:
4:
5:
6
7:
R1 : 1
R2 : 1
R2 : R2 R0
R0 : R0 R1
n
IF R0 0 GOTO 6
GOTO 2
R0 : R2 R3
STOP
In Register R2 wird hierbei das Ergebnis akkumuliert. Dies geschieht in der durch die Zeilen 2–5 realisierten Schleife. Am Ende wird das Ergbnis von Register R2 in Register R0 kopiert.
Aufbauend auf diesem Programmiermodell“ können wir nun den Begriff Berechenbarkeit definieren.
”
wenn es ein
Definition 3.2.2 (Berechenbarkeit) Wir nennen eine Funktion f n :
bei der Eingabe R n anhält und berechenbar,
am
Ende
in
R
RM-Programm gibt, dass für jedes n /
0
0 den Wert
f n enthält.
Der verwandte Begriff Entscheidbarkeit betrifft Eigenschaften von Zahlen. Es geht darum, ein Programm
zu schreiben, welches prüft: Hat die Zahl n die Eigenschaft X ?“ (z.B. die Eigenschaft Primzahl zu sein,
”
oder die Eigenschaft Quadratzahl zu sein, oder die Eigenschaft keine 0“ als Ziffer zu enthalten, oder,
”
oder, oder, ). Formeller kann man Eigenschaften als Teilmengen der natürlichen Zahlen auffassen. Man
fasst dabei alle Zahlen, die die gesuchte Eigenschaft haben, zu einer Menge von Zahlen zusammen. Zum
Beispiel ist die Eigenschaft Quadratzahl zu sein durch die folgende Menge charakterisiert:
Xquad :
6#
n2 ƒ n
/
$„
,)
Definition 3.2.3 (Entscheidbarkeit) Wir nennen eine Eigenschaft X
wenn es ein RM für die Eingabe R n anhält und amentscheidbar,
Programm gibt, dass für jedes n /
Ende in R0 den Wert 1 enthält
0
falls n / X und 0 andernfalls.
Eine Eigenschaft der natürlichen Zahlen heisst also entscheidbar, wenn man ein Programm schreiben
kann, dass diese Eigenschaft prüft. Eigenschaften von Zahlenpaaren n m (z.B n ist Teiler von m“)
”
definieren wir analog als entscheidbar, wobei wir als Initialisierung R0 n R1 m verwenden5 .
5 Unsere Registermaschine hat zwar nur sieben verschiedene Befehlstypen, dennoch sind noch reduziertere Berechnungmodelle denkbar, die ebenso den gleichen Berechenbarkeitsbegriff definieren. So ist z.B. das Zulassen von Addition, Multiplikation
und Subtraktion unnötig grosszügig“. Befehle zum Inkrementieren (Ri ++) und Dekrementieren (Ri --) hätten vollkommen aus”
gereicht, um einen äquivalenten Berechenbarkeitsbegriff zu definieren. Programme, die das gleiche leisten, wären dann einfach
länger. Tatsächlich kommt man sogar mit einem einzigen Befehlstyp aus, wenn man in diese bedingtes Springen, Increment
und Decrement geschickt vereinigt. Wir haben hier unsere Definition der Registermaschine gewählt als ein Mittelding, um noch
einigermassen lesbare Programme bei kleinem Befehlssatz zu haben.
71
3.2.3
Von Registermaschinen zur Logik
Unser nächstes Ziel ist es, die Vorgänge in der Registermaschine beim Ausführen eines Programmes
mit Mitteln der Prädikatenlogik nachzubilden. Wir können die Ausführung eines Programmes in eine
diskrete Folge (T0 T1 T2 ) von Zeitpunkten zerlegen, so dass zum Zeitpunkt T0 die Register mit ihren
Initialisierungswerten vorliegen und zu jedem nachfolgendem Zeitpunkt die Registerinhalte nach der
Ausführung jeweils einer Programmzeile vorliegen. Auf diese Weise können wir eine Tabelle anfertigen,
die zu jedem Zeitpunkt die aktuellen Registerinhalte anzeigt. Zusätzlich können wir auch noch die jeweils
auszuführende Zeilennummer auflisten.
Beispiel 3.2.4 Betrachten wir unser Programm aus Beispiel 3.2.1 mit der Initialisierung und R0
Zeit
T0
T1
T2
T3
T4
T5
T6
T7
T8
T9
T10
T11
T12
T13
T14
Zeile
0
1
2
3
4
5
2
3
4
5
2
3
4
6
7
R0
3
3
3
3
2
2
2
2
1
1
1
1
0
0
6
R1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
R2
0
0
1
3
3
3
3
6
6
6
6
6
6
6
6
R3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
3
Befehl
R1 : 1
R1 : 1
R2 : R2 R1
R0 : R0 R1
IF R0 0 GOTO 6
GOTO 2
R2 : R2 R1
R0 : R0 R1
IF R0 0 GOTO 6
GOTO 2
R2 : R2 R1
R0 : R0 R1
IF R0 0 GOTO 6
R0 : R2 R3
STOP
…
…
…
†
…
‡
…
…
†
…
‡
…
…
†
…
…
…
‡
ˆ
Die Tabelle ist quasi ein Debuggingoutput“ der jede noch so kleine Veränderung des Programmzu”
standes widerspiegelt. Der Registerinhalt und die aktuelle Zeilennummer in Ti bestimmen hierbei jeweils
eindeutig den Zustand für die nächste Zeile Ti ‰ 1 der Tabelle.
Für ein konkretes Programm Š und eine konkrete Initialisierung ‹ der Register ist die Tabelle vollkommen
festgelegt: Der Zustand (Registerinhalt & Programmzeile) zu einem Zeitpunkt bestimmt vollkommen
den Zustand zum darauffolgenden Zeitpunkt. Ist also Programm Š und Initialisierung ‹ gegeben, so
angeben, die dem Zeitpunkt T die auszuführende Zeile zeile t kann man eine Funktion zeile:
t
angeben,
zuordnet. Ebenso kann man eine Funktion reg t i : 
die einem Zeitpunkt Tt und
einer Registernummer i den Zustand des Registers i zu diesem Zeitpunkt zuordnet.
Für Š und ‹ wollen wir nun eine prädikatenlogische Formel FŒ €  angeben, welche Funktionensymbole
zeile t und reg t i enthält, die genau das Verhalten der Einträge der Tabelle (also unsere eben definierten Funktionen) widerspiegeln. Hierbei seien die auftretenden natürlichen Zahlen (für Registernamen,
Registerinhalte, Zeitpunkte und Zeilennummern) wieder in der Form
n:
Y f fZ[ W Xf a n-mal f
kodiert. Im Folgenden werden wir n als Abkürzung für diese Darstellung der Zahl n verwenden. Weiter?
hin führen wir noch ein nullstelliges Prädikat ST OP ein, welches widerspiegeln soll, ob eine ST OPZeile jemals erreicht wurde.
Zur Beschreibung von FŒ €  verwenden einerseits unsere Formel F zur Modellierung der natürlichen Zahlen. Weiterhin werden wir für jede einzelne Programmzeile von Š und für die Initialisierung ‹ mehrere
72
Formeln angeben, die deren Funktionalität auf die Prädikatenlogik abbilden. All diese Formeln werden
3
am Schluss durch -Operatoren verknüpft. Die resultierende Formel FŒ €  wird dann die folgende Eigenschaft haben:
Jedes Modell
von FŒ
€
"
erfüllt zeile t
zeile t und reg t i
reg t i .
Mit anderen Worten in jedem Modell von FŒ €  modelliert der Wert des reg t i die (eindeutige) Bele gung des Registers i zum Zeitpunkt t. Der Wert von zeile t gibt die zum Zeitpunkt t auszuführende
Programmzeile an. Wir gehen davon aus, dass Rm das höchste im Programm jemals benutzte Register
ist. Wir geben nun nacheinander die entsprechenden Formeln für die sieben verschiedenen Befehlstypen
an.
Z: GOTO L
Beginnen wir mit dem GOTO-Operator. Angenommen unser Programm enthält eine Zeile Z: GOTO L“ (für
”
Zeilennummern Z und L). Wir können das Verhalten unseres Programmes wie folgt sprachlich fassen:
Liegen zum Zeitpunkt t bestimmte Registerinhalte R1 Rm vor und soll die Anweisung in
Zeile Z ausgeführt werden, so müssen zum Zeitpunkt t 1 alle Registerinhalte übernommen
werden und zur Zeile L gesprungen werden.
Dies kann man in folgende prädikatenlogische Formel umsetzen:
3
1 x1 t zeile t "
1 t zeile t Z
Z
!
reg f t x
reg t x
"
zeile f t
L
Kopiere die Register“
”
Springe nach L“
”
Die erste Zeile sorgt für das Kopieren der Register, die zweite Zeile für den Sprung.
Z: IF Ri
0 GOTO L
Analog verfahren wir mit dem bedingten Sprung. Wir müssen in der Formel lediglich eine Klausel
einfügen, die sicher stellt, das der Sprung nur ausgeführt wird, wenn Ri 0 ist und andernfalls die
Zeilennummer einfach um eins erhöht wird.
1 1 zeile t Z reg f t !
x "
1 tx tzeile
t Z 3 reg t i a 1 t zeile t Z 3Ž>A reg t i " a
3
3
reg t x
L zeile f t
" f Z zeile f t
Kopiere die Register“
”
Springe nach L“
”
oder erhöhe die Zeilennummer“
”
1
Z: Ri
Bei diesem Befehl muss auf jeden Fall die Zeilennummer erhöht werden. Alle Register ausser Ri müssen
kopiert werden und in Ri muss auf 1 gesetzt werden. Wir können dies wie folgt ausdrücken:
3
3
Z: Ri
1 x1 t zeile t 1 t zeile t " Z
1 t zeile t " Z
Z
3>A x i !
reg f t i
"
zeile f t
f reg
f Za f t !
x
R j Rk
reg t x
Kopiere die Register“
”
Setze Ri auf 1“
”
Erhöhe die Zeilennummer“
”
Bei der Addition muss auf jeden Fall die Zeilennummer erhöht werden. Alle Register ausser Ri müssen
kopiert werden und in Ri muss die Summe eingesetzt werden. In der prädikatenlogischen Formel drücken
wir die Summe durch unseren in in F definierten plus-Operator aus.
73
1 x1 t zeile t 1 t zeile t Z
1 t zeile t Z
3
3
Z
3Ž> x i
!
reg f t i
zeile f t
!
reg f t x
!
reg
t x
plus reg t j reg t k
f Z
Kopiere die Register“
”
Berechne Summe“
”
Erhöhe die Zeilennummer“
”
R j Rk
Z: Ri
Sinngemäss die gleiche Formel können wir nun auch für die Multiplikation verwenden
1 x1 t zeile t 1 t zeile t Z
1 t zeile t Z
3
3
Z: Ri
n
Rj
Z
3Ž> x i
!
reg f t i
zeile f t
!
reg f t x
!
reg
tx
mal reg t j reg t k
f Z
Kopiere die Register“
”
Berechne Produkt“
”
Erhöhe die Zeilennummer“
”
Rk
Die eingeschränkte Subtraktion können wir durch den plus-Operator indirekt ausdrücken. Hierzu fügen
wir zunächst ein für alle mal die folgende Formel F  in unser Axiomensystem hinzu:
1 x1 y1 z minus x y "
z
l‘ plus y
z "
x4
7 w plus x w y
’3
z
a
Der Rest erfolgt analog zur Addition und Multiplikation:
3
3
1 x1 t zeile t "
1 t zeile t Z
1 t zeile t Z
Z
3> x i !
reg f t i
"
zeile f t
!
reg f t x
!
reg t
x
minus reg t j reg t k
f Z
Kopiere die Register“
”
Berechne Differenz“
”
Erhöhe die Zeilennummer“
”
Z: STOP
Die STOP Zeile unterziehen wir einer kleinen Sonderbehandlung. Für diese Zeile führen wir noch ein
neues Funktionensymbol erg i ein, welches den Endwert des Registers Ri wiedergeben soll. Weiterhin
?
führen wir ein nullstelliges Prädikatensymbol STOP ein, welches angibt ob das Programm jemals in
den Haltezustand gelangt. Die entsprechende Prädikatenlogische Formulierung ergibt sich wie folgt:
3
3
1 x1 t zeile t 1 t zeile t " Z
1 t zeile t " Z
Z
erg x
reg t x
?
STOP
Z zeile f t
Kopiere die Register nach erg“
”
? 1“
setze STOP
”
Bleibe stehen“
”
Initialisierung
Abschliessend müssen wir lediglich noch die Initialisierung ‹ der Register bereitstellen. Hierzu nehmen
wir an, dass am Anfang die Register R0 Rm mit den Werten i0 im belegt sein müssen. Die
erste auszuführende Zeile soll die Zeile mit Nummer 0“ sein. Wir können dies durch folgende Formel
”
erreichen:
3
3
i 3 zeile a a
F
reg a 0
i0 reg a m
m
Nach all diesen Konventionen fassen wir für ein festes Programm Š mit k Zeilen und mit fester Initialisierung ‹ alle Formeln zu
3 F 3 F  3 F 3 3 F
FŒ €  : F

1
k
zusammen. Hierbei stellt FZ die entsprechende Formel für Zeile Z dar.
74
Der folgende Satz spiegelt wider, wie genau wir das Verhalten eines Programmes durch diese Formel mo delliert haben. Hierzu sei ein RM-Programm Š und eine Initialisierung ‹ gegeben. Ferner seien regŒ €  t i
und zeileŒ €  t die Funktionen, die die Registerinhalte und die Zeilennummer für Š mit Initialisierung ‹
zum Zeitpunkt t angeben (wie in unserer Tabelle). Es sei Rm das höchste jemals benutzte Register. Falls
E# 0 k $ , andernfalls setzen wir T “ (T
das Programm nach k Zeitschritten anhält, setzen wir T
ist die Zeitpunktmenge“). Die Formel FŒ €  sei wie oben definiert.
”
Satz 3.2.5 Es gilt:
(i) Die Formel FŒ
(ii)
(iii)
€ „
Die Formel FŒ € „
Die Formel FŒ € 
reg t i ist gültig für alle t T und i # 0 m $ .
Œ €
/
/
zeile t
zeileŒ €  t ist gültig für alle t / T .
?
STOP ist genau dann gültig, wenn Š bei Initialisierung ‹ anhält.
reg t i
Beweis: Wir beweisen zunächst (i) und (ii) durch Induktion über die Zeitpunktmenge T . Falls T endlich ist, muss diese Induktion beim erreichen der STOP-Zeile abgebrochen werden. Wir müssen zeigen,
dass jede Struktur, die zu den unter (i) und (ii) angegebenen Formeln passt, automatisch Modell dieser
Formeln ist. Mit anderen Worten jedes Modell von FŒ €  muss automatisch auch die Formeln zeile t
g reg t i erfüllen. Es sei also ein Modell von FŒ . Im Folgenden verwenden
zeileŒ €  t und reg t i
Œ €
€  wir (unter leichtem Missbrauch der Notation) die Abkürzung n sowohl für n : f f f a als
auch für n :
Y [ZW X
Y f Z[ W f X a .
n-mal f ”
n-mal f
f
die Formel F also
Induktionsanfang: Insbesondere erfüllt
reg a 0
In
zeileŒ
gilt somit zeile 0
€
i0
0
3 3
reg a m
und reg
0 i regŒ
im
€
3
"
zeile a
0 i
a
Induktionsschritt: Wir nehmen nun an, dass die Behauptung für den Zeitpunkt t gilt und folgern die
Behauptung für den Zeitpunkt t 1. Es sei hierzu Fi die Formel, die die i-te Zeile beschreibt. Die zum
Zeitpunkt t auszuführende Zeilennummer Z ist zeileŒ €  t . Wir müssen die sieben Fälle der verschiedenen
Befehlstypen unterscheiden.
Fall 1: Angenommen Zeile Z hat die Form Z: GOTO L“. Dann erfüllt
”
1 x1 t zeile t Z
!
"
reg f t x
j3 1 t zeile t reg t x
die Formel
Z
zeile f t
L
Da Z die zum Zeitpunkt t auszuführende Zeile ist, gilt auf Grund der voraussetzbaren Induktionsannahme
i zeileŒ t Z. Somit gilt wegen obiger Formel (da die Prämissen der Form zeile t i
zeile t
€
^
Z) erfüllt sind) einerseits zeile f t
regŒ €  t 1 i , was zu beweisen war.
L und andererseits für alle i
/
# 0 m $
reg
f
t !
i ^
Fall 2–6: Die Analyse für die anderen Befehlstypen geschieht vollkommen analog zu Fall eins, wobei
hier die Definitionen der Funktionen plus mal und minus entscheidend eingehen. Die Definition der
jeweiligen prädikatenlogischen Formeln für die Zeilen ist genau so angelegt, das der Induktionsschritt
durchführbar ist. Die Ausführung sei dem Leser überlassen.
Die Aussagen (i) und (ii) sind somit bewiesen.
75
Zum Beweis von (iii) betrachten wir zunächst ein Programm welches zum Zeitpunkt t eine STOP-Zeile
" Z gilt. Die Defini(mit Nummer Z) erreicht und somit anhält. Aussage (ii) stellt sicher, dass zeile t
tion der Formel für die STOP-Zeile beinhaltet aber, dass
1 t zeile t gilt. Somit muss gelten STOP
?
Z
STOP
?
1.
Sei nun umgekehrt Š ein Programm, dass bei Initialisierung ‹ nicht anhält und
Wir können das Universum von insbesondere so wählen, dass
wieder Modell von FŒ €  .
6# a f a ! f f a !
a$
die einzigen Elemente des Universums sind.
Es seien Z1 Zk die Nummern von Zeilen, die STOP-Anweisungen enthalten. Die Teilformeln der
1 Z STOP ? für i 1 k sind die einzige Teilformeln von FŒ , bei der das
Form t zeile t
i
?
mit zeileA t " Z mit i Z €  Z , denn
STOP Prädikat auftritt. Nach (ii) gibt es aber kein t /
/ 1 1 k ^
i
für alle Zeitpunkte hat ja zeileA t den Wert der jeweiligen Programmzeile. Die Formel t zeile t
?
? erfüllt. Wir können somit insbesondere
Z
STOP ist somit unabhängig vom Wert von STOP
?
?
STOP
0 setzen. Die Formel FŒ € „ STOP ist also in diesem Fall nicht gültig.
Bemerkung: Die Definition der Formel für die STOP-Zeile enthielt ferner noch den Teilausdruck
1 x1 t zeile t "
Z
erg x
reg t x
Dieser stellt sicher, dass, falls das Programm anhält, die Ergebnisse der Berechnung (also die Registe
rinhalte R0 Rm ) durch die Funktion erg x widergespiegelt werden. Hält das Programm nicht an, so
sind die Werte dieser Funktion beliebig. Der Beweis sei dem Leser überlassen.
76
3.3
Ableitbarkeit und Beweisbarkeit
Zu Beginn des 20. Jahrhunderts standen die Mathematiker vor einer grossen Herausforderung. Auf dem
2. Internationalen Mathematikerkongreß im Jahre 1900 formulierte David Hilbert dreiundzwanzig Probleme, die seines Erachtens Kernprobleme für die zukünftige mathematische Forschung darstellten. Einige der Probleme waren mathematisch klar umrissene kurze Fragestellungen, andere wiederum würde
man aus heutiger Sicht eher als komplettes Forschungsprogramm bezeichnen. In der Tat waren Hilberts
Probleme Stein des Anstosses für viele der wesentlichen mathematischen Fortschritte des kommenden
Jahrhunderts. Einige der Probleme sind bis heute ungelöst.
Gleich das zweite Hilbert’sche Problem befasste sich mit den logischen Grundlagen der Mathematik.
Hilbert fragte darin nach einem Beweis für die Widerspruchsfreiheit des Axiomensystems für die (reelle) Arithmetik. Es sollte nachgewiesen werden, dass es nicht möglich ist, durch einen streng formale
endliche Folgerungskette aus diesen Axiomen eine Aussage und gleichzeitig ihr Gegenteil herzuleiten.
Angeregt durch diese Fragestellung begannen einige Jahre später zwei Mathematiker ein monumentales
Werk. Bertrand Russell und Alfred North Whitehead begannen (zunächst unabhängig voneinander) einen
Versuch das gesammte damals bekannte mathematische Wissen formal aus einer kleinen Menge von
Grundvoraussetzungen mit einer kleiner Menge von Schlussregeln abzuleiten. Die Ergebnisse flossen in
das dreibändige Werk Principia Mathematica (1910-1913) ein. Formal“ ist hier wirklich im strengen
”
Sinne gemeint. Aus heutiger Sicht sollten die dort geführten Ableitungen so sein, dass deren Korrektheit
durch ein Computerprogramm, in welches man die Zeichenfolgen der Principia Mathematika einfüttert,
bestätigt werden kann.
Zwei typische Seiten aus der Principia Mathematica
Die Principia Mathematika wird häufig als einflussreichtes Werk“ der mathematischen Literatur des 20.
”
Jahrhunderts bezeichnet, unter anderem weil sie einen sehr strengen Massstab des Konzeptes Beweis”
barkeit“ anlegte.
77
Es hat schon einen leicht ironischen Beigeschmack dass sich herausstellen sollte, das das Werk in der
(durchaus vernünftig erscheinenden) geplanten Allumfassendheit neweisbar zum scheitern verurteilt
”
war“. Im Jahre 1931 zeigte Kurt Gödel seinen berühmten Unvollständigkeitssatz der in groben Worten
besagt, dass es in jedem formalen System, welches mächtig genug ist die natürlichen Zahlen zu beschreiben Aussagen gibt, die zwar wahr sind, sich aber mit Mitteln des Systems nicht beweisen lassen. Wir
werden auf diesen sehr überraschenden Satz im nächsten Abschnitt noch ausführlich eingehen. Zunächst
wollen wir uns aber mit einer formalen Präzisierung des Begriffs Ableitbar“ befassen. Wir werden da”
bei sehen, dass sich (trotz Gödels Unvollständigkeitssatz) auch vieles Positives über die Ableitbarkeit
innerhalb eines Axiomensystems aussagen lässt.
3.3.1
Ein Beweiskalkül
Genau so, wie wir mit der Registermaschine ein minimalistisches Modell für Berechenbarkeit angegeben
haben, wollen wir jetzt ein minimalistisches Modell für Beweisbarkeit“ (bzw. Ableitbarkeit“) angeben.
”
”
Analog zur Registermaschine gibt es auch hier wieder viele gleichwertige Ansätze, die sich lediglich nur
in der Wahl und Mächtigkeit der erlaubten Schlussweisen unterscheiden. Genau so wie bei Programmiermodellen kann man durch geeignete Transformationen jedes vernünftige“ Ableitbarkeitsmodell in jedes
”
andere übersetzen, indem man die Regeln des Einen durch eine Kette von Schlüssen im Anderen ausdrückt. Das Beweiskalkül, welches wir jetzt einführen wollen, ist insofern extrem minimalistisch, indem
es neben den uns aus Abschnitt 2.8 bekannten prädikatenlogischen Grundwahrheiten ausschliesslich mit
einer Form des logischen Schliessens“ auskommt.
”
Betrachten wir zunächst einmal den Begriff des Beweises“ ein wenig genauer. Üblicherweise geht man
”
beim Beweisen eines mathematischen Sachverhaltes davon aus, dass eine gewisse Menge an mathematisch unumstösslichen Tatsachen (Axiome) gegeben sind, die a priori als wahr anerkannt werden. Solche
Axiome kann man als prädikatenlogische Formeln niederschreiben, wie wir es z.B. mit unseren in Abschnitt 3.1.3 angegebenen Arithmetik Axiomen gemacht haben. Um nun aus solchen Axiomen einen
Satz (z.B. a b 2 a2 2ab b2“) zu beweisen, gibt man eine Folge von beweisbaren“ Aussagen
”
”
an. Bei dieser Folge von Aussagen soll bei jeder einzelnen Formel einfach erkennbar sein warum diese
gilt – solange man alle vorherigen Aussagen als wahr akzeptiert. Ferner soll die letzte Aussage der zu
beweisende Satz sein. Ist es möglich eine solche so genannte Herleitung anzugeben, gilt der Satz als
bewiesen.
Dieses Konzept des Beweisens wollen wir nun formalisieren. Hierzu fassen wir unsere Menge von
Axiomen A1 Ak in einer Menge Γ zusammen. Eine Herleitung ist nun einen Folge von Aussa
gen F1 F2 Fk . So dass jede der Aussagen Fi aus einem der folgenden Gründe als wahr anerkannt
werden kann.
Fi ist Axiom,
Fi ist eine prädikatenlogische Grundwahrheit,
Fi ist direkte Konsequenz der Formeln F1
Fi .
Wir legen im Folgenden genau fest, was hierbei unter prädikatenlogische Grundwahrheit“ und direkte
”
”
Konsequenz“ zu verstehen ist. Zur formalen Vereinfachung fassen wir im Folgenden 7 xF als Abkürzung
> 1 x ?> F auf, so dass die Betrachtung des 7 -Quantors vollkommen entfällt. Weiterhin gehen wir
für
davon aus, dass der “-Operator wie ein Prädikat behandelt werden kann.
”
Definition 3.3.1 (Beweiskalkül) Es sei Γ eine Menge von Axiomen. Eine Folge von Formeln
F1 F2
78
Fk
heisst Herleitung aus Γ wenn für jedes Fi eine der Folgenden Aussagen gilt:
(A) Fi
/
Γ ist Axiom.
(L1) Die Boole’sche Form von Fi ist eine Tautologie.
1
(L2) Fi hat die Form xF
(L3) Fi hat die Form F
(L4)
(L5)
(L6)
(L7)
1
F • x– t — .
xF, wobei x in F nicht frei vorkommen darf.
1 G
Fi hat die Form x F
Fi hat die Form t t.
+3 3
Fi hat die Form t1 t1 +3 3
Fi hat die Form t1 t1 1
tk
tk
xF
1
t+
xG .
t k
P t t f t1
t+
k
1
k
k
(S) In der Herleitung gibt es Formeln Fa und Fb mit Sei a
wobei Fb die Form Fb
C F
a
F
i
+ t + .
P t + k
t + .
f t1
˜
1
k
i und b ˜ i,
hat.
In der obigen Definition sind die Punkte (L1)–(L7) gerade einige unserer in Abschnitt 2.8 angegebenen
Prädikatenlogischen Grundwahrheiten, also Formeln, die aufgrund der Semantik der Prädikatenlogik
(Bedeutung der Quantoren, des Gleichheitszeichen und der logischen Operatoren) automatisch in jeder
beliebigen Struktur gelten müssen. Die Schlussregel (S) besagt soviel wie
Wenn man A schon weiss und auch von der Formel A
”
auch B glauben.“
B überzeugt ist, dann darf man
Man kann nun einfach den folgenden Satz beweisen
Satz 3.3.2 Es sei Γ eine Menge Axiomensystem und F1
gerung von Γ.
Fk eine Herleitung aus Γ, dann ist Fk Fol-
Beweis: Wir müssen zeigen, dass jedes Modell aller Axiome in Γ automatisch auch Fk erfüllt. Wir
Führen den Beweis über Induktion in der Länge der Herleitung. Besteht die Herleitung nur aus einer
Formel F1 , so muss diese entweder Axiom sein eine der durch (L1)–(L7) beschriebenen Formen haben.
™ 1 weil ja alle Axiome erfüllt. Im Zweiten Fall gilt ™ F 1 weil ohnehin
Im ersten Fall gilt F1
1
alle Formeln der Formen (L1)–(L7) in jeder Struktur gelten.
™ gDš h
™
g
Gehen wir nun also (als Induktionsvoraussetzung) davon aus dass F1
F2
Fk › 1 1 gilt.
™
Wir zeigen Fk
1 entweder Fk ist wieder Axiom oder Fk hat eine der durch (L1)–(L7) beschriebene
Form oder Fk entstand durch die Schlussregel (S). In den ersten beiden Fällen können wir wie schon
zuvor argumentieren. Im dritten Fall gibt es Formeln Fa und Fb mit Sei a ˜ k und b ˜ k, wobei Fb die
( F F hat. Nach Induktionsvoraussetzung gilt also ™ F " 1 und š F F 1 also
Form Fb
a
a
i
š a 1.k
gilt auch Fk
Wenn wir also eine Formel Fk im Beweiskalkül herleiten können, so ist sie eine Folgerung der Axiome
Γ. Das Beweiskalkül gibt uns hierbei einen formal wasserdichten“ Herleitungsbegriff an die Hand.
”
Wir erhalten somit eine Möglichkeit aus einem Axiomensystem Folgerung zu beweisen. Das eigentlich
Überraschende ist, der nun folgende Satz, der besagt, dass wir jede (!) Folgerung des Axiomensystems
im Beweiskalkül herleiten können.
79
Satz 3.3.3 (Vollständigkeitssatz der Prädikatenlogik) Es sei Γ ein Axiomensystem und F eine Formel,
so dass jedes Modell aller Formeln in Γ auch Modell von F ist, dann gibt es eine Herleitung im Beweis
kalkül F1 Fk mit F Fk .
Leider geht der Beweis dieses wichtigen und sehr schönen Resultats über den Rahmen unserer Vorlesung hinaus. Wir wollen uns im Folgenden auf die Diskussion einiger seiner Konsequenzen und einiger
Beispiele beschränken6 .
Das Beweiskalkül ist durch den Vollständigkeitssatz somit zum allmächtigen“ Beweisverfahren gewor”
den: Alles was wahr ist, lässt sich im Beweiskalkül ableiten. Leider gibt uns dies noch kein Verfahren
an die Hand zu jeder wahren Aussage automatisch einen Beweis zu finden, wie wir später noch sehen werden. In gewisser Weise ist das Beweiskalkül sogar eine sehr umständliche Beweismethode, da
man wirklich auf die elementarsten Einheiten des logischen Schliessens zurückfällt (genau so wie die
Registermaschine keine komfortable Programmiersprache war, da sie nur sehr wenige und elementare
Befehle zuliess). Um ein klein wenig Gefühl für Beweise im Beweiskalkül zu bekommen wollen wir
zwei Beispiele betrachten.
Beispiel 3.3.4 Zunächst ein Beispiel welches eine offensichtliche allgemeingültige Formel ist. Wir können
E# $ ausgehen. Wir wollen beweisen
somit von Γ
x
Hier die Herleitung:
F1 : x
F2 : x
F3 : x
Y
3
y x
x
x
x
x
x y 3 x :x y y
F4 : x
x
F5
x
3
y
x
x
y
y
y
x
x
(L7)
x x 3 y x [ZW
A œžMa B Ÿ A Mœž A œ C a Mœž B œ C M x
x
3
x y
x
x
y
x
y
x
y
y
x
X
(L5)
(L1)
(S)
(S)
Wir sehen hierbei das selbst um eine scheinbar triviale Aussage zu beweisen schon gehöriger formaler
Aufwand notwendig sein kann. Die unter der geschweiften Klammer angegebene Formel entspricht dem
booleschen Gerüst von F3 und ist eine Tautologie (nachprüfen!). Neben den Formeln sind weiterhin die
Gründe angegeben, warum diese Formel als wahr zu akzeptieren ist.
Beispiel 3.3.5 Noch ein Beispiel für eine allgemeingültige Formel. Sei F irgend eine Formel. Wir wollen
beweisen
1 xF > 1 x> F ? 7 xF …¡ ¢¤£<£¥£<¢ ¦
haben bisher zwar immer nur endliche Axiomensysteme Γ
A1
An betrachtet, die ganze Theorie des Beweiskalküls ist aber auch absolut auf unendliche Axiomensysteme anwendbar. Hierzu fassen wir einfach unendlich viele Formeln
in Γ zusammen. Ein Modell von Γ muss dann nach wie vor alle Formeln in Γ erfüllen. Jede Aussage F, die in allen Modellen
von Γ gültig ist dann durch eine endliche Herleitung im Beweiskalkül beweisbar.
6 Wir
80
Hier die Herleitung:
1 xF F
1 x> F > F B
F2
B 1 x> F > F F ?> 1 x > F F3
Y
[ZW
X
 A œ B Mœ§T¨ B A
œ ¨ A F1
?> 1 x> F B 1 xF F F ? > 1 x> F 1 xF
F5
Y
[ZW
 Aœ B Mž
œ M B œ C Mœ§ Aœ C M F4
F6
F7
F
B F ? > 1 x> F 1 xF ? > 1 x> F 1
xF
?> 1 x > F (L2)
(L2)
(L1)
?> 1 x> F X
(S)
(L1)
(S)
(S)
Es ist sehr empfehlenswert, sich eine solche Herleitung im Detail anzusehen und sich für jede Formel
klarzumachen, warum es sich hierbei um einen korrekten Schritt im Beweiskalkül handelt.
3.3.2
Beweisbarkeit und Berechenbarkeit
Was gibt uns nun ein solcher formaler Herleitungsbegriff. Wenngleich er uns keine direkte Möglichkeit
gibt zu einer wahren Formel sofort einen Beweis zu finden, so können wir immerhin alle aus einem
Axiomensystem Γ ableitbaren Formeln aufzählen. Wir wollen dieses Verfahren hier (ein wenig informell)
beschreiben.
Wir gehen im Folgenden der Einfachheit halber wieder von einem endlichen Axiomensystem Γ aus.
Letztlich handelt es sich bei unseren Herleitungen um nichts anderes als um Zeichenketten. Wir können
diese also prinzipiell sowohl in ein Computerprogramm einfüttern, als auch Programme schreiben, die
solche Zeichenketten automatisch erzeugen. Ein Computer kann Formeln auf syntaktische Korrektheit
prüfen, und feststellen, ob eine bestimmte Zeichenfolge ein Axiom aus Γ ist oder, den Bildungsregeln
(L1)–(L7) genügt. Somit kann man für eine Sequenz von Formeln
F1 F2
Fk
(dies ist auch nur eine Zeichenfolge) per Computer abprüfen, ob es sich dabei um eine korrekte Herleitung im Beweiskalkül handelt oder nicht. Unser Beweiskalkül ist also eine ideale Sprache für ein Projekt
wie die Principia Mathematika: ein einmal erbrachter Beweis kann rein maschinell auf seine Richtigkeit
überprüft werden.
Dies ermöglicht nun das folgende Verfahren zur Aufzählung aller gültiger Formeln. Man schreibt zunächst
ein Computerprogramm, welches der Reihe nach alle mögliche endlichen Zeichenfolgen aufzählt. (Dies
kann folgendermassen geschehen: zunächst zählt man alle Zeichenfolgen der Länge 1 auf, dann alle Zeichenfolgen der Länge 2, dann alle Zeichenfolgen der Länge 3, usw.). Natürlich werden die meisten der so
erzeugten Zeichenfolgen keinerlei syntaktisch korrekten Formeln, Geschweige denn Herleitungen sein.
Die meisten dieser Zeichenfolgen sind vollkommen sinnloses Kauderwelsch. Dennoch, alle syntaktisch
korrekten Herleitungen werden sich in dieser Aufzählung wiederfinden (nebenbei bemerkt finden wir
dort auch die Zeichenfolge von Goethes Faust und der Bibel wieder). Jedes Element dieser Liste aller
”
81
endlichen Zeichenfolgen“ speisen wir gleich nach seiner Erzeugung in ein Programm ein, welches entscheidet, ob es sich um eine syntaktisch korrekte Herleitung im Beweiskalkül handelt. Wenn ja, nehmen
wir die letzte Formel dieser Herleitung und hängen sie in eine Datei wahrheiten.txt an7 . Diese Datei
(die nach Start des Programmes ständig am wachsen ist) enthält nun eine Liste aller aus Γ ableitbaren
Aussagen. Nach dem Vollständigkeitssatz wissen wir, dass jede Folgerung aus Γ ableitbar ist. Da wir
ja alle möglichen beweisbaren Aussagen erzeugen, können wir sicher sein, dass es für jede in Γ gültige
Aussage auch einen Zeitpunkt gibt, zu dem diese in die Datei aufgenommen wird.
Man könnte nun meinen, eine solche Datei ist nun der Schüssel zum maschinellen Entscheiden, ob einen
Aussage F wahr (aus Γ ableitbar) ist, oder nicht. Wir brauchen ja lediglich nachzusehen, ob F in der
Datei wahrheiten.txt auftaucht oder nicht. Dies ist allerdings ein Fehlschluss. Wie gesagt wird die
Datei ja laufend erweitert. Wir können also zu keinem Zeitpunkt der Weltgeschichte sicher sein, ob eine
Formel F, die bisher nicht in der Datei steht nicht später irgendwann dazu kommen wird8 .
Man kann also durch genügend langes Warten für jede ableitbare Formel deren Ableitbarkeit ( Gültigkeit) zu bestätigen. Bei einer nicht-ableitbaren Formel kann man sich jedoch niemals sicher sein, ob diese
tatsächlich nicht ableitbar ist — es könnte ja irgendwann doch einmal eine Ableitung gefunden werden.
Man spricht in diesem Fall von der Semi-entscheidbarkeit des Ableitungsbegriffes.
7 Diese Datei wird durch das Programm also ständig erweitert. Sie enthält ausschliesslich beweisbare Aussagen. Wir können
aber zu keinem Zeitpunt sicher sein, ob eine bestimmte beweisbare Aussage bereits abgespeichert wurde.
8 Der Grund warum wir nicht wissen ab nicht vielleicht irgendwann eine Formel in die Datei aufgenommen wird, ist der
Folgende. Wir erzeugen die Wahrheiten sortiert nach der Länge ihrer Beweise. Es kann nun aber durchaus sein, dass eine
kurz formulierbare Aussage einen sehr langen Beweis hat. Ein prominentes Beispiel für eine Solche Aussage ist der Berühmte
Fermatsche Satz der Besagt, dass es für n 2 keine natürlichen Zahlen x y z gibt mit xn yn zn . Der derzeit Kürzeste
Bekannte Beweis dieser Aussage umfasst mehr als 200 Seiten (und folgt keinesfalls den streng formalen Anforderungen des
Beweiskalküls).
©
¢ ¢
82
ˆ
…
3.4
Der Diagonalentrick
Die Bemühungen um einen formal vollständigen und korrekten Aufbau der Mathematik (wie z.B. die
Principia Mathematika fanden ein jähes Ende durch den von Gödel 1931 bewiesenen Unvollständigkeitssatz. Dieses Ergebnis, welches wohl zu den spektakulärsten mathematischen Errungenschaften unseres
Jahrhunderts gehört besagt grob gesprochen, dass es in jedem formalen System, welches stark genug ist die natürlichen Zahlen als
Struktur zu beschreiben, Aussagen gibt, die zwar wahr, aber nicht ableitbar sind.
Der Schlüssel zum Beweis dieses Satzes liegt in der so genannten Diagonalenmethode. Diese trickreiche
Beweistechnik, die erstmals von Cantor für Fragen der Mengenlehre eingesetzt wurde, führt uns nicht nur
an die Grenzen des logisch Machbaren“. Wir werden auch die Grenzen des mit Computern Machbaren“
”
”
erreichen. Wir werden auch sehen, dass es wohldefinierte Entscheidungsprobleme gibt, für die es nicht
möglich ist ein Entscheidungs-Programm zu schreiben.
Konkret werden wir die Diagonalenmethode hier in drei Zusammenhängen benutzen:
Die Menge der reellen Zahlen ist nicht abzählbar,
Das Halteproblem für Registermaschinen ist unentscheidbar,
Gödels Unvollständigkeitssatz.
3.4.1
Abzählbarkeit
Wir führen zunächst den Begriff der Abzählbarkeit ein. Grob gesprochen heisst eine Menge M abzählbar,
wenn man deren Elemente der Reihe nach hinschreiben kann (in eine möglicherweise unendlich lange
Folge), so dass aber jedes Element von M sicher mindestens einmal dabei auftritt. Formell definieren
wir:
Definition: Eine Menge M heisst abzählbar, wenn es eine Funktion φ :
existiert mit φ n m.
m / M (mindestens) ein n /
M gibt, so dass zu jedem
Nochmals in anderen Worten: eine Menge ist abzählbar, wenn man deren Elemente durchnumerieren
kann Hier sind einige Beispiele für abzählbare Mengen:
Die natürlichen
selbst.
#
Die ganzen Zahlen ª
k 3 k 2 k 1 0 1 2 3 <$ . (Hier ist eine mögliche Abzählung“: 0 1 k 1 2 k 2 3 k 3 )
”
E# a ƒ a b ª ; b p 0 $ . Hier ist eine mögliche Abzählung“:
Die rationalen Zahlen «
/
b
”
0
1
k
1
1
1
2
1 2 1
k
1
2
k
2
3
1
1 1 3
k
3
1
k
1
3
2
3 2 3
k
3
2
k
2
3
Die Abzählbarketi von « Resultat ist ein wenig überraschend, da es ja bereits in jedem noch so
kleinen Intervall unendlich viele Brüche gibt.
83
Alle endlichen Zeichenfolgen über einem endlichen Zeichenvorrat A. Man erhält eine Abzählung,
wenn man die Zeichenfolgen zuerst nach ihrer Länge sortiert und dann bei gleicher Länge lexiko
graphisch ( wie im Telefonbuch“).
6”# a b c $ . Abzählung: a b c aa ab ac ba bb bc ca cb cc aaa aab F
Beispiel: A
Alle syntaktisch korrekten JAVA-Programme. (Die Programme sind endliche Zeichenketten über
einem endlichen Zeichenvorrat, und tauchen somit in der oben angegebenen Aufzählung auf.)
Alle syntaktisch korrekten Programme unserer Registermaschine.
Alle syntaktisch korrekten Formeln der Prädikatenlogik9
3.4.2
Die Nicht-Abzählbarkeit der reellen Zahlen
Die reellen Zahlen ¬ sind nicht abzählbar. Der Beweis dieses Resultates wurde erstmalig von Cantor
mit Hilfe des Diagonalenarguments durchgeführt. Damit wurde erstmalig die Existenz überabzählbarer
Mengen nachgewiesen. Wir geben das Argument zunächst in informeller Form an. Es reicht, zu zeigen
6#
dass die Zahlen bereits im Intervall 0 1 : x / ¬ ƒ 0 ˜ x ˜ 1 $ nicht abzählbar sind.
Angenommen alle Elemente von 0 1 liessen sich der Reihe nach“ in einer Liste aufschreiben. Nehmen
”
wir z.B. an, die Liste beginnt folgendermassen:
φ1
φ2
φ3
φ4
φ5
φ6
φ7
..
.
0,
0,
0,
0,
0,
0,
0,
5
1
5
2
4
3
2
0
2
6
4
7
4
7
0
3
7
1
7
6
0
..
.
0
4
1
6
0
9
1
0
5
2
7
0
6
8
0
6
3
8
5
4
7
0
7
4
9
0
0
5
..
.
...
...
...
...
...
...
...
Wir führen diese Annahme zu einem Widerspruch, indem wir eine reelle Zahl konstruieren, die nicht in
dieser Liste vorkommt. Wir erhalten solch eine reelle Zahl D / 0 1 , folgendermassen: Die i-te Stelle
nach dem Komma von D sei irgendeine Ziffer, aber auf keinen Fall identisch zur i-ten Ziffer von φ i . In
unserem Beispiel kann man den die ersten Ziffern von D wie folgt wählen:
D
0 6387156 Mit anderen Worten, entsteht D aus der Diagonalenziffern unserer Liste, indem jede Ziffer verändert
wird. Die Zahl D kann nicht in unserer Liste enthalten sein!!!
Sie ist nicht φ 1 , denn von dieser unterscheidet sie sich in der ersten Stelle nach dem Komma,
sie ist nicht φ 2 , denn von dieser unterscheidet sie sich in der zweiten Stelle nach dem Komma,
sie ist nicht φ 3 , denn von dieser unterscheidet sie sich in der dritten Stelle nach dem Komma,
usw.
Wir haben also unter der Annahme, dass alle reellen Zahlen in 0 1 sich in eine abzählbare Liste φ
schreiben lassen, eine Zahl D konstruiert, die nicht in der Liste φ steht, aber in
mathbbR enthalten ist. Ein Widerspruch! Also sind die reellen Zahlen nicht abzählbar.
9 Durch
geeignete Zndizierungen können wir hierbei auch unendlich viele Funktions- und Prädikatensymbole zulassen.
84
Etwas formaler lässt sich das Argument wie folgt ausführen:
Wir nehmen an φ :
0 1 # sei
eine
Abzählfunktion
für die Zahlen in 0 1 . Ferner sei für eine Zahl
r / 0 1 der Ausdruck • r i— / 0 1 2 3 4 5 6 7 8 9 $ die i-te Ziffer von r nach dem Komma. Eine Zahl
vollständig festgelegt. Wir definieren D z.B. durch
r ist durch alle • r i— ; r /
• D i— • φ i !
i—\
1 mod 10 für i /
‰ ‰ gilt D
Diese Definition erzwingt die folgende Eigenschaft von D. Für jedes i /
kein i mit D φ i (also ist D nicht in der Liste enthalten). Ein Widerspruch.
3.4.3
‚
φ i . Also gibt es
Das Halteproblem
Ist es möglich ein allgemeines Programm zu schreiben, welches ein beliebiges Programm zur Eingabe
nimmt und testet, ob dies jemals anhält? Antwort: NEIN! Der Beweis dieses (recht überraschenden)
Satzes kann ebenfalls mit einem Diagonalenargument geführt werden.
In gewisser Weise ist die Nichtexistenz eines Haltetesters“ bedauerlich. Man stelle sich vor, man hätte
”
beim Programmieren ein Werkzeug mit dem man testen könnte, ob ein selbst geschriebenes Programm
terminiert. Dies wäre ein sehr praktisches Entwicklungswerkzeug. Tatsächlich ist es so, dass verschiedene Varianten des nun folgenden Beweises zeigen, das praktisch jede nicht-triviale Eigenschaft eines
Programmes (z.B. festzustellen, ob es genau das gewüschte leistet) nicht vollautomatisch abgeprüft werden kann. Das heisst natürlich nicht, dass man prinzipiell für kein Programm beweisen könnte, das es
das gewüschte leistet (führende Softwarehersteller, behaupten ja zu weilen, es sei unmöglich korrekte Programme zu schreiben). Für spezifische Programme kann deren Korrektheit oftmals nachgewiesen
werden. Unser Satz besagt lediglich, dass dieser Prozess nicht automatisiert werden kann.
Programme als Zahlen
Um den Beweis durchführen zu können, müssen wir versuchen den obigen Satz etwas präziser zu fassen.
Die erste Hürde auf diesem Weg haben wir bereits hinter uns gebracht: Wir haben den Begriff der Entscheidbarkeit formalisiert. Leider umfasst unser Entscheidbarkeitsbegriff nur Eigenschaften der natürlichen Zahlen (da unsere RM nur natürliche Zahlen als Eingabe akzeptiert). Wir müssen es also irgendwie
schaffen, Programmen in eindeutiger Weise natürliche Zahlen zuzuordnen, um Programme als Eingabe
der RM verwenden zu können. Hinter diesem Prozess steckt überhaupt nichts mysteriöses — es ist das,
was ohnehin ständig in unseren Computern passiert: Programme sind nichts anderes als Abfolgen von
Zeichen; jedes Zeichen ist im Computer als eine Folge von Nullen und Einsen repräsentiert (z.B. durch
den ASCII Code des Zeichens); das gesamte Programm ist also nichts anderes als eine lange Folge von
Nullen und Einsen und somit nichts anderes als eine lange Binärzahl. Obwohl diese Überlegung schon
alleine ausreicht, um Programme als Zahlen aufzufassen, wollen wir den Gedanken dennoch ein wenig
expliziter ausführen. Betrachten wir das folgende Programm (wir schreiben unsere Register als R0, R1,
R2, ).
0:
1:
2:
3:
R1=R1 R0
n
IF R1=0 GOTO 3
GOTO 1
STOP
Ersetzen wir jedes Zeichen durch seinen ASCII Code, erhalten wir:
85
Y;[Z0W­X Y­[]:W­X Y­[ZW;X Y­[ZRW;X Y­[Z1W­X Y­[Z=W­X Y­[ZRW­X Y;[Z1W­X Y;[Z-W­X Y­[]RW­X Y­[Z0W;X
00110000 00111010 00100000 01010010 00110001 00111101 01010010 00110001 00101101 01010010 00110000
Y;[Z1W­X Y­[]:W­X Y­[ZW;X Y­[ZIW;X Y­[ZFW­X Y­[ZW­X Y­[ZRW­X Y;[Z1W­X Y;[Z=W­X Y­[]0W­X Y­[ZW;X Y­[ZGW;X Y­[ZOW­X Y­[ZTW­X Y­[ZOW­X Y;[ZW­X Y­[]3W­X
00110001 00111010 00100000 01001001 01000110 00100000 01010010 00110001 00111101 00110000 00100000 01000111 01001111 01010100 01001111 00100000 00110011
Y;[Z2W­X Y­[]:W­X Y­[ZW;X Y­[ZGW;X Y­[ZOW­X Y­[ZTW­X Y­[ZOW­X Y;[ZW­X Y;[Z1W­X
00110010 00111010 00100000 01000111 01001111 01010100 01001111 00100000 00110001
Y;[Z3W­X Y­[]:W­X Y­[ZW;X Y­[ZSW;X Y­[ZTW­X Y­[ZOW­X Y­[ZPW­X
00110011 00111010 00100000 01010011 01010100 01001111 01010000
Unser Programm erhält somit eindeutig die Binärzahl:
001100000011101000100000010100100011000100111101010100100011000100101101010100100011000000110001001110100010000001001001010001100010000001010010
001100010011110100110000001000000100011101001111010101000100111100100000001100110011001000111010001000000100011101001111010101000100111100100000
0011000100110011001110100010000001010011010101000100111101010000
Diese Zahl ist zwar recht gross, spiegelt aber ohne Informationsverlust unser Programm wider. Man kann
sagen die Zahl zu kennen ist dasselbe wie das Programm zu kennen. Tatsächlich ist im Computer das
Programm nichts anderes als obige Bitfolge. Wir haben somit beschrieben, wie man einem Programm
Š eindeutig eine Zahl n Š zuordnet. (Es gibt natürlich viele Zahlen, die keinem syntaktisch korrekten
Programm entsprechen, aber dass braucht uns hier nicht zu interessieren.)
Den Prozess, einem syntaktischen Objekt (dem Programm) eindeutig eine Zahl zuzuordnen, nennt man
Gödelisierung, nach Gödel, der 1931 (da gab es noch keine Computer) erstmalig diese Technik eingesetzt hat, um seinen Unvollständigkeitssatz der Prädikatenlogik zu beweisen. Die Gödelisierung eines
Programmes erlaubt es uns, über das Programm quasi auf zwei Ebenen zu reden: Einerseits das Pro gramm als Programm Š mit all seiner Funktionalität, andererseits als Zahl n Š . Es ist nun die Frage,
welche Eigenschaften eines Programmes Š sich als rein arithmetische ( entscheidbare) Eigenschaften
der Zahl n Š ausdrücken lassen. Wir werden jetzt sehen, dass dies nur sehr begrenzt möglich ist.
Unentscheidbarkeit des Halteproblems
Wir sind nun in der Lage das Halteproblem formal zu definieren:
Gibt es ein RM-Programm Š
folgenden Wert haben soll
R1
R1
0
1
stop
welches für jede Eingabe R1
n
Š !
R2
falls das Programm Š bei Initialisierung R1
andernfalls?
m anhält, wobei am Ende R1
m anhält,
Das Programm Š stop wäre gewissermassen ein Haltetester“. Wir nehmen nun an, es gäbe solch ein
”
Programm Š stop und führen diese Aussage zu einem Widerspruch:
Hierzu modifizieren wir zunächst Š stop indem wir es in ein Programm Šs® top umschreiben“: Wir schieben
”
(unter sinngemässer Umbenennung der Sprunganweisungen) alle Zeilen von Š stop eine Zeilennummer
nach unten und schreiben in die so freigewordene ersten Zeile den Befehl:
0: R2=R1+R0
86
Diese Zeile kopiert den Inhalt von R1 nach R2 . Das Programm Š
unter der Annahme, dass Š stop tatsächlich tut was es soll):
Auf die Eingabe R1
R1
R1
hat folgende Eigenschaft (wie gesagt
Š hält Šs® top immer an, wobei am Ende R1 folgenden Wert hat:
0
1
falls das Programm Š bei Initialisierung R1
andernfalls.
n
®
stop
n
Š anhält,
Das Programm Šs® top testet also, ob ein Programm Š bei der Eingabe seiner eigenen Nummer n Š anhält
oder nicht (hier kommt Selbstbezüglichkeit“ ins Spiel).
”
Nun modifizieren wir Šs® top . Wir können annehmen, das ausschliesslich die letzte Zeile von Šs® top ine STOP
-Anweisung enthält. Ist dies nicht der vall ersetzen wir alle anderen STOP
-Anweisungen durch einen Sprung auf die letzte Zeile. Wir nehmen an, die letzte Zeile von Šs® top hat die
Nummer i. Wir ersetzen die letzte Zeile von Šs® top (die STOP-Zeile) durch zwei Befehle.
i : IF R1=0 GOTO i
i 1 : STOP
Das so entstandene Programm nennen wir Šstop
®® . In Šstop
®f® ersetzen wir praktisch die Ausgabe R1
eine Endlosschleife. Dieses Programm hat die folgenden Eigenschaften:
(+) Falls das Programm Š bei der Eingabe R1 n
hält Šstop
®f® bei der Eingabe R1 n Š nicht an.
(++) Falls das Programm Š bei der Eingabe R1
hält Šstop
®f® bei der Eingabe R1 n Š an.
n
Š anhält,
Š nicht anhält,
0 durch
Was aber macht unser Programm Šstop
®® wenn man es mit seiner eigenen Nummer als Eingabe füttert (hier
beisst sich die Katze endgültig in den Schwanz)? Hält es an, oder hält es nicht an?
Spielen wir die beiden Fälle durch:
Angenommen Šstop
®f® hielte bei der Eingabe R1 n
(+), dass Š stop
®f® nicht anhält. Ein Widerspruch!!
Š®f® stop
an. Dann bedeutet dies nach Eigenschaft
Angenommen Šstop
®® hielte bei der Eingabe R1 n Šstop
®f® nicht an. Dann bedeutet dies nach Eigenschaft (++), dass Š stop
®® anhält. Ebenso ein Widerspruch!!
Da Šstop
®® auf jeden Fall entweder anhält oder nicht, führt schon allein die Existenz von Šstop
®f® zu einem
Widerspruch. Somit kann also Šstop
®® nicht existieren. Das Programm Šstop
®f® entstand allerdings durch völlig
legale Modifikationen dem Haltetester“ Š stop . Somit kann es Š stop nicht geben. Schade !!
”
Fassen wir unsere Ergebnisse in einem prägnanten Satz zusammen:
Satz 3.4.1 Das Halteproblem ist algorithmisch nicht entscheidbar.
87
Was hat das mit dem Diagonalentrick zu tun?
Bei näherem Hinsehen entpuppt sich der letzte Beweis als eine Variante des Diagonalenverfahrens (gepaart mit Selbstbezüglichkeit). Stellen wir uns eine grosse Kreuzchen-Tabelle“, in der jede Zeile einer
”
Programmnummer entspricht, und in der jede Spalte einer Eingabezahl entspricht. Die Tabelle soll in Zei 2 n bei der
le n und Spalte m genau dann ein Kreuz enthalten, wenn das Programm mit Nummer n Š
Eingabe m anhält. Wäre das Halteproblem entscheidbar, so hiesse das, dass wir jeden Eintrag der Tabelle
berechnen können. Die Konstruktion unseres Programmes Šstop
®® entspricht dem konsequenten Verändern
der Diagonalelemente der Tabelle. Der Fehlschluss liegt allerdings diesmal nicht in der Annahme der
Abzählbarkeit (denn die Menge aller Programme ist sicher abzählbar), sondern in der Annahme der
Berechenbarkeit der Tabelle.
3.4.4
Und nun zur Logik . . .
Fassen wir nochmals zusammen, was wir bislang in der Vorlesung bereitgestellt haben:
Wir haben Prädikatenlogik als syntaktisches und semantisches System eingeführt.
Wir haben mit Mitteln der Prädikatenlogik Formeln definiert, die das Verhalten von natürlichen
Zahlen, Addition und Multiplikation beschreiben, und insbesondere die natürlichen Zahlen mit der
üblichen Addition und Multiplikationsoperation zum Modell haben. Ferner enthielt jedes Modell
der Formeln die natürlichen Zahlen als Teilstruktur.
Wir haben Formeln definiert, die das Verhalten von RM-Programmen beschreiben.
Wir haben das Beweiskalkül eingeführt, und somit einen formalen Beweisbarkeitsbegriff angegeben.
Unter Zuhilfenahme dieses Fundaments wollen wir nun zunächst die Unentscheidbarkeit der Prädikatenlogik (erster Stufe), und danach Gödels Unvollständigkeitssatz nachweisen. Hierbei werden wir weniger
auf eine strenge Beweisführung Wert legen (dies würde den Rahmen der Vorlesung sprengen), als vielmehr versuchen ein allgemeines Verständnis der Methoden zu vermitteln.
Unentscheidbarkeit der Logik erster Stufe
Wir wollen kurz skizzieren, welche Auswirkungen die Unentscheidbarkeit des Halteproblems auf die
Prädikatenlogik hat. In einer der vorangegangenen Abschnitten haben wir gezeigt, dass es ein Formelsystem FŒ €  gibt, welches das Verhalten eines Registermaschinenprogramms mit vorgegebener Initialisie?
rung ‹ beschreibt. Dieses Formelsystem enthält insbesondere ein null-stelliges Prädikat ST OP für das
sich folgende Eigenschaft beweisen lässt:
Das Programm Š hält bei Eingabe ‹ genau dann wenn FŒ
€ °¯
ST OP
? Als direkte Folgerung aus der Unentscheidbarkeit des Halteproblems erhalten wir
Satz 3.4.2 Die Frage ob eine Formel F aus einer Axiomensystem Γ folgt, ist nicht entscheidbar.
Beweis: Wäre dies Frage nach der Ableitbarkeit von F entscheidbar, so könnten wir ja entscheiden
?
ob ST OPP aus FŒ €  folgt. Dies wäre aber ein Haltetester, welcher nach Satz 3.4.1 ja nicht existieren
kann.
88
Gödels Unvollständigkeitssatz
Aber es kommt noch schlimmer. Gödels Unvollständigkeitssatz besagt: Ist ein formales System ∆ komplex genug, dass es die natürlichen Zahlen beschreiben kann, so gibt es in ihm immer eine wahre Aussage
ψ, deren Gültigkeit aus ∆ nicht abgeleitet werden kann.
Wir beschreiben hier Gödels Beweisskizze, die er seinem eigentlichen formalen Beweis vorausstellt.
Hiermit verzichten wir auf einen streng formalen Beweis und nehmen einige weisse Lügen“ in Kauf
”
(d.h. kleinere Unwahrheiten, die den groben Gedankengang vereinfachen aber nicht wesentlich verändern).
Gödels Beweis beruht auf der Tatsache, dass sich in einem System ∆ (welches komplex genug ist) Aussagen ψ formulieren lassen, die von sich selbst behaupten:
Ich bin nicht beweisbar.“
”
Ist nun eine solche Aussage beweisbar oder nicht. Nehmen wir zunächst an ψ sei aus ∆ beweisbar. Dann
ist sie insbesondere wahr (sofern die Aussagen in ∆ auch als wahr akzeptiert werden). Wenn die Aussage
ψ jedoch wahr ist, so ist sie nicht beweisbar (das ist ja gerade die Aussage). Widerspruch! Somit kann
ψ nicht beweisbar sein. Also macht ψ eine wahre Aussage. Wir erhalten also: ψ ist wahr aber nicht
beweisbar.
Wie gelangt man aber zu solchen Aussagen, die ihre eigene Unbeweisbarkeit behaupten. Hier muss
wieder eine clevere Variante des Diagonalentricks herangezogen werden.
Formeln sind endliche Zeichenfolgen. Insbesondere lässt sich jeder Formel F eine Zahl n F zuordnen
(analog zu unserer Gödelisierung der RM-Programme). Ebenso sind Beweise endliche Zeichenfolgen.
Insbesondere lässt sich jedem Beweis B eine Zahl m B zuordnen. Angenommen in ∆ seien unsere in
der Vorlesung bereitgestellten Axiome für natürliche Zahlen enthalten. So lässt sich ein zweistelliges
Prädikat Abl m n definieren, welches genau dann wahr ist, wenn n n F , m m B gilt und B ein
Beweis von F ist. Hierbei gehen wir wieder davon aus, dass für prädikatenlogische Formeln die Zahl
n durch n-maliges Anwenden der einstelligen Funktion f auf eine Konstante a repräsentiert ist. Wir
identifizieren also n mit
f f f a Y
n
›
[]W
X
mal
Die formale Darstellung des Prädikates Abl m n ist eine überaus nicht-triviale Aufgabe. Letztlich muss
man das ganze Verfahren des formalen Ableitens inklusive der Grundwahrheiten auf Operationen der
natürlichen Zahlen zurückführen welche auf den Gödelisierungen der entsprechenden Formeln operieren (man benötigt dazu geringfügig stärkere Formalismen als die der Prädikatenlogik erster Stufe). Wir
können somit aber insbesondere die Tatsache, dass eine Formel F aus ∆ ableitbar ist, als prädikatenlogische Formel hinschreiben:
7 x Abl x n F Diese Formel besagt nichts anderes, als dass ein Beweis x für die Formel F existiert (Diese Aussage kann
natürlich wahr oder falsch sein).
Nun konstruieren wir den gesuchten selbstbezüglichen Satz. Wir betrachten zunächst solche Formeln
welche genau eine freie Variable x enthalten. Die Menge all dieser Formeln ist abzählbar. Es sei A i
eine entsprechende Abzählfunktion. Für jedes i /
ist also A i eine Formel mit genau einer freien
Variablen x. Nennen wir i die Gödelnummer der Formel A i . Sei nun j / N eine weitere natürliche Zahl.
Wir bezeichnen mit B i j die geschlossene Formel, die man erhält, wenn man die Zahl j an Stelle der
freien Variable x in A i einsetzt Es gilt also
±;
Bi j
A i • x – j—?
89
B i j ist also eine geschlossene Formel, welche für das Modell der natürlichen Zahlen entweder wahr
ist oder nicht. Ebenso ist B i j aus ∆ ableitbar oder nicht. Insbesondere ist B i i die Aussage, die man
erhält, wenn man in der Formel A i die freie Variable x mit der Gödelnummer von A i substituiert.
Es sei nun G die folgende Teilmenge der natürlichen Zahlen:
ƒ B i i ist aus ∆ nicht ableitbar $c
Also ist G die Menge all der Zahlen i / , für die die Formel A i nach Substitution von x durch i (also
A i • x– i— ) nicht ableitbar ist. Diese Eigenschaft G ist nun selbst wieder durch eine prädikatenlogische
Formel AG mit einer freien Variablen x darstellbar (der Grund hierfür ist, dass alle dafür benötigten
±
Begriffe Ableitbarkeit und die Relation ( ) prädikatenlogisch in ∆ definierbar waren.) Da die Formel AG
genau eine freie Variable x hat, muss sie in der Aufzählung A i vorkommen. Es gibt also ein iG mit
A i A .
G
G
Was ist nun mit der Aussage B iG iG — ist diese ableitbar? Angenommen B iG iG ist ableitbar. Somit
ist die Aussage B iG iG insbesondere wahr. Dies bedeutet, dass A iG • x – iG — wahr ist. Somit gilt iG / G.
(Denn A iG charakterisiert ja gerade die Elemente in G.) Wegen bedeutet die aber gerade, dass
B iG iG nicht ableitbar ist. Widerspruch!!! Die Aussage B iG iG ist somit nicht ableitbar.
Ferner können wir zeigen, dass die Annahme, dass B iG iG eine falsche Aussage ist ebenso zum Wider spruch führt. Angenommen B iG iG ist falsch. Dies bedeutet, dass iG nicht Element von G ist. Also ist
wegen die Aussage B iG iG ableitbar. Wenn B iG iG ableitbar ist, ist es auch insbesondere wahr.
Widerspruch!!!
G:
E#
i
/
Wir haben somit gezeigt“, dass die Aussage B iG iG wahr ist, obwohl sie nicht ableitbar ist.
”
90
Herunterladen