Gibt es eine kurze explizite Konstruktion einer universellen rekursiven Funktion ? Alle Definitionen, die ich gesehen habe, beinhalten die Nummerierung von Turing-Maschinen in irgendeiner Weise, was möglich ist, aber schwierig und unüberschaubar erscheint, in einer höheren Programmiersprache (wie Python, Haskell usw.) zu schreiben.
9
Antworten:
Wie wäre es mit McCarthys ursprünglichem Lisp-Interpreter (ursprünglich hier )? Es ist universell, arbeitet mit einer natürlichen Codierung (einem Lisp AST), ist nicht auf einen externen Interpreter angewiesen und umfasst etwa 20 Zeilen.
quelle
Sicher. Schreiben Sie Routinen, die jede der primitiven rekursiven Funktionen von Godel berechnen , und schreiben Sie eine Routine für einen unbegrenzten Suchoperator. Der Funktionsumfang, den Sie auf diese Weise berechnen können, entspricht dem Funktionsumfang, den Turing-Maschinen berechnen können. Weitere Informationen hier .
Der Nachteil ist, dass jede Eingabe in Ihr universelles Programm in Bezug auf diese einfachen Operationen gerahmt werden muss. Dafür sind Compiler natürlich da.
quelle
Jeder Interpreter für jede Sprache, die vollständig ist, ist eine universelle rekursive Funktion. Es gibt Interpreter für Hochsprachen wie C ++ oder Python.
quelle
Eine universelle Funktion
u
kann recht einfach in einer Haskell-ähnlichen Sprache geschrieben werden (keine Nebenwirkungen, Funktionen höherer Ordnung), nämlich:Die Funktion
u
ist universell , weil sie akzeptiert (die Beschreibung) , ein Programmf
und einen Eingabebandx
, und sagt Ihnen , das Ergebnis der Ausführungf
aufx
.Diese Antwort ist zwar nicht ganz ernst, zeigt jedoch, dass ein Compiler oder ein Interpreter für eine Haskell-ähnliche Sprache bereits alle für eine universelle Funktion erforderlichen Bauteile enthält. Die Moral der Geschichte ist, dass Zeit besser damit verbracht wird, die Funktionsweise von Compilern und Interpreten zu untersuchen, als sich Gedanken über die Implementierung einer universellen Funktion in Bezug auf Turing-Maschinen zu machen.
quelle
u
nimmt eine Funktion - ich habe es eine Funktion höherer Ordnung nennen würde. Ich möchteu
eine Ganzzahl oder einen regulären algebraischen Datentyp verwenden. Ich erzwinge kein bestimmtes Berechnungsmodell, solange das Argument dazuu
greifbar ist - zum Beispiel kann es von / zu einer Zeichenfolge serialisiert werden.u
wird ein Abschluss vorgenommen, bei dem es sich um eine endliche Folge von Bytes handelt. Selbst im üblichen utm-Theoremu
repräsentiert die ganze Zahl, die nimmt, eine Funktion.Überprüfen Sie auch dieses Papier von John Tromp mit kombinatorischer Logik. Ein früherer Bericht, der anscheinend nicht mehr verfügbar war, war noch ordentlicher.
quelle