Primitive Rekursion - mathematik-netz.de
Primitive Rekursion - mathematik-netz.de Primitive Rekursion - mathematik-netz.de
Primitive Rekursion Alexander Hölzle 14.01.2007
- Seite 3 und 4: Inhaltsverzeichnis Motivation i 1 R
- Seite 5 und 6: Motivation, Überblick und Notation
- Seite 7 und 8: 1 Rekursive Funktionen 1.1 Nicht be
- Seite 9 und 10: c○by mathematik-netz.de Wir nenne
- Seite 11 und 12: c○by mathematik-netz.de Im weiter
- Seite 13 und 14: c○by mathematik-netz.de könnte e
- Seite 15 und 16: c○by mathematik-netz.de min(m, n)
- Seite 17 und 18: c○by mathematik-netz.de χ ¬p (x
- Seite 19 und 20: c○by mathematik-netz.de c) Sei p
- Seite 21 und 22: c○by mathematik-netz.de Definitio
- Seite 23 und 24: c○by mathematik-netz.de Nehmen wi
- Seite 25 und 26: c○by mathematik-netz.de Nun zeige
<strong>Primitive</strong> <strong>Rekursion</strong><br />
Alexan<strong>de</strong>r Hölzle<br />
14.01.2007
Inhaltsverzeichnis<br />
Motivation<br />
i<br />
1 Rekursive Funktionen 1<br />
1.1 Nicht berechenbare Funktionen . . . . . . . . . . . . . . . . . . . . . . . . 1<br />
1.2 Primitiv rekursive Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />
1.3 Arithmetische Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />
1.4 Primitiv rekursive Relationen . . . . . . . . . . . . . . . . . . . . . . . . . 8<br />
1.5 mu-Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11<br />
1.5.1 Unbeschränkte mu-Operator . . . . . . . . . . . . . . . . . . . . . . 12<br />
1.5.2 Beschränkte mu-Operator . . . . . . . . . . . . . . . . . . . . . . . 14<br />
2 Die Ackermann-Funktion 16<br />
3
Inhaltsverzeichnis<br />
Inhaltsverzeichnis
Motivation, Überblick und Notation<br />
Der Begriff <strong>de</strong>r Berechenbarkeit spielt neben <strong>de</strong>m <strong>de</strong>r Komplexität in <strong>de</strong>r klassischen theoretischen<br />
Informatik eine zentrale Rolle. Zunächst sollte man sich fragen, was das Adjektiv<br />
„berechenbar“ überhaupt be<strong>de</strong>utet und worauf sich dieser Begriff bezieht. Intuitiv wer<strong>de</strong>n<br />
viele darunter wohl verstehen, dass etwas „sich errechnen lässt“ bzw. „vorhersehbar“ ist.<br />
Um jedoch etwas berechnen zu können benötigt man sicherlich ein Kochrezept, also einen<br />
Algorithmus bzw. eine Funktionsvorschrift. Schließlich müssen wir auch noch klären, was<br />
man alles berechnen kann, es wird sich nämlich zeigen, dass nicht alle Funktionen berechnenbar<br />
sind.<br />
Sowohl Turing- als auch Registermaschinen sind Mo<strong>de</strong>lle von Maschinen. Sie nähern<br />
sich <strong>de</strong>r Frage nach <strong>de</strong>r Berechenbarkeit von <strong>de</strong>r Seite <strong>de</strong>r berechenbaren Automaten.<br />
Die jeweiligen Programme, welche auf diesen Maschinen laufen, müssen spezielle für das<br />
jeweilige Mo<strong>de</strong>ll und die jeweilige Problemstellung zugeschnitten sein.<br />
Einen hiervon differeten (aber äquivalenten) Zugang zur Frage <strong>de</strong>r Berechenbarkeit<br />
besiert auf speziellen Funktionenklassen und darauf abgeschlossenen Operationen (Verknüpfungen).<br />
Mit <strong>de</strong>n so genannte rekursiven Funktionen wer<strong>de</strong>n wir Lösungen von Problemen<br />
beschreiben und nicht, wie es bei <strong>de</strong>n Maschinenmo<strong>de</strong>llen üblich ist, die einzelnen<br />
Schritte <strong>de</strong>s Rechenweges. Das Mo<strong>de</strong>ll <strong>de</strong>r rekursiven Funktionen versucht also nicht eine<br />
Maschine bzw. einen Automaten nachzubil<strong>de</strong>n, son<strong>de</strong>rn packt das Problem <strong>de</strong>r Berechnbarkeit<br />
sozusagen bei <strong>de</strong>r Wurzel, d.h. es nähert sich <strong>de</strong>r Frage nach <strong>de</strong>r Berechenbarkeit<br />
von Seite <strong>de</strong>r Algorithmen.<br />
Wir bauen uns in <strong>de</strong>n nächsten Abschnitten ein System von Funktionen auf, mit Hilfe<br />
<strong>de</strong>rer wir je<strong>de</strong>n Algorithmus beschreiben können. Diese Funktionen haben jeweils k ∈ N<br />
natürliche Eingabewerte n := n 1 , . . . , n k , sind kompositional zusammensetzbar und verwen<strong>de</strong>n<br />
<strong>Rekursion</strong>. Dabei <strong>de</strong>finieren wir uns zunächst einen Minimalsatz von Funktionen,<br />
die wir später gleich Bausteinen zu komplexeren Berechnungen zusammensetzen wer<strong>de</strong>n.<br />
Mit diesen Vorbemerkungen können wir <strong>de</strong>n intuitive (und wohl naive) Vorstellung <strong>de</strong>r<br />
Berechenbarkeit präzisieren:<br />
Definition:<br />
Wir betrachten partielle Funktionen f : N k → N und nennen diese intuitiv berechenbar,<br />
wenn es einen Algorithmus (eine Rechenvorschrift) gibt, <strong>de</strong>r<br />
• als Eingabe ein beliebiges k-Tupel (n 1 , . . . , n k ) natürlicher Zahlen erhält und<br />
i
KAPITEL 0. MOTIVATION<br />
KAPITEL 0. MOTIVATION<br />
• mit <strong>de</strong>r Ausgabe f(n 1 , . . . , n k ) terminiert, falls f(n 1 , . . . , n k ) ≠ ⊥.<br />
Für solche Tupel (n 1 , . . . , n k ), für die f(n 1 , . . . , n k ) un<strong>de</strong>finiert ist (, d.h. f(n 1 , . . . , n k ) =<br />
⊥), soll keine Ausgabe bereitgestellt wer<strong>de</strong>n; entwe<strong>de</strong>r läuft <strong>de</strong>r Algorithmus endlos ohne<br />
Ausgabe o<strong>de</strong>r er hält ebenfalls ohne Ausgabe an. Wie üblich bezeichnen wir mit<br />
N := 0, 1, 2, 3, . . . die Menge <strong>de</strong>r natürlichen Zahlen inklusive <strong>de</strong>r 0.
1 Rekursive Funktionen<br />
1.1 Nicht berechenbare Funktionen<br />
Es gibt Probleme, die nicht vollautomatisch lösbar sind.<br />
Beispiel:<br />
Hierzu betrachte man die Funktionenschar f r : N → N, wobei r eine beliebige irrationale<br />
Zahl im Intervall ]0, 1[ ist.<br />
{<br />
1, falls n Anfangsstück <strong>de</strong>s Nachkommateils von r ist<br />
f r (n) :=<br />
0, sonst.<br />
Die Funktionen f r sind für unterschiedliches r offenbar verschie<strong>de</strong>n, also ist die Menge<br />
{f r : r ∈]0, 1[ mit r irrational}<br />
überabzählbar. An<strong>de</strong>rerseits ist die Menge aller durch ein Computerprogramm berechenbarer<br />
Funktionen f : N → N abzählbar, da je<strong>de</strong>s Programm durch einen endlichen Text<br />
nie<strong>de</strong>rgeschrieben wer<strong>de</strong>n kann. Die Anzahl aller endlichen Texte über einem festen endlichen<br />
Alphabet ist abzählbar. Insbeson<strong>de</strong>re muss es also nicht berechenbare Funktionen<br />
f r geben.<br />
Die eben gemachte Beobachtung präzisieren wir nun im folgen<strong>de</strong>n<br />
SATZ 1.1: Es gibt nicht berechenbare Funktionen f : N k → {0, 1}.<br />
Beweis. Ist die Funktion f berechenbar, dann existiert ein Algorithmus A, <strong>de</strong>r f berechnet.<br />
Dabei ist A ein Wort endlicher Länge über einem endlichen Alphabet Σ. Weiter sei<br />
konstatiert, dass es nur abzählbar unendlich viele Wörter endlicher Länge über einem<br />
endlichen Alphabet Σ gibt, d.h. es kann nur abzählbar unendlich viele Algorithmen über<br />
Σ geben. Gibt es aber nur abzählbar unendlich viele Algorithmen so kann es gemäß Definition<br />
nur abzählbar unendlich viele berechenbare Funktionen f : N k → N geben.<br />
Nun betrachten wir die Menge aller partiellen Funktionen {f|f : N k → {0, 1}} und<br />
zeigen, dass diese Menge überabzählbar ist, woraus folgt, dass es nicht berechenbare<br />
Funktionen geben muss.<br />
1
Primitiv rekursive Funktionen<br />
Primitiv rekursive Funktionen<br />
Angenommen, die Menge {f|f : N k → {0, 1}} wäre abzählbar. Dazu dürfen wir<br />
o.B.d.A. k := 1 setzen. Sei sodann f 0 (n), f 1 (n), . . . , f i (n), . . . eine Aufzählung unterschiedlicher<br />
Funktionen f i . Wir <strong>de</strong>finieren<br />
g : N → N mit<br />
{<br />
i ↦→ g(i) :=<br />
1, f i (i) = 0<br />
0, f i (i) = 1<br />
Es liegt also g ∈ {f|f : N k → {0, 1}}. Doch gemäß Definition kann g nicht in <strong>de</strong>r<br />
obigen Aufzählung vorkommen, <strong>de</strong>nn g(i) unterschei<strong>de</strong>t sich im Vergleich zu f i im Wert<br />
f i (i) ≠ g(i), was zum Wi<strong>de</strong>rspruch führt.<br />
Als Fazit halten wir also fest, dass es beweisbar nicht berechenbare Funktionen gibt!<br />
1.2 Primitiv rekursive Funktionen<br />
Die einfachste Klasse von rekursiven Funktionen sind die primitiv rekursiven Funktionen.<br />
Sie umfassen drei Arten von Funktionen und zwei Metho<strong>de</strong>n, sie zu komplexeren Funktionen<br />
zusammenzusetzen.<br />
Definition:<br />
Die Klasse P <strong>de</strong>r primitiv rekursiven Funktionen ist die kleinste Klasse, welche die<br />
Basis-Funktionen (auch Grundfunktionen genannt)<br />
• Konstante Funktion, C k : N k → N mit (n 1 , . . . , n k ) ↦→ c und c ∈ N,<br />
• Nachfolgerfunktion (Successor), suc : N → N mit n ↦→ suc(n) := n + 1<br />
• Projektion (Auswahl) <strong>de</strong>s j-ten Eintrags π j : N k → N mit (n 1 , . . . , n j , . . . , n k ) ↦→<br />
n j und 1 ≤ j ≤ k<br />
enthält und abgeschlossen ist gegen<br />
• Substitution (simultanes Einsetzen):<br />
Sind g : N k → N sowie h 1 : N r → N, . . . , h k : N r → N mit 1 ≤ r ≤ k primitiv rekursiv,<br />
so auch f : N k → N mit f(n 1 , . . . , n k ) = g(h 1 (n 1 , . . . , n r ), . . . , h k (n 1 , . . . , n r )).<br />
• primitive <strong>Rekursion</strong>:<br />
Je<strong>de</strong> Funktion, die durch so genannte primitive <strong>Rekursion</strong> aus primitiv rekursiven<br />
Funktionen entsteht, ist primitiv rekursiv. Genauer: sind g : N k → N und h :<br />
N k+2 → N primitiv rekursiv, so auch f : N k+1 → N mit<br />
für m ≥ 0.<br />
f(n 1 , . . . , n k , 0) = g(n 1 , . . . , n k )<br />
f(n 1 , . . . , n k , m + 1) = h(n 1 , . . . , n k , m, f(n 1 , . . . , n k , m))
c○by <strong>mathematik</strong>-<strong>netz</strong>.<strong>de</strong><br />
Wir nennen eine Funktion f primitiv rekursiv, wenn f ∈ P.<br />
Beachten Sie, dass wir gemäß Vereinbarung das k-Tupel (n 1 , . . . , n k ) auch abkürzend<br />
als n notieren können. Die Definition <strong>de</strong>r primitiven <strong>Rekursion</strong> gleicht <strong>de</strong>m Induktionsprinzip<br />
für natürliche Zahlen: Ist <strong>de</strong>r letzte Parameter von f echt größer 0, so wird die<br />
Teilfunktion h verwen<strong>de</strong>t, um <strong>de</strong>n Funktionswert f(n, m + 1) zu berechnen, und zwar in<br />
Abhängigkeit von f(n, m). Die Verankerung bil<strong>de</strong>t dann f(n, 0).<br />
Es ist einsichtig, dass alle primitiv rekursiven Funktionen (also die Menge P) intuitiv<br />
berechenbar sind, <strong>de</strong>nn die Basisfunktionen sind berechenbar und sowohl die Komposition<br />
als auch die primitive <strong>Rekursion</strong> erzeugen aus berechenbaren Funktionen wie<strong>de</strong>r solche.<br />
Die Projektion π j kann bspw. durch ein Array A berechnet wer<strong>de</strong>n, wobei man als<br />
Rückgabe gera<strong>de</strong> A[i] erhält. Die Berechnung einer festen konstanten Funktion sollte<br />
ebenfalls keine Schwierigkeiten bereiten und die Nachfolgerfunktion suc(n) erhalt man<br />
durch simple Addition n + 1 <strong>de</strong>n Rückgabewert.<br />
Nun zeigen wir noch durch Angabe zweier Algorithmen, dass sowohl die Komposition<br />
als auch die primitive <strong>Rekursion</strong> berechenbar sind.<br />
Substitution:<br />
Function f (N: array[1 . . . k] of cardinal): cardinal;<br />
var NN: array[1 . . . r] of cardinal;<br />
var i: cardinal<br />
begin<br />
end<br />
NN[1]:= h(1, N);<br />
. . .<br />
NN[k]:= h(k, N);<br />
f:= g(NN);<br />
Der jeweilige Arrayeintrag NN[i] speichert offensichtlich <strong>de</strong>n Funktionswert von h i . In<br />
<strong>de</strong>r letzten Anweisungszeile wird dann, nach<strong>de</strong>m alle Funktionswerte von h i mit 1 ≤<br />
i ≤ k berechnet und gespeichert wur<strong>de</strong>n, die I<strong>de</strong>ntität f(n 1 , . . . , n k ) = g(h 1 (n 1 , . . . , n r ),<br />
. . . , h i (n 1 , . . . , n r ), . . . , h k (n 1 , . . . , n r )) ausgenutzt. Diese muss gemäß Voraussetzungen<br />
bestehen.<br />
3
Arithmetische Funktionen<br />
Arithmetische Funktionen<br />
<strong>Primitive</strong> <strong>Rekursion</strong>:<br />
Function f (N: array[1 . . . (k+1)] of cardinal): cardinal;<br />
var hh, i: cardinal;<br />
begin<br />
end<br />
hh:= g(N[1], N[2], . . . , N[k]);<br />
i:=0;<br />
LOOP N[k+1] DO<br />
begin<br />
hh:=h(N[1], . . . , N[k], i, hh);<br />
i:= i+1;<br />
end<br />
f:=hh;<br />
Im nächsten Abschnitt bauen wir aus <strong>de</strong>n Grundfunktionen komplexere auf, in<strong>de</strong>m wir<br />
sie mittels <strong>de</strong>r Substitution und primitiver <strong>Rekursion</strong> verknüpfen.<br />
1.3 Arithmetische Funktionen, primitiv rekursiv ausgedrückt<br />
Wir zeigen nun, dass die grundlegen<strong>de</strong>n arithmetischen Operationen Addition, Subtraktion,<br />
Multiplikation und Division allesamt in P liegen und sich damit primitiv rekursiv<br />
ausdrücken lassen. Die dadurch neu gewonnenen Funktionen können wir für <strong>de</strong>n Aufbau<br />
weiterer Funktionen aus P einsetzen.<br />
Wie wir allerdings wissen bil<strong>de</strong>t die Menge <strong>de</strong>r natürlichen Zahlen N zusammen mit<br />
<strong>de</strong>r üblichen Zahlen-Addition keine Gruppe, da letztlich die additiv Inversen für die<br />
meisten Werte aus N fehlen. Das heißt wir müssen insbeson<strong>de</strong>re bei <strong>de</strong>r Substraktion<br />
darauf achten, dass wir uns stets innerhalb <strong>de</strong>r Menge N befin<strong>de</strong>n. Dies bewerkstelligen<br />
wir durch eine modifizierte Definition dieser bei<strong>de</strong>n Operationen.<br />
Definition:<br />
Es sei Sub : N 2 → N <strong>de</strong>finiert durch<br />
Sub(n, m) :=<br />
{<br />
0, falls m ≥ n<br />
n − m, falls m < n.<br />
Wir nennen Sub die (allgemeine) modifizierte Subraktion und sodann ist N abgeschlossen<br />
gegebenüber Sub.
c○by <strong>mathematik</strong>-<strong>netz</strong>.<strong>de</strong><br />
Im weiteren bezeichnen wir mit Add(n, m) := n+m die übliche Addition, Mult(n, m) :=<br />
n · m, P ot(n, m) := n m die Potenzierung zweier natürlicher Zahlen. Außer<strong>de</strong>m soll<br />
F ak(n) := n! die Fakultät einer natürlichen Zahl berechnen. Oftmals notieren wir Add(n, m)<br />
auch abkürzend mit n + m; analoges soll für ähnlich elementare Funktionen gelten. Die<br />
modifizierte Subraktion notieren wir abkürzend mit Sub(n, m) = n − ·<br />
m.<br />
Lemma 1.2: Es gilt<br />
• Die I<strong>de</strong>ntität id,<br />
• die Addition Add,<br />
• die Multiplikation Mult,<br />
• die Potenzfunktion P ot,<br />
• die Fakultätsfunktion F ak sowie<br />
• die modifizierte Subtraktion<br />
liegen in P, d.h. diese Funktionen sind allesamt primitiv rekursiv.<br />
Beweis. Die I<strong>de</strong>ntität kann als Projektion einer einstelligen Funktion id : N → N mit<br />
id(n) := n = π 1 (n) dargestellt wer<strong>de</strong>n. Damit gilt id ∈ P.<br />
Die Additionsfunktion Add : N 2 → N ist primitiv rekursiv, <strong>de</strong>nn sie kann primitiv<br />
rekursiv dargestellt wer<strong>de</strong>n in <strong>de</strong>r Form<br />
Add(n, 0) = id(n)<br />
Add(n, m + 1) = suc(π 3 (n, m + 1, Add(n, m))).<br />
Die logische Verbindung zwischen Add(n, m + 1) und Add(n, m) wird mit <strong>de</strong>r Nachfolgerfunktion<br />
hergestellt. Die Funktion h besteht allerdings aus <strong>de</strong>r Zusammensetzung <strong>de</strong>r<br />
Nachfolgerfunktion suc und <strong>de</strong>r Projektion π 3 . Dies ist notwendig, da lediglich auf das<br />
dritte Argument von h(n, m + 1, Add(n, m)) zugegriffen wer<strong>de</strong>n muss.<br />
Da wir bereits wissen, dass id, suc ∈ P gilt und P gegenüber <strong>de</strong>r primitive <strong>Rekursion</strong><br />
abgeschlossen ist, folgt Add ∈ P.<br />
Genauso verfahren wir mit <strong>de</strong>r Multiplikation Mult : N 2 → N. Diese lässt sich primitiv<br />
rekursiv darstellen durch<br />
Mult(n, 0) = 0<br />
(konstante Nullfunktion)<br />
Mult(n, m + 1) = Add(π 1 [n, m, Mult(n, m)], π 3 [n, m, Mult(n, m)]).<br />
5
Arithmetische Funktionen<br />
Arithmetische Funktionen<br />
Gemäß Definition ist g(n) := ̂0 die konstante Nullfunktion und damit g ∈ P. Wie<strong>de</strong>r<br />
muss die für die primitive <strong>Rekursion</strong> notwendige Funktion h die drei Argumente<br />
(n, m, Mult(n, m)) enthalten. Dies erfüllt obige Funktion offensichtlich und da wir von<br />
allen verwen<strong>de</strong>ten Funktionen wissen, dass diese in P liegen, folgt damit Mult ∈ P.<br />
Aufbauend auf <strong>de</strong>r Multiplikation lässt sich die m-te Potenz von n, also P ot(n, m), wie<br />
folgt darstellen:<br />
P ot(n, 0) = 1<br />
(konstante Einsfunktion)<br />
P ot(n, m + 1) = Mult(π 1 [n, m, P ot(n, m)], π 3 [n, m, P ot(n, m)]).<br />
Da sowohl Mult als auch die konstante Einsfunktion in P liegt, folgt P ot ∈ P.<br />
Die Fakultätsfunktion ist eine einstellige Funktion, dies sollte bei <strong>de</strong>r rekursiven Darstellung<br />
beachtet wer<strong>de</strong>n:<br />
Es folgt also F ak ∈ P.<br />
F ak(0) = 1<br />
(konstante Einsfunktion)<br />
F ak(m + 1) = Mult(π 1 [m, F ak(m)], π 2 [m, F ak(m)]).<br />
Abschließend zeigen wir noch, dass die modifizierte Subraktion in P liegt. Dazu stellen<br />
wir Sub mit Hilfe <strong>de</strong>r primitive <strong>Rekursion</strong> dar. Allerdings benötigen wir dazu noch die<br />
so genannte Vorgängerfunktion P re(n) := Sub(n, 1):<br />
P re(0) = 0<br />
P re(m + 1) = π 2 [m, P re(m)].<br />
(konstante Nullfunktion)<br />
Da pi, C ∈ P gilt, folgt P re ∈ P. Nun kommen wir sogleich zur primitiv rekursiven<br />
Darstellung von Sub:<br />
Sub(n, 0) = π 1 (n)<br />
Damit ist bereits Sub ∈ P gezeigt.<br />
Sub(n, m + 1) = P re(π 3 [n, m, Sub(n, m)])<br />
Mit Hilfe <strong>de</strong>r elementaren arithmetischen Funktionen können wir rekursive Funktionen<br />
schon etwas bequemer beschreiben, als wenn wir nur die Basis-Funktionen dafür verwen<strong>de</strong>n<br />
wür<strong>de</strong>n.<br />
In <strong>de</strong>r Definition <strong>de</strong>r Komposition (simultanes Einsetzen) sind alle Funktionen h i mit<br />
1 ≤ i ≤ k von <strong>de</strong>nselben Argumenten (n 1 , . . . , n r ) abhängig, wobei 1 ≤ r ≤ k gilt. Nun
c○by <strong>mathematik</strong>-<strong>netz</strong>.<strong>de</strong><br />
könnte es allerdings sein, dass manche <strong>de</strong>r h i nicht alle Argumente o<strong>de</strong>r aber die vorhan<strong>de</strong>nen<br />
Argumente in einer differenten Reihenfolge benötigen. Das all dies im Rahmen von<br />
P erlaubt ist bringt folgen<strong>de</strong>s Lemma zum Ausdruck.<br />
Lemma 1.3: Die Funktionenmenge P ist gegen Umordnen und Weglassen von Variablen<br />
bezüglich <strong>de</strong>r Komposition abgeschlossen.<br />
Beweis. Die Menge <strong>de</strong>r primitiv rekursiven Funktionen ist abgeschlossen gegenüber Umordnung<br />
<strong>de</strong>r Argumente. Sei n := (n 1 , . . . , n k ) unser Ausgangstupel mit k Positionen, f<br />
eine primitiv rekursive Funktion und m := (m 1 , . . . , m k ) das durch Umordnung entstan<strong>de</strong>ne<br />
Tupel mit k Einträgen, d.h., die Einträge von m ergeben sich durch Permutation<br />
von n in k Worten. Da je<strong>de</strong> Permutation bijektiv ist, muss die entsprechen<strong>de</strong> inverse Permutation<br />
π exitieren. Die Permutation π kann mit Hilfe von k Projektionen π j1 , . . . , π jk<br />
mit 1 ≤ j i ≤ k für 1 ≤ i ≤ k und <strong>de</strong>r Komposition dargestellt wer<strong>de</strong>n. Wie wir wissen<br />
sind Projektionen primitiv rekursiv. Also ergibt sich sodann die Darstellung:<br />
f(n) = f(π j1 (m 1 ), . . . , π jk (m k ))<br />
Auch das Weglassen von Argumenten, die nicht benötigt wer<strong>de</strong>n stört diese Argumentation<br />
nicht, da diese Argumente dann einfach festgelassen wer<strong>de</strong>n. Es reduziert sich dann<br />
lediglich die Anzahl <strong>de</strong>r benötigten Projektionen.<br />
Ein Beispiel wird <strong>de</strong>n letzten Satz veranschaulichen.<br />
Beispiel:<br />
Es sei f(v, w, x, y) eine primitiv rekursive Funktion in vier Argumenten. Besteht die<br />
I<strong>de</strong>ntität g(a, b, c) = f(b, b, c, a), dann ist auch die Funktion g primitiv rekursiv. D.h.<br />
man kann sämtliche Bil<strong>de</strong>r von f offensichtlich auch mit Hilfe von drei Argumenten<br />
beschreiben, wie dies g ja gera<strong>de</strong> zeigt. Eine formalen Beweis kann man mit Hilfe <strong>de</strong>r<br />
Komposition und <strong>de</strong>r Projektion erbringen:<br />
g(a, b, c) = f(π 2 (a, b, c), π 2 (a, b, c), π 3 (a, b, c), π 1 (a, b, c)).<br />
Eine häufig verwen<strong>de</strong>te Konstruktion bei <strong>de</strong>r Definition von Funktionen ist die Fallunterscheidung.<br />
Wenn man die Typen von Fällen, die untersucht wer<strong>de</strong>n können, geeignet<br />
einschränkt, kann man auch dieses Konstrukt mit <strong>de</strong>n Mitteln <strong>de</strong>r primitiv rekursiven<br />
Funktionen ausdrücken.<br />
Lemma 1.4: Die Funktionenmenge P ist abgeschlossen gegen primitiv rekursive Fallunterscheidung,<br />
d.h. wenn g i , h i für 1 ≤ i ≤ k primitiv rekursiv sind, und es für alle<br />
7
Primitiv rekursive Relationen<br />
Primitiv rekursive Relationen<br />
n = (n 1 , . . . , n k ) genau ein j gibt, so dass h j (n) = 0 gilt, so ist auch folgen<strong>de</strong> Funktion<br />
f primitiv rekursiv:<br />
⎧<br />
⎪⎨ g 1 (n), falls h 1 (n) = 0<br />
f(n) := . . . , . . .<br />
⎪⎩<br />
g k (n), falls h k (n) = 0<br />
Beweis. Die Funktion f können wir mit Hilfe <strong>de</strong>r modifizierten Subtraktion ˙− darstellen<br />
durch<br />
f(n) = g 1 (n) · [1 ˙−h 1 (n)] + . . . + g k (n) · [1 ˙−h k (n)]<br />
und für die verwen<strong>de</strong>ten Teilfunktionen ·, +, ˙− haben wir bereits bewiesen, dass sie in P<br />
liegen.<br />
Der eben geführte Beweis hätte auch sehr schön mit Hilfe <strong>de</strong>r charakteristischen Funktion<br />
erbracht wer<strong>de</strong>n können.<br />
1.4 Primitiv rekursive Relationen<br />
Die Technik, die <strong>de</strong>r letzte Beweis von Lemma 1.4 verwen<strong>de</strong>t, verdient genauere Betrachtung.<br />
Fallunterscheidung wird ausgedrückt mit Hilfe <strong>de</strong>r primitiv rekursiven Funktionen<br />
·, + und ˙−, die hier die Aufgabe logischer Konnektoren übernehmen:<br />
• n · m ≠ 0 ⇔ n ≠ 0 und m ≠ 0.<br />
• n + m ≠ 0 ⇔ n ≠ 0 o<strong>de</strong>r m ≠ 0.<br />
• 1 ˙−n ≠ 0 ⇔ n ist nicht ungleich 0.<br />
Für die weiteren Beweise benötigen wir noch <strong>de</strong>n Nachweis, dass max(n, m), min(n, m)<br />
sowie<br />
{<br />
1, falls n > 0<br />
sg(n) :=<br />
0, falls n = 0.<br />
primitiv rekursive Funktionen sind. Wir können das Maximum als Komposition primitiv<br />
rekursiver Funktionen darstellen.<br />
max(n, m) = Add[π 1 (n, m), Sub(π 2 (n, m), π 1 (n, m))]<br />
Entsprechend lässt sich auch die Funktion min(n, m) als Komposition primitiv rekursiver<br />
Funktionen darstellen.
c○by <strong>mathematik</strong>-<strong>netz</strong>.<strong>de</strong><br />
min(m, n) = Sub[π 2 (n, m), Sub{π 2 (n, m), π 1 (n, m)}]<br />
Da Sub, π i , Add ∈ P folgt damit, dass min, max ∈ P. Offensichtlich ist auch die<br />
Signum-Funktion primitiv rekursiv, da gilt<br />
sgn(0) = 0<br />
sgn(m + 1) = 1<br />
(konstante Nullfunktion)<br />
(konstante Einsfunktion).<br />
Bemerkung 1:<br />
Künftig wer<strong>de</strong>n wir verstärkt Gebrauch <strong>de</strong>r abkürzen<strong>de</strong>n Schreibweise <strong>de</strong>r bereits bekannten<br />
primitiv rekursiven Funktionen machen.<br />
Prädikate, die aus Vergleichsoperationen sowie <strong>de</strong>n Operationen Negation, Disjunktion<br />
und Konjunktion aufgebaut sind, sind durch primitiv rekursive Funktionen darstellbar.<br />
Solche Prädikate wer<strong>de</strong>n <strong>de</strong>shalb ebenfalls primitiv rekursiv genannt:<br />
Definition:<br />
Eine Relation R ⊆ N k heißt primitiv rekursiv, falls ihre charakteristische Funktion<br />
χ R primitiv rekursiv ist.<br />
Bemerkung 2:<br />
• Beachten Sie, dass man mit Hilfe von Relationen auch Prädikate vollständig charakterisieren<br />
kann. Ein dreistelliges Prädikat α = X 1 ∨ ¬X 2 ∧ X 3 gibt bspw. Beziehungen<br />
zwischen drei Subjekten, hier <strong>de</strong>n Literalen, an. Wie wir wissen, können<br />
Beziehungen mit Hilfe von Relationen formuliert wer<strong>de</strong>n.<br />
• Relationen erklären in natürlicher Art und Weise Teilmengenbeziehungen. So ist es<br />
nicht verwun<strong>de</strong>rlich, dass man auch primitiv rekursive Mengen <strong>de</strong>finieren kann.<br />
Beispiel:<br />
Wir zeigen nun, dass die Relationen
Primitiv rekursive Relationen<br />
Primitiv rekursive Relationen<br />
folgen<strong>de</strong> Äquivalenzkette betrachtet: n < m ⇔ m ˙−n > 0 ⇔ sgn(m ˙−n) = 1.<br />
Da die Addition eine primitiv rekursive Operation darstellt, ergibt sich die Eigenschaft<br />
„primitiv rekursiv“ <strong>de</strong>r Relation ≤ (Vero<strong>de</strong>rung von = und
c○by <strong>mathematik</strong>-<strong>netz</strong>.<strong>de</strong><br />
χ ¬p (x) =<br />
{<br />
1, , falls x /∈ p<br />
0, , falls x ∈ p<br />
= 1 ˙−χ p (x).<br />
Da die Funktion χ ¬p aus Substitution bereits bekannter primitiv rekursiver Funktionen<br />
C, ˙−, χ A hervorgeht, folgt die Behauptung für p. Analog zeigt man die Behauptung für<br />
q.<br />
Abschließend betrachten wir noch ein typisches Beispiel in diesem Kontext.<br />
Beispiel:<br />
Es sei f : N 2 → N eine primitiv rekursive Funktion. Wir zeigen, dass das Prädikat<br />
p := {(x, y, f(x, y))|(x, y) ∈ N 2 } primitiv rekursiv ist. Dazu müssen wir nachweisen, dass<br />
die charakteristische Funktion χ p primitiv rekursiv ist.<br />
χ p (x, y, z) =<br />
{<br />
1, falls f(x, y) − z = 0<br />
0, sonst<br />
1 ˙−sgn(|z − f(x, y)|).<br />
Da sich also die charakteristische Funktion aus Substitutionen bereits bekannter primitiv<br />
rekursiver Funktionen zusammensetzt, folgt die Behauptung.<br />
1.5 Der µ-Operator<br />
Da die primitiv rekursiven Funktionen P nur eine echte Teilmenge <strong>de</strong>r berechenbaren<br />
Funktionen sind, muss man, um alle berechenbaren Funktionen in mathematischer Notation<br />
zu beschreiben, die Klasse P echt erweitern.<br />
Dies kann man dadurch versuchen, in<strong>de</strong>m man die Klasse <strong>de</strong>r elementaren Basis-<br />
Funktionen erweitert, und/o<strong>de</strong>r zum an<strong>de</strong>ren, in<strong>de</strong>m neben <strong>de</strong>r Substitution und <strong>de</strong>r<br />
<strong>Rekursion</strong> weitere Konstruktionsprinzipien zugelassen wer<strong>de</strong>n. Es zeigt sich, dass ein<br />
weiteres Konstruktionsprinzip ausreicht, um alle berechenbaren Funktionen F berech zu<br />
erfassen.<br />
11
mu-Operator<br />
mu-Operator<br />
1.5.1 Der unbeschränkte µ-Operator<br />
Definition:<br />
Es sei g : N k+1 → N eine totale primitiv-rekursive Funktion mit<br />
Dann heißt die Funktion<br />
g(n 1 , . . . , n k , y) = g(n, y).<br />
f(n) = µ y [g(n, y)]<br />
die Minimalisierung von g bezüglich y, wenn gilt<br />
f(n) :=<br />
{<br />
y, falls g(n, y) = 0 und g(n, z) ≠ 0 für alle z < y,<br />
⊥, falls g(n, y) ≠ 0 für alle y ∈ N.<br />
Man nennt µ <strong>de</strong>n unbeschränkten µ-Operator.<br />
Da g eine totale Funktion ist, ist g(n, y) für alle (n, y) <strong>de</strong>finiert.<br />
Wie mächtig die Minimalisierung für die Funktionsbildung ist, zeigen die folgen<strong>de</strong>n Beispiele.<br />
Beispiel:<br />
a) f(x) := µ y [x mod 2 + y] liefert<br />
f(x) =<br />
{<br />
0, für gera<strong>de</strong>s x<br />
⊥, für ungera<strong>de</strong>s x<br />
Ist also x = 2t mit t ∈ N und damit gera<strong>de</strong>, so gilt x mod 2 = 0. Damit kann man<br />
y = 0 wählen, so dass insgesamt x mod 2 + y = 0 gilt. Ist dagegen x ungera<strong>de</strong>,<br />
also x = 2t + 1 für ein t ∈ N, so ist x mod 2 ≠ 0 und damit auch x mod 2 + y ≠ 0.<br />
Deshalb existiert kein y, welches <strong>de</strong>n Anfor<strong>de</strong>rungen genügt und somit folgt f(x) =<br />
⊥.<br />
b) f(x) := µ y [x 2 ˙−y] liefert f(x) = x 2 . Schließlich muss minimales y ∈ N gewählt<br />
wer<strong>de</strong>n, so dass x 2 ˙−y = 0 ⇔ x 2 = y.<br />
Setzen wir dagegen f(x) := µ y [y 2 ˙−x] so ergibt sich die Minimalisierung f(x) = 0,<br />
da 0 2 ˙−x für beliebiges x ∈ N stets <strong>de</strong>n Wert 0 ergibt. Dazu beachte man die<br />
Definition <strong>de</strong>r modifizierten Subraktion.
c○by <strong>mathematik</strong>-<strong>netz</strong>.<strong>de</strong><br />
c) Sei p ein Prädikat mit<br />
Die Funktion<br />
p(x, y) :=<br />
{<br />
1, falls y eine Primzahl größer als x ist,<br />
0, sonst.<br />
f(x) = µ y [1 ˙−p(x, y)]<br />
liefert die kleinste Primzahl, die größer als x ist.<br />
Die durch Anwendung <strong>de</strong>s µ-Operators auf g entstehen<strong>de</strong> Funktion f : N k → N gibt<br />
das kleinste y mit g(n, y) = 0 wie<strong>de</strong>r, falls dieses überhaupt existiert. Existiert kein<br />
kleinstes Element, so dass g(n, y) = 0 gilt, wir also min{∅} bestimmen müssen, so soll<br />
min{∅} = ⊥ ergeben, also un<strong>de</strong>finiert sein.<br />
Das Adjektiv „un<strong>de</strong>finiert“ sollte einen in <strong>de</strong>r theoretischen Informatik stets an die so<br />
genannten paritellen (d.h. nicht totalen) Funktionen erinnern. Das heißt, durch Anwendung<br />
<strong>de</strong>s µ-Operators können wirklich partielle Funktionen entstehen. So erklärt sich<br />
auch die hin und wie<strong>de</strong>r verwen<strong>de</strong>ten Bezeichnungen partiell-rekursiv und total-rekursiv.<br />
Erstere sind partielle µ-rekursive Funktionen und letztere total µ-rekursive Funktionen.<br />
Beispielsweise entsteht durch Anwendung <strong>de</strong>s µ-Operators auf die zweistellige, konstante<br />
Funktion g(x, y) = 1 die vollständig un<strong>de</strong>finierte Funktion Ω. Ist F part := {f|<br />
f ist partiell-rekursiv} die Klasse <strong>de</strong>r partiell µ-rekursiven Funktionen, so ist F part eine<br />
echte Obermenge <strong>de</strong>r primitiv-rekursiven Funktionen. Da auch die partiell rekursiven<br />
Funktionen berechenbar sind muss F part eine Teilmenge aller berechenbaren Funktionen<br />
sein.<br />
Definition:<br />
Die Klasse F µ <strong>de</strong>r µ-rekursiven Funktionen ist die kleinste Klasse von (evtl. partiellen)<br />
Funktionen, die die Basisfunktion enthält und abgeschlossen ist unter Substitution,<br />
primitive <strong>Rekursion</strong> und Anwendung <strong>de</strong>s µ-Operators.<br />
Entsteht f(n) durch Minimalisierung von g(n, y), so ist f(n) berechenbar, falls es ein<br />
y mit g(n, y) = 0 gibt. Ist nämlich<br />
Function g(N: array [1 . . . k] of cardinal): cardinal<br />
eine Funktionsprozedur zur Berechnung von g, dann leistet die Prozedur<br />
Function f(N: array [1 . . . k] of cardinal): cardinal<br />
var y:cardinal;<br />
begin<br />
13
mu-Operator<br />
mu-Operator<br />
y:= 0;<br />
WHILE g(N,y) ≠ 0 Do y:= y +1;<br />
f:=y;<br />
end<br />
das Gewünschte.<br />
Ist jedoch g(n, y) ≠ 0 für alle y ≥ 0, so terminiert die Funktionsprozedur Function f<br />
nicht, also ist die Funktion f nicht berechenbar für das Argument n.<br />
Beispiel:<br />
Wir zeigen, dass die Funktion f : N → N <strong>de</strong>finiert durch f(x) := ⌈ √ x⌉ µ-rekursiv ist.<br />
Dazu müssen wir nachweisen, dass man f, mit Hilfe von primitiv rekursiven Funktionen<br />
und <strong>de</strong>s µ-Operators, erzeugen kann. Um einen Hinweis auf <strong>de</strong>n Lösungsweg dieser<br />
o<strong>de</strong>r gleichartiger Aufgaben zu bekommen, bietet es sich an, die Definition <strong>de</strong>r zu untersuchen<strong>de</strong>n<br />
Funktion (hier f) näher zu betrachten: Die Quadratwurzel √ x <strong>de</strong>r Zahl x ist<br />
die kleinste positive Zahl z ∈ N, so dass die Gleichung z 2 = x erfüllt ist. Entsprechend<br />
ergibt sich<br />
⌈√ x<br />
⌉<br />
= min{z ≥ 0|z 2 ≥ x}<br />
= min{z ≥ 0|x ˙−z 2 = 0}<br />
und somit entsteht die Funktion f durch Anwendung <strong>de</strong>s µ-Operators auf f bezüglich<br />
x − z 2 . Da wir gemäß Lemma 1.2 wissen, dass die modifizierte Differenz und die<br />
Multiplikation primitiv rekursiv sind, folgt damit bereits die Behauptung.<br />
1.5.2 Der beschränkte µ-Operator<br />
Wir wissen nun also, dass <strong>de</strong>r unbeschränkte µ-Operator als „funktionales Äquivalent“<br />
einer WHILE-Schleife interpretiert wer<strong>de</strong>n kann. Genau aus diesem Grund ist dieser<br />
Operator abgeschlossen bezüglich <strong>de</strong>r Menge <strong>de</strong>r berechenbaren Funktionen.<br />
Es existiert aber auch eine eingeschränkte Version <strong>de</strong>s µ-Operators - eben <strong>de</strong>r beschränkte<br />
µ Operator, welcher als „funktionales Äquivalent“ einer FOR-Schleife angesehen<br />
wer<strong>de</strong>n kann.
c○by <strong>mathematik</strong>-<strong>netz</strong>.<strong>de</strong><br />
Definition:<br />
Sei g : N k+1<br />
<strong>de</strong>finiert:<br />
→ N eine Funktion, dann ist <strong>de</strong>r beschränkte µ-Operator wie folgt<br />
⎧<br />
y, falls g(n, y) = 0 und ∀x < y : g(n, x) ≠ 0<br />
⎪⎨<br />
und 0 ≤ y < z<br />
µ x
2 Die Ackermann-Funktion<br />
Zunächst <strong>de</strong>finieren wir die Ackermannfunktion rekursiv:<br />
Definition:<br />
Es sei A : N 2 0 → N eine Funktion mit <strong>de</strong>r rekursiven Funktionsvorschrift<br />
(Ack 1 ) A(0, y) := y + 1,<br />
(Ack 2 ) A(x, 0) := A(x − 1, 1) für x > 0,<br />
(Ack 3 ) A(x, y) := A(x − 1, A(x, y − 1))) für x > 0, y > 0.<br />
Die Funktion A nennen wir Ackermann-Funktion.<br />
Auf Grundlage dieser Definition beweisen wir einige Hilfssätze die wir später benötigen<br />
wer<strong>de</strong>n, um zu zeigen, dass die Ackermann-Funktion stärker wächst als je<strong>de</strong> primitiv<br />
rekursive Funktion.<br />
Lemma 2.1: Die Ackermannfunktion ist wertmäßig größer als ihr zweites Argument<br />
angibt, also gilt:<br />
A(x, y) > y für alle x, y ∈ N 0<br />
Beweis. (durch Induktion nach x)<br />
In diesem Beweis seien x, y stets wie in <strong>de</strong>r obigen Behauptung <strong>de</strong>finiert. Für x = 0<br />
gilt 0 < A(0, y) = y + 1 gemäß Definition, d.h. es gilt die Induktionsverankerung. Wir<br />
nehmen nun an, die Behauptung y < A(x, y) gelte für ein beliebiges jedoch fixiertes x<br />
und alle y (Induktionsannahme für x).<br />
Sodann müssen wir y < A(x + 1, y) für alle y zeigen. Diesen Beweis führen wir mit<br />
Induktion nach <strong>de</strong>r zweiten Varialben y, d.h. wir fahren nun mit Induktion nach y fort:<br />
Nach Induktionsvoraussetzung für x gilt 1 < A(x, 1). Wir wollen nun die Induktionsverankerung<br />
für y = 0 zeigen, das also 0 < A(x + 1, 0) gilt. Gemäß Definition (Ack 2 ) ist<br />
A(x + 1, 0) = A(x, 1) und wie wir wissen gilt A(x, 1) > 1 > 0. Somit haben wir also <strong>de</strong>n<br />
Induktionsanfang für y bewiesen.<br />
16
c○by <strong>mathematik</strong>-<strong>netz</strong>.<strong>de</strong><br />
Nehmen wir nun an, die Behauptung gelte für x + 1 und y, d.h. es gilt y < A(x + 1, y).<br />
Es ist dann zu zeigen, dass y + 1 < A(x + 1, y + 1) folgt.<br />
Wir setzen in die Induktionsannahme für x (also in y < A(x, y)) <strong>de</strong>n speziellen Wert<br />
A(x+1, y) für das zweite Argument y ein und erhalten: A(x+1, y) < A(x, A(x+1, y)) =<br />
A(x + 1, y + 1). Zusammen mit <strong>de</strong>r Induktionsannahme für y -und <strong>de</strong>m vorher Gesagtemergibt<br />
sich also y + 1 < A(x + 1, y + 1).<br />
Lemma 2.2: Desweiteren wächst A(x, y) streng monoton im y-Argument, also gilt:<br />
A(x, y) < A(x, y + 1) für x ≥ 0, q ≥ 0.<br />
Beweis. Für x = 0 ist A(0, y) = y + 1 < y + 2 = A(0, y + 1). Für alle an<strong>de</strong>ren x, d.h. für<br />
x > 0 folgt die Behauptung mit Hilfe <strong>de</strong>s letzten Lemma [vgl. (1)]. Dazu substituieren<br />
wir y ′ := A(x, y) und x ′ := x − 1 in (1).<br />
A(x ′ , y ′ ) > y ′ für alle x ′ , y ′ ∈ N 0 (2.1)<br />
⇒ A(x − 1, A(x, y)) > A(x, y). (2.2)<br />
Aus (3) ergibt sich gemäß Definition (Ack 2 ) <strong>de</strong>r Ackermannfunktion A(x, y) < A(x, y+<br />
1).<br />
Eine weitere wichtige Eigenschaft ist die im nun folgen<strong>de</strong>n Lemma formulierte:<br />
Lemma 2.3: Die Ackermannfunktion A(x, y) wächst im ersten Argument stärker als im<br />
zweiten Argument, also gilt:<br />
A(x, y + 1) ≤ A(x + 1, y) für x ≥ 0, y ≥ 3.<br />
Beweis. (durch Induktion nach y)<br />
Der Induktionsanfang für y = 0 gilt, da offensichtlich A(x, 0 + 1) ≤ A(x + 1, 0) = A(x, 1)<br />
gilt, wobei die letzte I<strong>de</strong>ntität durch (Ack 2 ) folgt.<br />
Wir nehmen nun an, dass die Induktionsvoraussetzung A(x, y + 1) ≤ A(x + 1, y) für<br />
alle x ≥ 0 und fixiertes y ≥ 3. Nach Lemma 1 ist y + 1 < A(x, y + 1), also gilt auch<br />
y + 2 ≤ A(x, y + 1) ≤ A(x + 1, y) aufgrund <strong>de</strong>r Induktionsannahme. Mit Lemma 2 und<br />
<strong>de</strong>r eben gemachten Abschätzung, sowie mit (Ack 3 ) ergibt sich damit A(x, y + 2) ≤<br />
A(x, A(x + 1, y)) = A(x + 1, y + 1) was zu zeigen war.<br />
Analoges zu Lemma 2 gilt auch für das erste Argument <strong>de</strong>r Ackermannfunktion:<br />
17
KAPITEL 2. DIE ACKERMANN-FUNKTION KAPITEL 2. DIE ACKERMANN-FUNKTION<br />
Lemma 2.4: A(x, y) wächst streng monoton im x-Argument, also gilt:<br />
A(x, y) < A(x + 1, y).<br />
Beweis. Mit Lemma 2 und Lemma 3 erhält man unmittelbar: A(x, y) < A(x, y + 1) ≤<br />
A(x + 1, y).<br />
Die eben bewiesenen Lemmata können dazu benutzt wer<strong>de</strong>n, um zu zeigen, dass es<br />
eine Konstante k ∈ N 0 gibt, so dass<br />
n∑<br />
A(k i , y), n ≥ 1,<br />
i=1<br />
für beliebige Konstanten k i ∈ N 0 und alle y > 2 gilt.<br />
Beweis. Der Fall n = 1 ist trivial, <strong>de</strong>nn die Ackermann ist monoton steigend im ersten<br />
Argument, so ist also nur k > k 0 zu wählen.<br />
Sei nun n = 2 und k max := max{k 1 , k 2 } das Maximum <strong>de</strong>r bei<strong>de</strong>n Konstanten. Dann<br />
gilt:<br />
A(k 1 , y) + A(k 2 , y) ≤ 2A(k max , y) = A(1, A(k max , y))<br />
< A(k max + 1, A(c max + 2, y))<br />
= A(k max + 2, y + 1))<br />
< A(k, y)<br />
Setzen wir also nun k := k max + 3 so folgt die Behauptung für diesen Fall.<br />
Ist n ≥ 2, so ergibt sich durch Induktion nach n:<br />
n+1<br />
∑<br />
n+1<br />
∑<br />
A(k i , y) = (A(k 1 , y) + A(k 2 , y)) + A(k i , y)<br />
i=1<br />
i=3<br />
< A(ˆk, y) + A(˜k, y) (gemäß Induktionsvoraussetzung)<br />
< A(k, y) (gemäß Induktionsvoraussetzung)<br />
Die eben nachgewiesene Eigenschaft lässt vermuten, dass die Ackermannfunktion stärker<br />
wächst als je<strong>de</strong> an<strong>de</strong>re primitiv-rekursive Funktion, wenn man nur das erste Argument<br />
hinreichend groß genug wählt.
c○by <strong>mathematik</strong>-<strong>netz</strong>.<strong>de</strong><br />
Nun zeigen wir, dass es zu je<strong>de</strong>r primitiv rekursiven Funktion f : N r 0 → Nr 0 ein k ∈ N 0<br />
gibt, <strong>de</strong>rart dass<br />
f(x 1 , x 2 , . . . , x r ) < A(k, x 1 , x 2 , . . . , x r ) mit x 1 + x 2 + . . . + x r > 2,<br />
gilt. Um dies zu beweisen, genügt es, die Gültigkeit dieser Aussage für die elementaren<br />
Funktionen, die Substitution und die <strong>Rekursion</strong> nachzuweisen.<br />
a) Nullfunktion C r 0 (x 1, x 2 , . . . , x r ) = 0 < A(0, 0) < A(0, x 1 + x 2 + . . . + x r ).<br />
b) Nachfolgerfunktion suc(x 1 ) = x 1 + 1 < A(0, x 1 ).<br />
c) Projektionsfunktion π r i (x 1, x 2 , . . . , x r ) = x i < A(0, x 1 + x 2 + . . . + x r ).<br />
d) Substitution: Es sei g(x 1 , x 2 , . . . , x r ) < A(0, x 1 + x 2 + . . . + x r ),<br />
h i (x 1 , x 2 , . . . , x m ) < A(k i , x 1 + x 2 + . . . + x m ) für 1 ≤ i ≤ r.<br />
f(x 1 , x 2 , . . . , x m ) = g(h 1 , . . . , h r )<br />
< A(k 0 , h 1 + . . . + h r )<br />
< A(k 0 , A(c 1 , x 1 + . . . + x m ) + . . . + A(c r , x 1 + . . . + x m ))<br />
< A(k 0 , A(ˆk, x 1 + . . . + x m ))<br />
< A(k 0 + ˆk, A(ˆk + k 0 + 1, x 1 + . . . + x m ))<br />
= A(k 0 + ˆk + 1, x 1 + . . . + x m )<br />
= A(k, x 1 + . . . + x r ).<br />
d) <strong>Rekursion</strong>:<br />
Es seien g(x 1 , . . . , x r ) < A(0, x 1 + . . . + x r ) und h i (x 1 , . . . , x r+2 ) < A(k 1 , x 1 + . . . +<br />
x r+2 ).<br />
• f(x 1 , x 2 , . . . , x r , 0) = g(x 1 , . . . , x r ) < A(k 0 , x 1 + . . . + x r + 0)<br />
• Induktionsannahme: f(x 1 , . . . , x r+1 , 0) < A(ˆk, x 1 + . . . + x r+1 ) für n r+1 ≥ 0.<br />
• Induktionsschritt:<br />
f(x 1 , . . . , x r+1 + 1) = h(x 1 , . . . , x r+1 , f(x 1 , . . . , x r+1 ))<br />
< A(k 1 , x 1 + . . . + x r+1 + f(x 1 , . . . , x r+1 ))<br />
< A(k 1 , x 1 + . . . + x r+1 + A(ˆk, x 1 , . . . , x r+1 ))<br />
< A(k 1 , A(0, x 1 + . . . + x r+1 ) + A(ˆk, x 1 , . . . , x r+1 ))<br />
≤ A(k 1 , A(k 2 , x 1 + . . . + x r+1 ))<br />
< A(k 1 + k 2 , A(k 1 + k 2 + 1, x 1 + . . . + x r+1 ))<br />
= A(k 1 + k 2 + 2, x 1 + . . . + x r+1 + 1)<br />
< A(k 1 + k 2 + 2, x 1 + . . . + x r+1 )<br />
= A(k, x 1 + . . . + x r+1 )<br />
19
KAPITEL 2. DIE ACKERMANN-FUNKTION KAPITEL 2. DIE ACKERMANN-FUNKTION<br />
Weiterhin viel Spaß mit <strong>de</strong>r Informatik!<br />
http://www.<strong>mathematik</strong>-<strong>netz</strong>.<strong>de</strong> und<br />
http://www.mathering.<strong>de</strong>