Was ist die intuitivste Theorie für abhängige Typen, die ich lernen konnte?


46

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.

(Cross auf Reddit gepostet)

Antworten:


35

Es gibt verschiedene Möglichkeiten, dies zu erreichen:

  1. Abhängige Typentheorie . Dies ist wahrscheinlich nicht die einfachste Methode, um abhängige Typen zu erlernen. Sie können sich jedoch beispielsweise die Abhandlungen zu Calculus of Constructions und deren Varianten, Pure Type Systems und Martin Hofmanns Artikel über Syntax und Semantik abhängiger Typen ansehen.

  2. Theorem beweist . Schauen Sie sich zunächst meine Antwort auf eine verwandte Frage an: Wie würde ich die zugrunde liegende Theorie des Coq Proof Assistant erlernen? .

  3. ΠΣ, unter anderen. Und natürlich gibt es das Buch von Adam Chlipala, das in Marc Hamanns Antwort enthalten ist.

Ich würde gerne mit dem Programmieren beginnen, bevor ich mit dem Beweisen des Theorems beginne und mich dann mit den theoretischeren Fragen befasse.


Ich kann Papiere für Epigram finden, aber ich kann keinen tatsächlichen Download für Epigram finden, nur das noch unvollendete Epigram 2. Irgendwelche Ideen?
John Salvatier

1
Haben Sie gefunden: e-pig.org/darcs/Pig09/web ? Das Epigramm finden Sie unten auf der Seite.
Dave Clarke

3
Epigramm 1 ist seit einiger Zeit im Wesentlichen nicht mehr gepflegt AFAIK - der Autor verwendet heutzutage Agda (während er an Epigramm 2 arbeitet).
Blaisorblade

Ich glaube nicht, dass Epigramm 2 im Jahr 2019 jemals passieren wird - aber jetzt gibt es Idris (und Idris 2!).
Freitag,

14

λπ

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.


10

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. )


"Intuitiv" ist vielleicht der springende Punkt: In CoC / CIC geht es um viel mehr Intuitionen als nur um das abhängige Tippen. Es ist ein gutes Endziel - meiner Meinung nach liegt die Wahl wirklich zwischen Coq und Twelf -, aber vielleicht nicht der beste erste Schritt, um "ein wirklich solides Verständnis für abhängiges Tippen zu erlangen".
Charles Stewart

@ Charles: Ihr Punkt ist genommen. Ich halte es aus praktischer Sicht immer noch für eine gute Wette. Auch wenn ein umfassendes Verständnis von CoC / CIC ein komplexeres Unterfangen sein kann, macht es Coq (und das Vorhandensein guter Lernprogramme für die Grundstufe) einfach, sich darauf zu konzentrieren, nur die Programmieraspekte oder nur die grundlegenden Proof-Assistenten-Aspekte (wie z Ihre Interessen diktieren), noch bevor Sie alle Komplexitäten erfasst haben. Ich denke, dies ist "intuitiv" für jemanden, der keinen theoretischen Hintergrund hat.
Marc Hamann


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.