Ich hoffe, meine Frage macht Sinn: Ausgehend von der Annahme, dass der untypisierte Kalkül der Leistung einer Turing-Maschine entspricht, was entspricht in einer Turing-Maschine das Hinzufügen von Typen zum \ Lambda- Kalkül? Gibt es eine Art Automaten analog zur Eingabe, ob statisch oder dynamisch?
8
Antworten:
Ich kann Ihnen keine direkte Antwort für Automaten geben, sondern für Funktionen auf Zahlen.
Der untypisierte Lambda-Kalkül entspricht rekursiven Funktionen .μ
Bei typisierten Systemen variiert dies natürlich für verschiedene Systeme.
Ein interessantes ist System F , auch bekannt als polymorpher Lambda-Kalkül. Es gibt einen Satz, der das sagt
Dies bedeutet, dass Sie in System F grundsätzlich alle vorstellbaren Gesamtfunktionen ausdrücken können.
Es gibt ein etwas schwächeres System, Gödels System T, für das es einen sehr ähnlichen Satz für die Peano-Arithmetik erster Ordnung gibt. (Dieses System ist jedoch nicht so schön wie System F. In System F können Sie natürliche Zahlen, Boolesche Werte usw. nativ darstellen, während System T als einfach typisierter Lambda-Kalkül mit extern hinzugefügten Naturwerten und Booleschen Werten konstruiert ist. Auch System F weist Typpolymorphismus auf , was es in vielen Fällen viel eleganter macht.)
Siehe auch:
quelle
Ich werde sagen, dass das Tippen für Turing Machines nichts entspricht. Hier ist meine Argumentation: Das Tippen hat eigentlich nichts mit Berechnung zu tun, und Turing Machines modelliert nur Berechnungen.
Zum größten Teil haben die Programmtypen keinen Einfluss darauf, wie dieses Programm ausgeführt wird. Vielmehr handelt es sich um Tools zur Kompilierungszeit, die aus einem von zwei Gründen verwendet werden. Eine besteht darin, schlecht typisierte Programme nicht kompilieren zu lassen. Dies ist eine Operation zur reinen Kompilierungszeit, die keinen Einfluss darauf hat, wie die resultierende Berechnung ausgeführt wird.
Die zweite besteht darin, dass mehrere Funktionen denselben Namen haben. Dies wirkt sich nicht wirklich auf die zugrunde liegende Berechnung aus, sondern lässt uns nur Programme auf eine Weise schreiben, die leichter zu verstehen ist.
Typen sind kein Berechnungswerkzeug. Sie können für Beweise verwendet werden, um Programme zu verstehen, um sie auf eine Weise zu strukturieren, die leichter zu verstehen ist, aber ihre Anwesenheit ändert nichts an der grundlegenden Art und Weise, wie wir die Berechnung durchführen.
quelle