Gibt es Turing-vollständige typisierte Lambda-Kalküle? Wenn ja, welche Beispiele gibt es?
Gibt es Turing-vollständige typisierte Lambda-Kalküle? Wenn ja, welche Beispiele gibt es?
Antworten:
Ja sicher. Viele typisierte Lambda-Kalküle akzeptieren konstruktionsbedingt nur stark normalisierende Terme, sodass sie keine willkürlichen Berechnungen ausdrücken können. Aber ein Typensystem kann alles sein, was Sie wollen. Machen Sie es breit genug, und Sie können alle deterministischen Berechnungen ausdrücken.
Ein triviales Typensystem, das ein Turing-vollständiges Fragment des Lambda-Kalküls umfasst, akzeptiert jeden Ausdruck als gut typisiert (mit einem Top-Typ ).
Praktischerweise haben statisch typisierte funktionale Programmiersprachen im Kern eine typisierte Lambda-Rechnung, die es ermöglicht, einen Fixpunkt-Kombinator auch gut zu typisieren. Beginnen Sie zum Beispiel mit dem einfach eingegebenen Lambda-Kalkül (oder dem ML- Typensystem oder dem System F oder einem anderen Typensystem Ihrer Wahl) und fügen Sie eine Regel hinzu, die einen Fixpunkt-Kombinator wie gut geschrieben. Γ ⊢ f : T → T Die oben dargestellten Regeln sind ziemlich ungeschickt, da sie Begriffe wieY enthalten
Ein interessantes Typensystem, das sich an die reine Lambda-Rechnung hält, ist die Lambda-Rechnung mit Schnitttypen.
Schnittpunkttypen haben interessante Eigenschaften in Bezug auf die Normalisierung:
In der Beschreibung von Lambda-Termen mit Vereinigungstypen erfahren Sie, warum Kreuzungstypen einen so bemerkenswerten Umfang haben.
Sie haben also ein Typensystem, das eine Turing-vollständige Sprache definiert (da jeder Begriff gut typisiert ist), und eine einfache Charakterisierung von Abschlussberechnungen. Da dieses Typensystem die Normalisierung kennzeichnet, ist es natürlich nicht entscheidbar.