Ich dachte , ich verstand abhängig Typisierung (DT) richtig, aber die Antwort auf diese Frage: /cstheory/30651/why-was-there-a-need-for-martin-l%C3% B6f-to-create-Intuitionistic-Type-Theorie hat mich anders denken lassen.
Nachdem ich mich über DT informiert und versucht habe zu verstehen, was sie sind, frage ich mich, was wir durch diese Vorstellung von DTs gewinnen können. Sie scheinen flexibler und leistungsfähiger zu sein als einfach eingegebene Lambda-Berechnungen (STLC), obwohl ich nicht genau verstehe, wie / warum.
Was können wir mit DTs machen, die mit STLC nicht möglich sind? Scheint, als würde das Hinzufügen von DTs die Theorie komplizierter machen, aber was ist der Vorteil?
Aus der Antwort auf die obige Frage:
Abhängige Typen wurden von de Bruijn und Howard vorgeschlagen, die die Curry-Howard-Korrespondenz von Aussagenlogik zu Logik erster Ordnung erweitern wollten.
Dies scheint auf einer gewissen Ebene sinnvoll zu sein, aber ich kann das Gesamtbild von "wie / warum" immer noch nicht erfassen. Vielleicht könnte ein Beispiel, das diese Erweiterung der CH-Korrespondenz zur FO-Logik explizit zeigt, dazu beitragen, den Punkt zu treffen, an dem es darum geht, zu verstehen, was die große Sache mit DTs ist. Ich bin mir nicht sicher, ob ich das auch verstehe.
Antworten:
Erweitern meines Kommentars: Abhängige Typen können mehr Programme eingeben. "Mehr" bedeutet einfach, dass die Menge der mit abhängigen Typen typisierbaren Programme eine angemessene Obermenge der Programme ist, die im einfach typisierten Kalkül (STLC) typisierbar sind . Ein Beispiel wäre, L i s t 2 * 3 + 4 ( α ) , die Listen der Länge 10 , Tragelemente des Typs α . Der Ausdruck 2 ∗ 3 + 4 ist gleichzeitig Programm und Teil eines Typs. Dies ist in der STLC nicht möglich.λ List2∗3+4(α) 10 α 2∗3+4
Die Schlüsselregel, die abhängige von nicht abhängigen Typen unterscheidet, lautet application:
Auf der linken Seite haben Sie die STLC, wo Programme in den Räumlichkeiten nur in das Programm des Abschlusses "fließen". Im Gegensatz dazu fließt in der abhängigen Anwendungsregel auf der rechten Seite das Programm von der rechten Prämisse in den Typ in der Schlussfolgerung 1 .N 1
Um Typen durch Programme parametrisieren zu können, muss die Syntax der abhängigen Typen erweitert werden. Um sicherzustellen, dass die Typen wohlgeformt sind, verwenden wir ein zweites „Typensystem“, das Arten genannt wird, die die Typen einschränken. Dieses Sortiersystem ist im Wesentlichen das STLC, aber "eine Ebene höher".
Es gibt viele Erklärungen für abhängige Typen. Einige Beispiele.
quelle
Stellen Sie sich Typdeklarationen nur als Behauptungen vor. Derzeit können Sie nur Dinge wie isInt32 (), isCharPtr () usw. sagen. Diese verschiedenen Zusicherungen sind so ausgewählt, dass sie beim Kompilieren überprüfbar sind. Dieses Konzept kann jedoch auf folgende Dinge erweitert werden: isCharPtr () && isNotNull (). Nullable Pointer sind ein großes Problem. Zeiger sollten als Standardeinstellung nicht nullfähig sein, wobei nullfähige Zeiger ein Typ sind, der nicht dereferenzierbar ist, ohne zu wissen, ob er null ist oder nicht. Ähnliche Probleme sind Dinge wie: isPositiveInteger () oder isEvenNaturalNumber ().
quelle