Ich interessiere mich für das Konzept der "r-Turing-Vollständigkeit", wie es von Axelsen und Glück (2011) definiert wurde . Ein System ist vollständig, wenn es die gleichen Funktionen wie eine reversible Turing-Maschine berechnen kann, ohne dass "Müll" -Daten erzeugt werden. Dies ist dasselbe, als könnte man jede Funktion berechnen, die sowohl (a) berechenbar als auch (b) injektiv ist.
Ich möchte den Raum berechenbarer injektiver Funktionen rechnerisch erkunden. Um dies zu tun, suche ich nach der "minimalsten" umkehrbaren Programmiersprache - etwas, das die gleiche Rolle für die r-Turing-Berechenbarkeit spielen kann, die der Lambda-Kalkül für die Turing-Berechenbarkeit spielt.
Ich weiß, dass es viele umkehrbare Sprachen gibt, die von Menschen entwickelt wurden und sich als vollständig erwiesen haben. Diese werden jedoch mit Blick auf praktische Anwendungen entwickelt, und ihre Autoren konzentrieren sich darauf, ihnen ausdrucksstarke Funktionen zu geben, anstatt sie minimal zu machen.
Weiß jemand, ob eine solche minimale umkehrbare Sprache beschrieben wurde oder ob in eine solche Richtung geforscht wird? Ich bin ziemlich neu in der Literatur zu diesem Thema, daher hätte ich es leicht übersehen können. Hat jemand einen Einblick, wie eine solche Sprache erstellt werden könnte?
Unten finden Sie eine Zusammenfassung dessen, wonach ich suche. Ich weiß nicht, ob es durch Modifizieren des Lambda-Kalküls selbst erstellt werden kann oder ob ein völlig anderer Sprachtyp verwendet werden müsste.
- r-Turing complete language - berechnet alle berechenbaren invertierbaren Funktionen und kann nur invertierbare Funktionen berechnen
- Syntax und Semantik so minimal wie möglich. (ZB hat die Lambda-Rechnung nur Funktionsdefinitionen und -anwendungen und sonst nichts.) Syntax oder Semantik müssen nicht mit denen der Lambda-Rechnung in Beziehung stehen, obwohl dies möglich ist.
- Programm = Daten. Das heißt, die Programme verarbeiten eher Ausdrücke als andere Arten von Daten. Dies garantiert, dass die Ausgabe eines Programms immer als Programm interpretiert werden kann. Dies impliziert wahrscheinlich, dass es sich eher um einen funktionalen als um einen imperativen Sprachstil handeln muss.
- Es gibt eine systematische Möglichkeit, ein Programm in seine Inverse umzuwandeln, die nicht wesentlich mehr Berechnungen erfordert als die eigentliche Durchführung der inversen Berechnung. (Nicht alle umkehrbaren Sprachen haben diese Eigenschaft, einige jedoch schon.)
Ich möchte betonen, dass Axelsens und Glücks Ansatz zum reversiblen Rechnen sich deutlich von dem bekannten Ansatz von Bennett unterscheidet, bei dem ein (im Allgemeinen nicht invertierbares) Programm invertierbar gemacht wird, indem zusammen mit der Ausgabe einige Informationen über den Verlauf der Berechnung zurückgegeben werden. Bei der Vollständigkeit von r-Turing geht es darum, injizierende Funktionen ohne zusätzliche Ausgabe berechnen zu können. Es gibt verschiedene Dinge, die als Variationen des "reversiblen Lambda-Kalküls" bezeichnet werden und im Sinne von Bennet reversibel sind - das ist nicht das, wonach ich suche.