Wenn wir ein beliebiges Computerprogramm haben, das seine Anweisungen ändern kann, ist es möglich, dieses Programm mit einem Programm zu simulieren, das seine Anweisungen nicht ändern kann?
Bearbeiten:
Ich bin neu in StackExchange, also nicht sicher, ob ich hier eine NEUE Frage stellen darf, aber hier ist: Ok, der Beweis, dass es möglich ist, ist wirklich sehr einfach, wie ihr gezeigt habt. Nun frage ich mich: Gibt es Probleme, bei denen es effizienter (und inwieweit) ist, den effizientesten selbstmodifizierenden Algorithmus zu verwenden, um das Problem zu lösen, im Vergleich zu dem Eingabe-Ausgabe-äquivalenten effizientesten nicht selbstmodifizierenden Algorithmus?
Jedes Turing-complete-Rechenmodell ohne Änderungscode (oder "Code") dient als Beweis für diese Aussage. Ich weiß nicht , dass jede der Standardmodelle (TM, RAM, ...) Sie haben Code zu modifizieren, so dass wir nicht zu weit zu suchen.
Kompilieren Sie aus einem solchen Modell (und stellen Sie sicher, dass der Compiler keine Code-Änderung vornimmt), um ein Programm in der gewünschten Sprache zu erhalten.
Dies ist natürlich ein existenzielles Argument: Es gibt ein äquivalentes Programm. Wir wissen aber auch, dass es zwischen zwei beliebigen Turing-vollständigen Sprachen rekursive (dh berechenbare) Compiler gibt, so dass Sie ein Programm der gewünschten Form (gelesen: in der gewünschten Sprache) erhalten.
quelle
So ergänzen Sie die Antwort von David Richerby :
Wenn es wahr wäre, dass keine selbstmodifizierenden Algorithmen durch nicht selbstmodifizierende Algorithmen modelliert werden können, müssten diese Algorithmen auf etwas ausgeführt werden, das sich auch selbstmodifiziert. Es müssten Schildkröten sein.
Wie ich in meinem Kommentar erwähnt habe, kann ein selbstmodifizierender Algorithmus auf einem Prozessor ausgeführt werden, der sich selbst an die Regeln eines statischen Algorithmus (der in seinem Entwurf kodiert ist) hält, der ihm "sagt", wie Maschinenbefehle auszuführen sind.
quelle
cat
. (Kein Wortspiel beabsichtigt, obwohl Katzen Lebewesen sind)