Universelle rekursive Funktion schreiben [geschlossen]

9

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.

sdcvvc
quelle
Die Frage wurde ursprünglich bei SO gestellt , scheint hier angemessener zu sein.
SDCVVC
1
Mein Verständnis ist, dass eine universelle rekursive Funktion genau eine Nummerierung von rekursiven Funktionen (oder äquivalent Turing-Maschinen) angibt, damit das Ergebnis aus dem Index einer rekursiven Funktion und der Eingabe berechnet werden kann. Daher klingt „eine universelle rekursive Funktion ohne Nummerierung von Turing-Maschinen“ für mich nicht plausibel.
Tsuyoshi Ito
3
Kein Forschungsniveau. Jeder Interpreter für eine Turing-vollständige Sprache ist eine universelle rekursive Funktion.
Warren Schudy

Antworten:

13

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.

Aaron Sterling
quelle
10

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.

gg

Kaveh
quelle
Ein Interpretor für Turingmaschinen (oder Registermaschinen oder rekursive Funktionen) ist ebenfalls eine universelle rekursive Funktion, und es ist nicht schwierig, sie zu implementieren. Ich habe sie vor einigen Jahren in C ++ implementiert und bin mir ziemlich sicher, dass es in Python noch einfacher wäre. Verwenden Sie Google, es gibt viele kostenlose Simulatoren im Internet, und einige von ihnen sind sogar Open Source.
Kaveh
8

Eine universelle Funktion ukann recht einfach in einer Haskell-ähnlichen Sprache geschrieben werden (keine Nebenwirkungen, Funktionen höherer Ordnung), nämlich:

u f x = f x

Die Funktion uist universell , weil sie akzeptiert (die Beschreibung) , ein Programm fund einen Eingabeband x, und sagt Ihnen , das Ergebnis der Ausführung fauf x.

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.

Andrej Bauer
quelle
Allerdings unimmt eine Funktion - ich habe es eine Funktion höherer Ordnung nennen würde. Ich möchte ueine Ganzzahl oder einen regulären algebraischen Datentyp verwenden. Ich erzwinge kein bestimmtes Berechnungsmodell, solange das Argument dazu ugreifbar ist - zum Beispiel kann es von / zu einer Zeichenfolge serialisiert werden.
SDCVVC
Auf einem tatsächlichen Computer (sobald der Code kompiliert ist) uwird ein Abschluss vorgenommen, bei dem es sich um eine endliche Folge von Bytes handelt. Selbst im üblichen utm-Theorem urepräsentiert die ganze Zahl, die nimmt, eine Funktion.
Andrej Bauer
5

Ü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.

Yuval Filmus
quelle