Μ-Rekursion

Die Klasse Pr der μ-rekursiven Funktionen oder partiell-rekursiven Funktionen spielt in der Rekursionstheorie, einem Teilgebiet der theoretischen Informatik, eine wichtige Rolle (µ für griechisch μικρότατος ‚das kleinste‘). Nach der Church-Turing-These beschreibt sie die Menge aller Funktionen, die im intuitiven Sinn berechenbar sind. Eine wichtige echte Teilmenge der μ-rekursiven Funktionen sind die primitiv-rekursiven Funktionen.

Die Klasse der μ-rekursiven Funktionen stimmt überein mit der Klasse der Turing-berechenbaren Funktionen sowie weiteren gleich mächtigen Berechenbarkeitsmodellen, wie dem Lambda-Kalkül, Registermaschinen und WHILE-Programmen.

Die primitiv-rekursiven Funktionen sind aus einfachen Grundfunktionen (konstante 0-Funktion, Projektionen auf ein Argument und Nachfolgerfunktion) durch Komposition und primitive Rekursion aufgebaut. Dadurch erhält man immer totale Funktionen, also Funktionen im eigentlichen Sinn. Die μ-rekursiven Funktionen sind demgegenüber partielle Funktionen, die aus denselben Konstrukten und zusätzlich durch die Anwendung des μ-Operators gebildet werden können. Durch die Anwendung des μ-Operators wird Partialität eingeführt. Jedoch ist nicht jede μ-rekursive Funktion nicht-total. Beispielsweise sind alle primitiv-rekursiven Funktionen auch μ-rekursiv. Ein Beispiel für eine nicht primitiv-rekursive, totale, μ-rekursive Funktion ist die Ackermannfunktion.

Definition des μ-Operators

Für eine partielle Funktion f:ℕk+1→ℕ und natürliche Zahlen x1;…;xk∈ℕ sei die Menge

M(f,x1,…,xk)={n∈ℕ∣f(x1,…,xk,n)=0 ∧ ∀0≤m≤n:f(x1,…,xk,m)↓}

festgehalten, also die Gesamtheit aller n derart, dass f an der Stelle (x1,…,xk,n) identisch 0 verschwindet und zusätzlich für alle Punkte (x1,…,xk,m) mit m≤n definiert ist.

Zu beachten ist dabei, dass M(f,x1,…,xk) als Menge natürlicher Zahlen genau dann ein Minimum besitzt, wenn sie nicht leer ist (vgl. Wohlordnung).

Durch Anwendung des μ-Operators auf f entstehe nun die partielle Funktion μf:ℕk→ℕ, definiert durch:

μf(x1,…,xk)={min⁡M(f,x1,…,xk),falls M(f,x1,…,xk)≠∅︀undefiniertsonst

Insbesondere bildet der Operator μ also eine (k+1)-stellige partielle Funktion auf eine k-stellige partielle Funktion ab.

Für berechenbares f kann das Programm zur Berechnung von μf verstanden werden als eine While-Schleife, die nach oben zählt und die deswegen nicht terminieren muss:

Parameter: x1,…,xk.
Setze n auf 0;
Solange f(x1,…,xk,n)≠0, erhöhe n um 1;
Ergebnis: n.

Definition der μ-rekursiven Funktionen

Die Klasse Pr der μ-rekursiven Funktionen (ℕk→ℕ) umfasst die folgenden Grundfunktionen:

  1. konstante 0-Funktion: fk(n1,…,nk):=0
  2. Projektion auf ein Argument: πik(n1,…,nk):=ni, 1≤i≤k
  3. Nachfolgefunktion: ν(n):=n+1

Die μ-rekursiven Funktionen erhält man als Abschluss der Grundfunktionen bezüglich der drei folgenden Operationen:

  1. der Komposition: f(n1,…,nk):=g(h1(n1,…,nk),…,hm(n1,…,nk)), falls g,h1,…,hm∈Pr
  2. der primitiven Rekursion: f(0,n2,…,nk):=g(n2,…,nk) und f(n1+1,n2,…,nk):=h(f(n1,…,nk),n1,…,nk), falls h,g∈Pr
  3. des μ-Operators.

Äquivalenz der μ-rekursiven Funktionen mit der Turingmaschine

Es lässt sich beweisen, dass eine Turingmaschine (TM) durch μ-rekursive Funktionen simuliert werden kann. Es lässt sich auch beweisen, dass die Menge der μ-rekursiven Funktionen genau der Menge der Turing-berechenbaren Funktionen entspricht.

Beweis-Skizze für die Simulation der TM mit μ-rekursiven Funktionen

Man kann zeigen, dass sich die Konfiguration einer TM durch drei Zahlen a, b, c darstellen lässt.
Genau so kann eine Funktion h(a,b,c)=y (eine bijektive Abbildung ℕ3→ℕ) definiert werden,
die eine geeignete Kodierung der TM ist.

Nehmen wir also eine primitiv-rekursive Funktion

f(n,x)=y,

die eine geeignete Kodierung der TM liefert für die Eingabe x nach n Berechnungsschritten,

und eine zweite primitiv-rekursive Funktion

g(y)=0∨g(y)=1,

die für eine Kodierung y als Ergebnis 0 liefert, falls y einen Endzustand der TM repräsentiert, und ansonsten 1.

Dann ergibt

Anzahl(x)=μ(g(f(n,x)))

die Anzahl der Schritte, die eine TM zur Berechnung bis zum Ende benötigt. Also bekommen wir mit

Berechnung(x)=f(Anzahl(x),x)

die Berechnung der TM in einem Endzustand bei der Eingabe x.

Bemerkung

Beispiele

Ω:=∑p2−|p|,
wobei p ein haltendes Programm ist und |p| die Länge des Programms in Bit bezeichnet.

Literatur