Smn-Theorem

Aus testwiki
Zur Navigation springen Zur Suche springen

Das snm-Theorem ist ein zentrales Resultat der Berechenbarkeitstheorie. Es stellt ein Hilfsmittel in der Informatik dar, mit dem man den Code eines Programms in Abhängigkeit von Parametern berechnen kann, und wurde erstmals durch Stephen C. Kleene bewiesen (vgl. Rekursionssatz). Ein Resultat daraus ist, dass eine Programmiersprache, die zur Laufzeit generierten Code ausführen kann, Currying unterstützen kann.

Formale Definition

Sei {φi}i eine effektive Nummerierung aller partiell berechenbaren Funktionen (bspw. die Gödel-Nummerierung aller deterministischen Turing-Maschinen).

Angenommen für einen festen Index i sei die entsprechende Funktion vom Typ φi:m+n, dann gibt es eine totale und berechenbare Funktion snm:m+1 mit

φsnm(i,y1,...,ym)(z1,...,zn)=φi(y1,...,ym,z1,...,zn) für alle (y1,...,ym,z1,...,zn)m+n.

Nichtformale Erklärung

Die snmEigenschaft besagt, dass es zu einem Code w, der mit den Parametern x und v ausgeführt wird (bzw. ausgeführt werden kann), ein Transformationsprogramm U gibt, das aus w, x und v ein Programm wx berechnet, welches bei der Eingabe von v das Gleiche berechnet, wie w bei der Eingabe von x und v.

Beispiele

Das snm-Theorem ist eine Möglichkeit aus Funktionen, deren Berechenbarkeit bereits bekannt ist, neue zu konstruieren.

Es sei beispielsweise zu zeigen, dass eine totale und berechenbare Funktion g:2 existiert, so dass für i,j,x gilt: φg(i,j)(x)=φi(x)+φj(x).

Definiere dazu ψ(i,j,x)=φi(x)+φj(x). Die Funktion ψ ist berechenbar, es existiert also ein Index k, so dass gilt: ψ=φk. Aus dem snm-Theorem folgt nun die Existenz einer total berechenbaren Funktion s12:3 mit φs12(k,i,j)(x)=φk(i,j,x)=ψ(i,j,x) für alle i,j,x. Nun definieren wir g(i,j):=s12(k,i,j), g ist dann offenbar ebenfalls total berechenbar und es gilt:

φg(i,j)(x)=φs12(k,i,j)(x)=ψ(i,j,x)=φi(x)+φj(x)

Insbesondere wird das snm-Theorem oft verwendet, um Reduktionsfunktionen zu konstruieren:

Als Beispiel soll das allgemeine Halteproblem H={(i,x)2φi(x)} auf das Epsilon-Halteproblem H0={eφe(0)} reduziert werden. Genauer ist also die Existenz einer total berechenbaren Funktion f:2 zu zeigen, so dass für alle i,x gilt φi(x)φf(i,x)(0).

Analog zu oben definiert man ψ(i,x,y)=φi(x), die Funktion ψ ist offensichtlich berechenbar und ihr Wert hängt nicht von y ab. Es sei also k ein Index, so dass ψ=φk. Das snm-Theorem liefert jetzt die Existenz einer total berechenbaren Funktion s12, so dass φs12(k,i,x)(y)=φk(i,x,y). Setzt man f(i,x)=s12(k,i,x) und wählt y=0, ergibt sich

φf(i,x)(0)=φk(i,x,0)=ψ(i,x,0)=φi(x).