Vor kurzem habe ich mein Studium in Typentheorie / Typensystemen und Lambda-Kalkül begonnen.
Ich habe bereits über Simple Typed Lambda Calculus im Church- und Curry-Stil gelesen. Das letzte ist auch als Type Assignment System (TA) bekannt.
Ich denke über die Beziehungen zwischen TA und Hindley-Milner (HM) nach, dem System in Sprachen wie ML und Haskell.
Das Buch Lambda-Calculus and Combinators: An Introduction (Hindley) besagt, dass TA polymorph ist (S. 119). Ist das der gleiche Sinn für Polymorphismus in Systemen wie HM und System-F?
TA soll die starke Normalisierungseigenschaft haben, ist also nicht vollständig. Sprachen, die das HM-System verwenden, sind vollständig, zum Beispiel Haskell. Es muss also so sein, dass das HM-System es Begriffen wie der Endlosschleife erlaubt , einen Typ zu empfangen. Ist das richtig oder fehlt mir etwas?
Auf jeden Fall würde ich gerne die Beziehung zwischen TA und HM kennen.
quelle
Antworten:
System F und sein Subsystem HM haben einen Typbildner zur universellen Quantifizierung:
was das System in Hindley / Seldin nicht hat. Das ist der Hauptunterschied.
Jetzt hat System F keine entscheidbare Typinferenz mehr, und HM ist eine Möglichkeit, Typinferenz mit einigermaßen ausdrucksstarkem parametrischem Polymorphismus zu kombinieren. HM erreicht dies, indem es nur eine äußerste universelle Quantifizierung zulässt, dh alle Typen haben die Form
Die Frage der starken Normalisierung ist orthogonal. System F und HM normalisieren sich stark, aber das kann leicht durch die Einführung von Fixpunktkombinatoren oder ähnlichem behoben werden. In den Hauptschemata für Funktionsprogramme von L. Damas und R. Milner heißt es sogar: " Zum Beispiel wird die Rekursion weggelassen, da sie durch einfaches Hinzufügen des polymorphen Festpunktoperators eingeführt werden kann ... " Die Einführung von Fixpunkten Das System Turing komplett zu machen, wirft unter dem Gesichtspunkt der Typinferenz keine Probleme auf.
quelle