Stopp-Tester
Die entwickelte Software untersucht letztlich stets eine endliche Menge von Eingaben und prüft, ob die Folge auf Eins endet. Bisher hat man dies für alle Zahlen bis 20·271 (lt. Springer 2025) positiv beantworten können. Dennoch könnte schon die nächste Zahl das Programm in eine Endlosschleife führen.
Kann ein Algorithmus für ein beliebiges Programm P und eine beliebige Eingabe E entscheiden, ob P mit E nach endlich vielen Schritten anhält?
Angenommen, es gäbe einen Stopp-Tester. Diesem übergeben wir ein beliebiges Programm und eine zugehörige Eingabe. Der Stopp-Tester soll stets nach endlich vielen Schritten entscheiden, ob dieses Programm mit dieser Eingabe anhält oder endlos weiterläuft.
Da ein Programm als Zeichenfolge gespeichert werden kann, kann auch der Programmtext selbst eine Eingabe sein. Wir können einen Stopp-Tester deshalb insbesondere fragen, ob ein Programm anhält, wenn es seinen eigenen Programmtext als Eingabe erhält. Ein Programm nennen wir hier selbststoppend, wenn es anhält, sobald sein eigener Programmtext als Eingabe verwendet wird.
Wie kann so ein Algorithmus aussehen?
Sicherlich ist ein bestimmter Programmvorbau notwendig. Da jedoch zum Ende des Algorithmus die Ausgabe der Entscheidung ansteht, hat das - verbal beschrieben - Programm sicherlich folgende Gestalt, wobei stopp eine boolesche Variable ist, die vorher berechnet wurde.
BEGIN
{...}
IF (stopp)
THEN Ausgabe: "Das Programm ist selbststoppend."
ELSE Ausgabe: "Das Programm ist nicht selbststoppend."
END.
Wenn dieses Programm existiert, dann könnte ein Programmierer den Quelltext aber auch ändern und so das Programm SELTSAM erschaffen:
BEGIN
{...}
IF (stopp)
THEN ...
WHILE (true) DO //nichts
ELSE ...
END.
Ist Seltsam selbststoppend oder nicht?
Fall 1: Der Stopp-Tester sagt voraus, dass SELTSAM anhält.
Dann führt SELTSAM absichtlich eine Endlosschleife aus. Es hält also nicht. Die Vorhersage ist falsch.
Fall 2: Der Stopp-Tester sagt voraus, dass SELTSAM nicht anhält.
Dann beendet sich SELTSAM. Es hält also doch. Auch diese Vorhersage ist falsch.
In beiden Fällen entsteht ein Widerspruch. Der Fehler kann nicht in der Konstruktion von SELTSAM liegen, sondern nur in unserer ursprünglichen Annahme: Ein Stopp-Tester, der für jedes beliebige Programm und jede beliebige Eingabe korrekt entscheidet, ob das Programm anhält, kann nicht existieren.
Resümee:
Es gibt keinen Algorithmus, der für jedes beliebige Programm und jede beliebige Eingabe entscheiden kann, ob das Programm nach endlich vielen Schritten anhält. Das Halteproblem ist damit algorithmisch nicht entscheidbar. Es zeigt eine prinzipielle Grenze der Berechenbarkeit und damit auch der Turingmaschine. Damit haben wir ein Problem gefunden, das grundsätzlich nicht durch einen Algorithmus für alle möglichen Eingaben gelöst werden kann.
Vertiefung/Visualisierung: