2014-11-12 9 views

Antwort

5

Ich bin kein Idris Experte, aber ich würde erwarten, dass

Type -> Type 

ist auch in Type 1.

Ich würde auch

Nat -> Type 

erwarten, und wenn Sie sehr glücklich sind (nicht so sicher, über diese ein)

List Type 

, dass groß zu sein.

Die Idee ist, dass Sie alle Typ-Building-Operationen auf jeder Ebene durchführen können. Jedes Mal, wenn Sie Typen von einer Ebene als Werte verwenden, leben die Typen diese Strukturen eine Ebene höher.

+1

'Typ -> Typ: Typ' –

+1

Ich bin mir nicht sicher, ob Idris dem Programmierer zu viele Informationen über' Type' Levels enthüllt. Der 'Type: Type 1' ist wahrscheinlich nur, weil' Type: Type' ein Widerspruch ist. –

+0

"Typ -> Typ" ist tatsächlich in "Typ 1", aber es ist auch in "Typ" (wie Ramon bemerkte). Dasselbe gilt für 'Nat -> Type' und' List Type'. – Snowball

7

Ich bin kein Spezialist für Typentheorie, aber hier ist mein Verständnis. In der Idris tutorial gibt es einen Abschnitt 12.8 Cumultivity. Er sagt, dass es eine interne Hierarchie des Typs Universen ist:

Type : Type 1 : Type 2 : Type 3 : ... 

Und für jede x : Type n impliziert x : Type m für jede m > n. Es gibt auch ein Beispiel, das zeigt, wie es mögliche Zyklen in der Typinferenz verhindert.

Aber ich denke, dass diese Hierarchie nur für den internen Gebrauch ist und es keine Möglichkeit gibt, einen Wert von Type (n+1) zu erstellen, der nicht in Type n ist.

Siehe auch Artikel in nLab über universes in type theory und über type of types.

Vielleicht kann diese issue im Idris-Dev-Repository auch nützlich sein. Edwin Brady verweist dort auf die Design and Implementation paper (siehe Abschnitt 3.2.2).