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?
quelle
Antworten:
Für die Zwecke dieser Diskussion ist ein "Programm" ein Teil des Codes, der immer eine Ganzzahl als Eingabe verwendet und entweder für immer ausgeführt wird oder eine Ganzzahl zurückgibt. Wir sagen, dass zwei Programme und im Wesentlichen gleich sind, wenn sie dieselbe Funktion berechnen, dh für jede Zahl entweder beide und ewig laufen oder beide enden und dieselbe Zahl ausgeben.f g n f(n) g(n)
Eine Erweiterungseigenschaft von Programmen ist eine Eigenschaft , die die Erweiterungsgleichheit respektiert, dh wenn und in Bezug auf die Erweiterung gleich sind, haben sie entweder beide die Eigenschaft oder beide haben sie nicht.P f g P
Hier sind einige Beispiele von nicht -extensional Eigenschaften:
k
. (Wir können Variablen umbenennen.)Ich bin sicher, Sie haben bemerkt, dass ich genau Ihre angeblichen Gegenbeispiele zu Rices Theorem aufgelistet habe, die besagen:
Es gibt einen anderen Weg, dies zu erklären: Sie müssen zwischen einem Programm und der Funktion, die es berechnet, unterscheiden. Viele verschiedene Programme berechnen die gleiche Funktion (sie sind alle weitgehend gleich). Beim Satz von Rice geht es um Eigenschaften von Funktionen, nicht um Eigenschaften von Programmen, die sie berechnen.
quelle
Grundlegendes Missverständnis:
Darüber spricht der Satz von Rice nicht. Es geht um Eigenschaften von Funktionen und darum, dass die Menge der Programme, die diese Funktion berechnen, nicht bestimmbar ist. Formal ist die Menge gegeben∅⊂P⊂RE
ist nicht entscheidbar. Für die von Ihnen genannten Eigenschaften finden Sie kein geeignetes für das die Programmgruppe diese Form hat. Einige Programme für eine Funktion verfügen möglicherweise über die Eigenschaft, während andere (für dieselbe Funktion) möglicherweise nicht über die Eigenschaft verfügen. Sehen Sie hier einige Beispiele.P
Der Satz von Rice befasst sich mit semantischen Eigenschaften (Eigenschaften der von einem Programm berechneten Funktion , z. B. Domäne oder Wertebereich). Sie beziehen sich auf syntaktische Eigenschaften (Eigenschaften des Programms , z. B. Laufzeit oder wie viele Variablen verwendet werden).
Für syntaktische Eigenschaften scheint nicht viel bekannt zu sein; siehe diese Frage .
quelle