Viele Lehrbücher behandeln Schnittmengenarten in der Lambda-Rechnung. Die Typisierungsregeln für die Schnittmenge können wie folgt definiert werden (zusätzlich zur einfach getippten Lambda-Rechnung mit Subtypisierung):
Schnittpunkttypen haben interessante Eigenschaften in Bezug auf die Normalisierung:
- Ein Lambda-Ausdruck kann ohne die eingegeben werden rule iff es stark Normalisieren ist.
- Ein Lambda-Term lässt einen Typ zu, der nicht enthält, wenn er eine normale Form hat.
Was ist, wenn wir statt Kreuzungen Gewerkschaften hinzufügen?
Hat die Lambda-Rechnung mit einfachen Typen, Untertypen und Vereinigungen eine interessante ähnliche Eigenschaft? Wie lassen sich die mit union typisierbaren Begriffe charakterisieren?
lambda-calculus
type-theory
logic
Gilles 'SO - hör auf böse zu sein'
quelle
quelle
Antworten:
Im ersten System, das Sie als Subtyping bezeichnen, gelten folgende zwei Regeln:
Sie entsprechen den Eliminierungsregeln für ; ohne dass sie die Binde ist mehr oder weniger nutzlos.∧ ∧
Im zweiten System (mit den Konnektiven und , zu denen wir auch ein hinzufügen ) sind die oben genannten Subtypisierungsregeln irrelevant, und ich denke, dass die begleitenden Regeln, an die Sie gedacht haben, die folgenden sind:∨ → ⊥
Dieses System erlaubt es, (unter Verwendung der Regel) zu , was nicht nur mit einfachen Typen möglich ist, die eine normale Form haben, aber nicht stark normalisieren .(λx.I)Ω:A→A ⊥E
Zufällige Gedanken: (Vielleicht lohnt es sich, bei TCS nachzufragen)
Dies lässt mich vermuten, dass die verwandten Eigenschaften etwa so sind:
Übung: Beweise, dass ich falsch liege.
Es scheint auch ein degenerierter Fall zu sein, vielleicht sollten wir darüber nachdenken, diesen Typen in das Bild aufzunehmen. So weit ich mich erinnere, würde es erlauben, ?A∨(A→⊥)
quelle
Ich möchte nur erklären, warum Schnittpunkttypen gut zur Charakterisierung von Normalisierungsklassen (stark, kopf oder schwach) geeignet sind, während andere Typsysteme dies nicht können. (einfach eingegeben oder System F).
Der Hauptunterschied besteht darin, dass Sie sagen müssen: "Wenn ich und dann kann ich ". Dies gilt häufig nicht für Nicht-Schnittmenge-Typen, da ein Begriff dupliziert werden kann:M2 M1→M2 M1
und dann die Eingabe bedeutet , dass Sie beide Vorkommen geben können , aber nicht mit der gleichen Art, zum Beispiel Mit Kreuzungstypen , die Sie dies in umwandeln können: und dann ist der entscheidende Schritt jetzt ganz einfach: also kann mit Schnittpunkttypen eingegeben werden.MNN N
Nun zu Vereinigungstypen: Angenommen, Sie können mit einem Vereinigungstyp , dann können Sie auch und dann für einige Typen Aber Sie immer noch , dass für jeden zu beweisen , haben , , die sogar unmöglich scheint , ist ein Union - Typ ist.(λx.xx)(λy.y) λx.xx S,T1,…
Aus diesem Grund glaube ich nicht, dass es eine einfache Charakterisierung der Normalisierung für Unionstypen gibt.
quelle