Ich bin daran interessiert, einen wirklich soliden Einblick in das abhängige Tippen zu bekommen. Ich habe den größten Teil von TaPL gelesen und in ATTaPL 'Abhängige Typen' gelesen (wenn nicht vollständig aufgenommen) . Ich habe auch eine Reihe von Artikeln über abhängiges Tippen gelesen und überflogen.
Viele typentheoretische Diskussionen scheinen sich auf das Hinzufügen inkrementeller Merkmale zu früheren Typsystemen zu konzentrieren, nicht auf "Was ist die nächste große Verallgemeinerung von Typsystem X?". Abhängige Typen scheinen die nächste große Verallgemeinerung von System F zu sein, aber ich muss noch die intuitive, kanonisch abhängig geschriebene Sprache finden. Die vielen Verweise auf die Berechnung (induktiver) Konstruktionen lassen mich denken, dass CoC diese Sprache ist, aber die Erklärungen der Sprache, die ich gesehen habe, erscheinen mir nicht sehr klar oder intuitiv.
Ich erwarte / vermute, dass eine solche Sprache Features wie: (und lass es mich wissen, wenn etwas als verwirrt oder unrealistisch herausspringt)
- Verallgemeinerte Abstraktion (kann Funktionen von einer beliebigen Domäne in der Typhierarchie zu einer anderen haben, Art -> Term, Term -> Typ '' 'usw.)
- Hat eine unendliche Hierarchie der Typisierung (Begriffe: Typen: Typen ': Typen' ': ...)
- Eine minimale Anzahl von Grundelementen. Ich stelle mir vor, dass die Sprache für jedes Level nur ein einziges Element behauptet. Zum Beispiel könnte es behaupten, dass ((): Unit: Type: Type ': ...). Andere Elemente werden aus diesen Elementen erstellt.
- Summen- und Produkttypen sind ableitbar.
Ich bin auch auf der Suche nach einer Erklärung dieser Sprache, die im Idealfall folgendes besprechen würde:
- Die Beziehung zwischen Abstraktion und Quantifizierung in dieser Sprache. Wenn sie nicht vereint sind, erklären Sie, warum sie nicht vereint sind.
- Die unendliche Typhierarchie explizit
Ich stelle diese Frage, weil ich Theorie der abhängigen Typen lernen möchte, aber auch, weil ich einen Leitfaden zusammenstellen möchte, der unter der Annahme eines kleinen CS-Hintergrunds den Gebrauch von und das Verstehen von Proofassistenten und abhängig getippten Sprachen lehrt.
quelle
Twelf ist ein gutes Theorembeweisungssystem, das auf LF basiert. Ein Blick auf die von Frank Pfenning angebotenen Leistungsnachweise bietet eine gute Einführung in Theorie und Praxis von LF.
Das heißt, es ist vielleicht nicht das beste erste System, um zu lernen, ob Sie sich für konstruktive Mathematik interessieren und nicht für das Wesentliche der Typentheorie: LF bedeutet logisches Gerüst und ist ein System, das zur Axiomatisierung von Theorien verwendet wird und in dem nicht so oft gearbeitet wird wie ein Zielsystem direkt. Die Verwendung eines Systems, das auf der Typentheorie von Martin-Loef basiert, ist wahrscheinlich die beste Einführung - unter anderem erwähnt Agda - ist möglicherweise ein besserer Ausgangspunkt, wenn dies Ihr Ziel ist, da Sie in einer solchen Methode schneller mit arithmetischen und induktiven Typen beginnen können Rahmen.
quelle
CoC ist höchstwahrscheinlich der richtige Weg. Tauchen Sie einfach in Coq ein und arbeiten Sie sich durch ein nettes Tutorial wie Software Foundations (an dem Pierce von TaPL und ATTaPL beteiligt ist).
Wenn Sie ein Gefühl für die praktischen Aspekte des abhängigen Tippens haben, kehren Sie zu den theoretischen Quellen zurück: Sie sind dann viel sinnvoller.
Ihre Featureliste klingt im Grunde genommen korrekt, aber zu sehen, wie sie sich in der Praxis auswirkt, ist tausend Featurepunkte wert.
(Ein weiteres, etwas fortgeschritteneres Tutorial ist Adam Chlipals Certified Programming with Dependent Types. )
quelle
Ich dachte, dieser Artikel hilft, das Konzept auf elementarer Ebene zu entmystifizieren: http://golem.ph.utexas.edu/category/2010/03/in_praise_of_dependent_types.html
quelle
Schauen Sie sich http://www2.tcs.ifi.lmu.de/~abel/talkDTP2011.pdf und ein dort erwähntes älteres PiSigma-System an.
quelle