Die primitiven rekursiven Funktionen werden über die natürlichen Zahlen definiert. Es scheint jedoch, als ob das Konzept auf andere Datentypen verallgemeinert werden sollte, sodass man über primitive rekursive Funktionen sprechen kann, die Listen beispielsweise Binärbäumen zuordnen. Analog dazu lassen sich partielle rekursive Funktionen über die natürlichen Zahlen gut auf berechenbare Funktionen für jeden Datentyp verallgemeinern, und ich möchte verstehen, wie die gleiche Art der Verallgemeinerung für primitive rekursive Funktionen vorgenommen werden kann.
Wenn ich intuitiv eine einfache imperative Sprache definieren würde, die grundlegende Operationen ermöglicht, z. B. Listen (wie Verkettung, Kopf und Schwanz, Vergleich von Elementen) und eine Form der Iteration, bei der im Voraus bekannt sein muss, wie viele Iterationen auftreten werden ( B. über die Elemente in einer unveränderlichen Liste iterieren), sollte eine solche Sprache höchstens in der Lage sein, die primitiven rekursiven Funktionen über Listen zu berechnen. Aber wie kann ich das formal verstehen und genauer gesagt, wie würde ich beweisen, dass meine Sprache alle primitiven rekursiven Funktionen über Listen und nicht nur eine Teilmenge davon berechnet?
Um es klar auszudrücken, ich bin daran interessiert, primitive rekursive Funktionen als eine genau definierte Klasse von Funktionen zu verstehen (falls dies tatsächlich der Fall ist), und nicht nur an der Operation der primitiven Rekursion selbst, die unkompliziert erscheint. Ich würde mich für Hinweise auf alles interessieren, was über primitive Rekursion über allgemeine Datenstrukturen oder in einem anderen Kontext als den natürlichen Zahlen geschrieben wurde.
Update: Ich habe möglicherweise eine Antwort in einem Artikel namens Walther Recursion von McAllester und Arkoudas gefunden. (Proceedings of CADE 1996. ) Dies scheint eine verallgemeinerte Version der primitiven Rekursion sowie die stärkere Walther-Rekursion zu enthalten. Ich habe vor, eine Selbstantwort zu schreiben, sobald ich diese verdaut habe, aber in der Zwischenzeit könnte diese Notiz für andere mit derselben Frage hilfreich sein.
quelle
Antworten:
Im Allgemeinen ist es in einer Sprache mit Datentypen (wie Listen, Bäumen usw.) einfach, eine Sprache von Funktionen zu beschreiben, die sich genau so verhalten, wie wir es von einer primitiven Rekursion erwarten.
Wenn der Datentyp beispielsweise ist und die Konstruktoren c 1 , … , c n den Typ habenD c1,…,cn
dann hat der Rekorder für den Ausgabetyp O den TyprecOD O
und die operative Semantik wird sein:
für jedes .i
So etwas wie ein Mund voll! Zumindest für natürliche Zahlen erhalten wir tatsächlich
und r e c O N f 0 f 1 (Sn)→ f 0 n( r e c O N f 0 f 1 n)
wie erhofft (beachten Sie, dass der Nullkonstruktor keine Argumente hat!).
Wenn wir jetzt für konstante Funktionen und Projektionen ermöglichen und erlauben beliebige Anwendungen von für nicht-Funktionstypen O , dann haben Sie genau primitive Rekursion.r e cÖD. Ö
Wenn alle s ebenfalls nicht funktionsfähig sind, ergibt die übliche Gödel-Codierung des Datentyps beruhigend dieselben primitiven rekursiven Funktionen.T.jich
Es wäre jedoch schön, eine elegantere Beschreibung dieses Prozesses zu haben. Hier kommt Carlos 'Antwort ins Spiel: Diese Datentypen können in der Kategorietheorie eleganter als die anfänglichen Algebren bestimmter Funktoren beschrieben werden, die oft als Polynomfunktoren bezeichnet werden . Der Rekursor ist dann nur (eine Variante) des anfänglichen Morphismus dieser Algebra, der manchmal von Menschen, die versuchen, Dinge zu verwirren , als Katamorphismus bezeichnet wird. Dieser Morphismus existiert durch Konstruktion der Anfangsalgebra.
Ein Paramorphismus ist nur die spezielle Variante, die ich oben beschrieben habe.
quelle
Ich habe kürzlich genau diese Frage gestellt und mehrere Artikel von Interesse gefunden:
Endgültig induktiv präsentierte Logik : (a) definiert eine Logik, die einen allgemeinen Begriff der primitiven Rekursion über jeden Datentyp liefert, der bestimmte Anforderungen erfüllt. (B) beweist, dass diese Logik eine konservative Erweiterung der primitiven rekursiven Arithmetik ist.
Die Komplexität von Schleifenprogrammen : beweist, dass ihre Vorstellung von Schleifenprogrammen den primitiven rekursiven Funktionen entspricht.
Logikprogramme für primitive rekursive Mengen : beweist, dass ihre Klasse von Logikprogrammen primitiven rekursiven Funktionen entspricht.
Eine beweistheoretische Charakterisierung der primitiven rekursiven Mengenfunktionen : beweist, dass alle primitiven rekursiven Funktionen über eine gegebene Menge nur diejenigen sind, die in einer sehr schwachen Mengenlehre definiert werden können.
quelle
Vielleicht denken Sie an das Konzept eines Paramorphismus ?
Aus der funktionalen Programmierung mit Bananen, Linsen, Umschlägen und Stacheldraht :
quelle