31.10.2013 Aufrufe

Primitive Rekursion - mathematik-netz.de

Primitive Rekursion - mathematik-netz.de

Primitive Rekursion - mathematik-netz.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<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>

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!