Definieren primitiver rekursiver Funktionen über allgemeine Datentypen


9

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.


1
Mir ist nicht klar, wonach Sie genau suchen. Es scheint, als würden Sie nur versuchen, W-Typen zu finden , aber das ist es vielleicht nicht.
Andrej Bauer

3
Es ist wahrscheinlich nützlich zu bemerken, dass "gewöhnliche" (baumartige) Datentypen auf ziemlich einfache Weise in natürliche Zahlen codiert werden können, und dann sind die PR-Funktionen über den Naturtönen eine ziemlich gute Darstellung dessen, was Sie vielleicht wollen. Alternativ können Sie Gödels System T verwenden , das mit den "üblichen" Rekursoren auf die streng positiven Datentypen erster Ordnung erweitert wurde.
Cody

1
Sie können die Ausgabetypen der Eliminatoren auf Basistypen beschränken, wenn Sie diese "Funktion" entfernen möchten.
Cody

1
Es scheint mir immer noch, dass eine Form von eingeschränkten W-Typen das ist, wonach Sie suchen. So etwas wie W-Typen mit endlicher Verzweigung und die Rekursoren beschränken sich darauf, in andere eingeschränkte W-Typen zu eliminieren.
Andrej Bauer

1
Die CADE-Konferenz 1996 besuchen Sie hier: dblp.org/db/conf/cade/cade96
John Fisher

Antworten:


5

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 habenDc1,,cn

ci:T1iT2iTk1iDD

dann hat der Rekorder für den Ausgabetyp O den TyprecDOO

recDO:(T11Tk11DDOO)DÖ

und die operative Semantik wird sein:

recDO f1  fn (ci t1tki d1dm)fi t1tki (recDO f1 fn d1)(recDO f1fn dm)

für jedes .i

So etwas wie ein Mund voll! Zumindest für natürliche Zahlen erhalten wir tatsächlich

recN.Ö::(N.ÖÖ)ÖN.Ö

und r e c O N f 0 f 1 (Sn) f 0 n( r e c O N f 0 f 1 n)

recN.Ö f0 f1 0f1 0
recN.Ö f0 f1 (S. n)f0 n (recN.Ö f0 f1 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.recD.ÖÖ

Wenn alle s ebenfalls nicht funktionsfähig sind, ergibt die übliche Gödel-Codierung des Datentyps beruhigend dieselben primitiven rekursiven Funktionen.T.ichj


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.


recN.Ö::(N.ÖÖ)ÖN.Ö

recN.

Ich habe keine elementaren Referenzen auf Anhieb, obwohl ich denke, dass diese Folien eine nette, weiche Einführung geben, und Kapitel 3 von Ralph Mattes ' These geht auf große technische Details ein, obwohl es nicht induktive Typen erster Ordnung zulässt.
Cody

2

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.


0

Vielleicht denken Sie an das Konzept eines Paramorphismus ?

Aus der funktionalen Programmierung mit Bananen, Linsen, Umschlägen und Stacheldraht :

h=(b,)

h0=bh(n+1)=n(hn)

b=1nm=(n+1)×m

h

hNull=bh(Nachteileeinb)=ein(b,hb)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.