Smn-Theorem

Das s n m {\displaystyle s_{n}^{m}} -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 N {\displaystyle \{\varphi _{i}\}_{i\in \mathbb {N} }} eine effektive Nummerierung aller partiell berechenbaren Funktionen (bspw. die Gödel-Nummerierung aller deterministischen Turing-Maschinen).

Angenommen für einen festen Index i {\displaystyle i} sei die entsprechende Funktion vom Typ φ i : N m + n N {\displaystyle \varphi _{i}\colon \mathbb {N} ^{m+n}\to \mathbb {N} } , dann gibt es eine totale und berechenbare Funktion s n m : N m + 1 N {\displaystyle s_{n}^{m}\colon \mathbb {N} ^{m+1}\to \mathbb {N} } mit

φ s n m ( i , y 1 , . . . , y m ) ( z 1 , . . . , z n ) = φ i ( y 1 , . . . , y m , z 1 , . . . , z n ) {\displaystyle \varphi _{s_{n}^{m}(i,y_{1},...,y_{m})}(z_{1},...,z_{n})=\varphi _{i}(y_{1},...,y_{m},z_{1},...,z_{n})} für alle ( y 1 , . . . , y m , z 1 , . . . , z n ) N m + n {\displaystyle (y_{1},...,y_{m},z_{1},...,z_{n})\in \mathbb {N} ^{m+n}} .

Nichtformale Erklärung

Die s n m {\displaystyle s_{n}^{m}} Eigenschaft besagt, dass es zu einem Code w {\displaystyle w} , der mit den Parametern x {\displaystyle x} und v {\displaystyle v} ausgeführt wird (bzw. ausgeführt werden kann), ein Transformationsprogramm U {\displaystyle U} gibt, das aus w {\displaystyle w} , x {\displaystyle x} und v {\displaystyle v} ein Programm w x {\displaystyle w_{x}} berechnet, welches bei der Eingabe von v {\displaystyle v} das Gleiche berechnet, wie w {\displaystyle w} bei der Eingabe von x {\displaystyle x} und v {\displaystyle v} .

Beispiele

Das s n m {\displaystyle s_{n}^{m}} -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 : N 2 N {\displaystyle g\colon \mathbb {N} ^{2}\to \mathbb {N} } existiert, so dass für i , j , x N {\displaystyle i,j,x\in \mathbb {N} } gilt: φ g ( i , j ) ( x ) = φ i ( x ) + φ j ( x ) {\displaystyle \varphi _{g(i,j)}(x)=\varphi _{i}(x)+\varphi _{j}(x)} .

Definiere dazu ψ ( i , j , x ) = φ i ( x ) + φ j ( x ) {\displaystyle \psi (i,j,x)=\varphi _{i}(x)+\varphi _{j}(x)} . Die Funktion ψ {\displaystyle \psi } ist berechenbar, es existiert also ein Index k N {\displaystyle k\in \mathbb {N} } , so dass gilt: ψ = φ k {\displaystyle \psi =\varphi _{k}} . Aus dem s n m {\displaystyle s_{n}^{m}} -Theorem folgt nun die Existenz einer total berechenbaren Funktion s 1 2 : N 3 N {\displaystyle s_{1}^{2}\colon \mathbb {N} ^{3}\to \mathbb {N} } mit φ s 1 2 ( k , i , j ) ( x ) = φ k ( i , j , x ) = ψ ( i , j , x ) {\displaystyle \varphi _{s_{1}^{2}(k,i,j)}(x)=\varphi _{k}(i,j,x)=\psi (i,j,x)} für alle i , j , x N {\displaystyle i,j,x\in \mathbb {N} } . Nun definieren wir g ( i , j ) := s 1 2 ( k , i , j ) {\displaystyle g(i,j):=s_{1}^{2}(k,i,j)} , g {\displaystyle g} ist dann offenbar ebenfalls total berechenbar und es gilt:

φ g ( i , j ) ( x ) = φ s 1 2 ( k , i , j ) ( x ) = ψ ( i , j , x ) = φ i ( x ) + φ j ( x ) {\displaystyle \varphi _{g(i,j)}(x)=\varphi _{s_{1}^{2}(k,i,j)}(x)=\psi (i,j,x)=\varphi _{i}(x)+\varphi _{j}(x)}

Insbesondere wird das s n m {\displaystyle s_{n}^{m}} -Theorem oft verwendet, um Reduktionsfunktionen zu konstruieren:

Als Beispiel soll das allgemeine Halteproblem H = { ( i , x ) N 2 φ i ( x ) } {\displaystyle H=\{(i,x)\in \mathbb {N} ^{2}\mid \varphi _{i}(x){\downarrow }\}} auf das Epsilon-Halteproblem H 0 = { e N φ e ( 0 ) } {\displaystyle H_{0}=\{e\in \mathbb {N} \mid \varphi _{e}(0){\downarrow }\}} reduziert werden. Genauer ist also die Existenz einer total berechenbaren Funktion f : N 2 N {\displaystyle f\colon \mathbb {N} ^{2}\to \mathbb {N} } zu zeigen, so dass für alle i , x N {\displaystyle i,x\in \mathbb {N} } gilt φ i ( x ) φ f ( i , x ) ( 0 ) {\displaystyle \varphi _{i}(x){\downarrow }\Leftrightarrow \varphi _{f(i,x)}(0){\downarrow }} .

Analog zu oben definiert man ψ ( i , x , y ) = φ i ( x ) {\displaystyle \psi (i,x,y)=\varphi _{i}(x)} , die Funktion ψ {\displaystyle \psi } ist offensichtlich berechenbar und ihr Wert hängt nicht von y {\displaystyle y} ab. Es sei also k {\displaystyle k} ein Index, so dass ψ = φ k {\displaystyle \psi =\varphi _{k}} . Das s n m {\displaystyle s_{n}^{m}} -Theorem liefert jetzt die Existenz einer total berechenbaren Funktion s 1 2 {\displaystyle s_{1}^{2}} , so dass φ s 1 2 ( k , i , x ) ( y ) = φ k ( i , x , y ) {\displaystyle \varphi _{s_{1}^{2}(k,i,x)}(y)=\varphi _{k}(i,x,y)} . Setzt man f ( i , x ) = s 1 2 ( k , i , x ) {\displaystyle f(i,x)=s_{1}^{2}(k,i,x)} und wählt y = 0 {\displaystyle y=0} , ergibt sich

φ f ( i , x ) ( 0 ) = φ k ( i , x , 0 ) = ψ ( i , x , 0 ) = φ i ( x ) . {\displaystyle \varphi _{f(i,x)}(0)=\varphi _{k}(i,x,0)=\psi (i,x,0)=\varphi _{i}(x).}