Denken Sie daran, dass existenzielle und universelle Typen sehr unterschiedlich sind. Es ist konstruktive Logik, keine klassische Logik, und in der konstruktiven Logik sind und nicht so verwandt wie in der klassischen Logik.∀∃
∀x:A.B(x) ist der Programmtyp, der ein Objekt vom Typ empfängt und ein Objekt vom Typ . Wichtig dabei ist , dass der Typ hängt auf und ist nicht das gleiche für alle . Es kann variieren, je nachdem, was ist. Für eine Eingabe wir eine Ganzzahl ausgeben. Für einen anderen könnten wir eine reelle Zahl ausgeben. Für eine weitere könnten wir eine Funktion über reelle Zahlen ausgeben. Wenn nicht mit variiert dann können Sie mit anstelle , die die Art von Funktionen aus sind zu .AB(x)B(x) xxxxB(x)xA→BAB
A ∨ B A B A B ∃ x : A . B ( x ) B ( x ) x : A B ( x ) x : A B x : A ∃ x : A . B B x : A A × B.∃x:A.B(x) ist die abhängige Version der (konstruktiven) Disjunktion. Sie können sich die konstruktive Disjunktion von zwei Typen und als die disjunkte Vereinigung von und .
ist die disjunkte Vereinigung einer Sammlung von Typen
die durch indiziert sind . Die Tatsache, dass der Van vom Typ abhängig vom Wert von variiert,
macht ihn zu einem abhängigen Typ. Vergleichen Sie mit dem Fall, in dem nicht von abhängt : . Wir nehmen eine Kopie davonA∨BABAB∃x:A.B(x)B(x)x:AB(x)x:ABx:A∃x:A.BB für jedes . Dies ist isomorph zu .x:AA×B
Jetzt können Sie sich fragen, warum wir abhängige Produkt- und Summentypen benötigen . Weil sie uns mehr Ausdruckskraft geben. Jetzt können wir die Typen vollständig ignorieren und haben eine untypisierte Typentheorie / funktionale Programmierung. Dies beseitigt jedoch in erster Linie die Vorteile von Typen, z. B. werden Sie nicht wissen, ob alle Programme immer beendet werden (starke Normalisierung). Siehe Lambda-Würfel und
abhängiger Typ . Ich denke, ein guter Weg, um abhängige Typen gut zu verstehen, besteht darin, die Regeln für die Einführung und Eliminierung der abhängigen Typen in Martin-Lofs Typentheorie zu betrachten .
Der Hauptpunkt abhängiger Typen ist: Wir möchten aus verschiedenen Gründen (z. B. Vermeidung von Fehlern, automatischer Kündigungsnachweis usw.) in einer gut typisierten Theorie bleiben. Wir wollen nicht zu so etwas wie untypisiertem Lambda-Kalkül gehen, wo wir das Ausdrücken so machen können, wie Sie es angegeben haben, und viel mächtigeres Zeug. Wir können sagen, dass abhängige Typen erfunden wurden, um mehr Dinge auszudrücken und gleichzeitig in einer schönen Typentheorie zu bleiben.