Die Inspiration für diese Frage ist die folgende (vage) Frage: Was sind die programmiersprachlichen / logischen Grundlagen für eine KI, die über ihren eigenen Quellcode nachdenken und ihn modifizieren könnte?
Das ist überhaupt nicht streng, also hier ist mein Versuch, eine konkrete Frage daraus zu extrahieren. Es gibt zwei Dinge, die mich interessieren:
(A) Eine Programmiersprache P, die ihre eigenen Programme als Datentyp Programm darstellen und manipulieren kann (zB als AST). (Falls gewünscht, kann ein Objekt vom Typ Programm in einen String konvertiert werden. Dies ist der Text eines gültigen Programms in dieser Sprache. Dies ist das Gegenteil von dem, was ein Compiler tut.)
(B) Eine Methode, um zu überlegen, was ein Programm in der Sprache P macht. Hier sind zwei Ebenen, über die ich nachdenke:
- Eine andere Sprache Q (mit Theoremprüfungsfähigkeiten), die modelliert, was ein P-Programm tut. Es sollte in der Lage sein, Aussagen wie "das Ergebnis der Ausführung von Programm p ist foo" auszudrücken und zu beweisen.
- Eine Möglichkeit zu überlegen, was ein Programm p tut: Programm in der Sprache P selbst. (Also nehmen wir P = Q oben.)
Inwieweit wurde so etwas umgesetzt, oder wie ist der Fortschritt in diese Richtung? Was sind die praktischen Hindernisse? Wie lässt sich das Problem angesichts der ursprünglichen Fragestellung am besten formalisieren?
*
Wie die Antworten zeigen (danke!), Können sowohl (A) als auch (B1) separat durchgeführt werden, obwohl es eher eine Forschungsfrage zu sein scheint, wenn sie zusammen durchgeführt werden.
Hier sind einige meiner ersten Gedanken zu dieser Frage (Warnung: ziemlich vage). Siehe auch meine Kommentare zu Martin Bergers Antwort.
Ich interessiere mich für die Programmiersprache, die dieselbe Programmiersprache modelliert , und nicht für eine einfachere (also P = Q oben). Dies wäre ein "Proof of Concept" für ein Programm, das "über seinen eigenen Quellcode nachdenken kann". Abhängig getippte Programmiersprachen können Garantien für die Ausgabe ihrer Funktionen geben, aber dies gilt nicht mehr als "Begründen des eigenen Quellcodes" als "Hallo Welt!" Zählt als Quine in einer Sprache, die automatisch einen nackten String ausgibt - es muss eine Art Zitat / Selbstreferenz geben. Das Analoge hier ist ein Datentyp, der Program darstellt.
Es scheint ein ziemlich großes Projekt zu sein - je einfacher die Sprache, desto schwieriger ist es, alles darin auszudrücken; je komplizierter die sprache, desto mehr arbeit muss geleistet werden, um die sprache zu modellieren.
Im Geiste des Rekursionssatzes kann ein Programm dann seinen eigenen Quellcode "holen" und ihn modifizieren (dh eine modifizierte Version von sich selbst ausgeben). (B2) sagt uns dann, dass das Programm in der Lage sein sollte, eine Garantie für das geänderte Programm auszudrücken (dies sollte wiederverwendbar sein, dh es sollte in der Lage sein, etwas über alle zukünftigen Änderungen auszudrücken-?).