# Satz von Rice

Der Satz von Rice ist ein Ergebnis der Theoretischen Informatik. Benannt wurde der Satz nach Henry Gordon Rice, der ihn 1953 veröffentlichte. Er besagt, dass es unmöglich ist, eine beliebige nicht-triviale Eigenschaft der erzeugten Funktion einer Turing-Maschine (oder eines Algorithmus in einem anderen Berechenbarkeitsmodell) algorithmisch zu entscheiden.
Für spezielle Klassen von Algorithmen ist es zwar möglich – auch automatisiert – einzelne Eigenschaften nachzuweisen. Es gibt jedoch kein allgemeines Verfahren, das für jeden Algorithmus feststellen kann, ob die von ihm beschriebene Funktion ein gewünschtes, in einer üblichen formalen Sprache gegebenes Verhalten zeigt.

## Satz

Es sei ${\mathcal {P}}$ die Menge aller partiellen Turing-berechenbaren Funktionen und ${\mathcal {S}}\subsetneq {\mathcal {P}}$ eine nicht-leere, echte Teilmenge davon. Außerdem sei eine effektive Nummerierung vorausgesetzt, die einer natürlichen Zahl $n\in \mathbb {N}$ die dadurch codierte Turing-Maschine $M_{n}$ zuordnet.
Dann ist die Menge ${\mathcal {C}}({\mathcal {S}})=\left\{n\mid {\text{die von }}M_{n}{\text{ berechnete Funktion liegt in }}{\mathcal {S}}\right\}$ nicht entscheidbar.
Nach Konstruktion liegen Indizes äquivalenter Turing-Maschinen entweder alle in ${\mathcal {C}}({\mathcal {S}})$ oder alle im Komplement. Man sagt auch, dass ${\mathcal {S}}$ eine semantische Eigenschaft von Turing-Maschinen beschreibt, entsprechend heißt ${\mathcal {C}}({\mathcal {S}})$ eine semantische Menge.

## Anwendungen

Aus dem Satz von Rice folgt beispielsweise, dass es keinen Algorithmus gibt, der für jede Turing-Maschine entscheidet, ob sie für jede Eingabe hält oder nicht. ${\mathcal {S}}={\mathcal {R}}$ ist hierbei die Menge aller total berechenbaren Funktionen.
Ebenso ist es nicht entscheidbar, ob eine Turing-Maschine eine vorgegebene Funktion $f\in {\mathcal {P}}$ berechnet. ${\mathcal {S}}=\{f\}$ enthält dann nur diese eine Funktion. Daraus folgt, dass erst recht das Problem der Programmäquivalenz nicht entscheidbar ist.
Auch lässt sich nicht entscheiden, ob die berechnete Funktion etwa injektiv, surjektiv, monoton oder konstant ist.

## Beweisidee

Der Beweis ist eine Many-One-Reduktion des speziellen Halteproblems $K$ auf ${\mathcal {C}}({\mathcal {S}})$ für beliebiges nicht-triviales ${\mathcal {S}}$. Er wird hier durch Pseudocode skizziert.
Es sei $\emptyset \neq {\mathcal {S}}\subsetneq {\mathcal {P}}$ nicht-trivial. Wir können ohne Einschränkung annehmen, dass die überall undefinierte Funktion $\bot$ nicht in ${\mathcal {S}}$ liegt, sonst gehe man zum Komplement über. Sei weiter $f\in {\mathcal {S}}$ eine beliebige, fest gewählte Funktion (hier geht ein, dass ${\mathcal {S}}$ nicht-trivial ist), die durch die Turing-Maschine $M_{f}$ berechnet werde.
Man betrachte für eine beliebige Turing-Maschine $M_{n}$ den folgenden Algorithmus:
    Funktion $N_{n}(x)$:
       simuliere $M_{n}$ mit Eingabe $n$
       simuliere anschließend $M_{f}$ mit Eingabe $x$
       Ausgabe
Er hat folgende Eigenschaften:
* Die Gödelnummer von $N_{n}$ ist aus $n$ berechenbar. Dies geschehe durch die Funktion $g\in {\mathcal {P}}$, d. h. $\forall x:n\in \mathbb {N} \colon M_{g(n)}(x)=N_{n}(x)$
* Falls $M_{n}$ auf der Eingabe $n$ terminiert, berechnet $N_{n}$ dieselbe Funktion wie $M_{f}$, also gerade $f$ und damit eine Funktion aus ${\mathcal {S}}$.
* Andernfalls berechnet $N_{n}$ die überall undefinierte Funktion $\bot$, also gemäß obiger Annahme eine Funktion aus dem Komplement von ${\mathcal {S}}$.
* Nach Voraussetzung liegt also die von $N_{n}$ berechnete Funktion genau dann in ${\mathcal {S}}$, wenn die Berechnung von $M_{n}(n)$ terminiert.
Wäre nun ${\mathcal {C}}({\mathcal {S}})$ durch eine Turing-Maschine $M$ entscheidbar, so würde man durch Davorschalten eines Algorithmus für $g$ schließlich zu einem Algorithmus zur Lösung des speziellen Halteproblems gelangen, genauer hätte man für jede natürliche Zahl $n$, dass $M_{n}$ hält auf $n$ genau dann wenn $M$ auf $g(n)$ die Ausgabe 1 hat, das heißt feststellt, dass $g(n)$ in ${\mathcal {C}}({\mathcal {S}})$ liegt. Da dies nicht möglich ist, kann ${\mathcal {C}}({\mathcal {S}})$ nicht entscheidbar sein.

## Analogon für rekursiv aufzählbare Eigenschaften

Auf eine analoge Weise lassen sich die rekursiv aufzählbaren (r. a.) semantischen Eigenschaften von Turing-Maschinen charakterisieren. Sei ${\mathcal {S}}\subseteq {\mathcal {P}}(\mathbb {N} )$ ein System von r. a. Mengen. Dann ist die Indexmenge
    ${\mathcal {C}}({\mathcal {S}})=\left\{n\mid {\text{die von }}M_{n}{\text{ erkannte Menge liegt in }}{\mathcal {S}}\right\}$
genau dann selbst r. a., wenn es eine r. a. Menge ${\mathcal {D}}$ von Gödelnummern endlicher Mengen mit folgender Eigenschaft gibt:
    $\forall A\subseteq \mathbb {N} \colon A\in S\Leftrightarrow (A{\text{ rekursiv aufzählbar}}\ \land \ \exists D\subseteq _{\text{fin}}\mathbb {N} \colon (\#D\in {\mathcal {D}}\wedge D\subseteq A))$
Das heißt, ${\mathcal {S}}$ enthält genau die rekursiv aufzählbaren Mengen, die eine endliche Teilmenge $D$ haben, deren Gödelnummer $\#D$ in ${\mathcal {D}}$ liegt.
Dass eine solche Menge ${\mathcal {C}}({\mathcal {S}})$ rekursiv aufzählbar ist, ist leicht einzusehen. Man startet dazu nacheinander die Berechnungen aller Turingmaschinen und gleichzeitig eine Aufzählung von ${\mathcal {D}}$. Immer wenn es eine Turing-Maschine $M_{n}$ gibt, die bereits alle Elemente einer schon aufgezählten endlichen Menge $D$ ausgegeben hat, gibt man $n$ aus. Dass alle anderen Mengen nicht rekursiv aufzählbar sein können, lässt sich ähnlich dem Satz von Rice durch die Unlösbarkeit des Halteproblems zeigen.