Zusammenfassung: Nach dem Satz von Rice ist alles unmöglich. Und doch mache ich diese vermeintlich unmöglichen Sachen die ganze Zeit!
Natürlich sagt der Satz von Rice nicht einfach "alles ist unmöglich". Es heißt etwas ganz Konkretes: "Jede Eigenschaft eines Computerprogramms ist nicht berechenbar."
(Wenn Sie Haare teilen möchten, ist jede "nicht-triviale" Eigenschaft, dh Eigenschaften, die alle Programme oder keine Programme besitzen, trivial berechenbar. Jede andere Eigenschaft ist jedoch nicht berechenbar.)
Das sagt der Satz oder scheint es zu sagen. Und vermutlich haben eine große Anzahl sehr kluger Leute die Richtigkeit dieses Theorems sorgfältig überprüft. Aber es scheint der Logik völlig zu trotzen! Es gibt zahlreiche Eigenschaften von Programmen, deren Berechnung trivial ist !! Beispielsweise:
Wie viele Schritte führt ein Programm aus, bevor es anhält? Zu entscheiden, ob diese Zahl endlich oder unendlich ist, ist genau das nicht berechenbare Halteproblem. Zu entscheiden, ob diese Zahl größer oder kleiner als ein endliches ist, ist trivial! Führen Sie das Programm einfach in bis zu Schritten aus und prüfen Sie, ob es anhält oder nicht. Einfach!
In ähnlicher Weise verwendet das Programm in seinen ersten Ausführungsschritten mehr oder weniger als Speichereinheiten ? Trivial berechenbar.
Erwähnt der Programmtext eine Variable mit dem Namen ? Eine triviale Textanalyse wird die Antwort aufdecken.
Ruft das Programm den Befehl ? Scannen Sie den Programmtext erneut nach diesem Befehlsnamen.
Ich kann viele Eigenschaften sehen, die auch nicht berechenbar aussehen. ZB wie viele Ergänzungen führt ein vollständiger Programmlauf durch? Das ist fast dasselbe wie die Frage, wie viele Schritte das Programm ausführt, was praktisch das Problem des Anhaltens ist. Aber es sieht so aus, als gäbe es eine Menge Programmeigenschaften, die sehr, sehr einfach zu berechnen sind. Und doch besteht der Satz von Rice darauf, dass keiner von ihnen berechenbar ist.
Was vermisse ich hier?