Es gibt also einen Algorithmus zum Konvertieren von Lambda-Kalkül-Begriffen in kombinatorische Logik unter Verwendung von SK-Kombinatoren. Es produziert Dinge, die in der Größe explodieren . Ich würde gerne mehr über diese Explosion erfahren. Ich kann mir jedoch keinen besseren Algorithmus vorstellen. Ich habe von funktionalen Sprachen gehört, die praktisch zu Kombinatoren kompiliert wurden, so dass es den Anschein hat, dass ein besserer Algorithmus existieren muss. Ich habe David Turners Artikel zu diesem Thema nachgeschlagen und er sagt im Grunde nur, dass er einige Optimierungen anwenden soll und dass sie eine "erhebliche Verbesserung" bewirken.
Bedeutet "erhebliche Verbesserung", dass die Größe nur auf eine Polynomzunahme abfällt? Gibt es eine bekannte Möglichkeit, Lambda-Terme mit nur einer Polynomzunahme (oder weniger?) In kombinatorische Logik umzuwandeln? Wenn ein solcher Algorithmus existiert, ist er praktisch?
Antworten:
Ich bin kein Experte in diesem Bereich, aber hier sind zwei historische Artikel, die für die Frage sehr relevant zu sein scheinen und möglicherweise ein halbaktives Forschungsgebiet sind. Turner schlug eine Reihe von Kombinatoren vor, die auf SK-Kombinatoren reduziert werden können. In diesem nächsten Artikel wird argumentiert, dass Turner-Kombinatoren, die nicht auf SK-Kombinatoren reduziert sind, zu einem exponentiellen Aufblasen führen (und dass die Reduktion auf SK-Terme vermutlich noch größer wäre). In der zweiten Veröffentlichung heißt es jedoch, dass es einen effizienten O (n log n) -Raumalgorithmus gibt, der auf Turner-Kombinatoren basiert. (Es scheint, dass Behauptungen über die Polynomeffizienz aufgestellt wurden, die als nicht vollständig demonstriert / unbewiesen angesehen werden und daher als Vermutungen angesehen werden ...
Was ist eine effiziente Implementierung des λ-Kalküls? / Frandsen, Sturtivant (1991) (siehe S.18)
Übersetzung von Turner-Kombinatoren im O (n log n) -Raum / Noshita (1985)
quelle