Jestem zainteresowany uzyskaniem naprawdę solidnego zrozumienia zależnego pisania. Przeczytałem większość TaPL i przeczytałem (jeśli nie w pełni zaabsorbowane) „Typy zależne” w ATTaPL . Przeczytałem również i przejrzałem kilka artykułów na temat pisania zależnego.
Wiele dyskusji na temat teorii typów wydaje się koncentrować na dodawaniu funkcji przyrostowych do poprzednich systemów typów, a nie „jakie jest następne duże uogólnienie od systemu typów X?”. Typy zależne wydają się być kolejnym dużym uogólnieniem z Systemu F, ale nie znalazłem jeszcze intuicyjnego, kanonicznego języka zależnego. Wiele odniesień do rachunku (indukcyjnych) konstrukcji powoduje, że myślę, że CoC jest tym językiem, ale wyjaśnienia języka, który widziałem, nie wydają mi się zbyt jasne ani intuicyjne.
Spodziewam się / zgaduję, że taki język miałby takie cechy jak: (i daj mi znać, jeśli coś konkretnego wyskoczy jako zdezorientowane lub nierealne)
- Uogólniona abstrakcja (może mieć funkcje z dowolnej domeny w hierarchii typów na inne, rodzaj -> termin, termin-> typ '' itp.)
- Ma nieskończoną hierarchię pisania (terminy: typy: typy ': typy' ': ...)
- Minimalna liczba podstawowych elementów. Wyobrażam sobie, że język zapewnia tylko jeden element dla każdego poziomu. Na przykład może twierdzić, że ((): Unit: Type: Type ': ...). Inne elementy są zbudowane z tych elementów.
- Suma i typy produktów są pochodnymi.
Szukam również wyjaśnienia tego języka, który najlepiej omawia:
- Związek między abstrakcją a kwantyfikacją w tym języku. Jeśli nie są zjednoczone, wyjaśnij, dlaczego nie są zjednoczone.
- Hierarchia typów nieskończonych jawnie
Zadaję to pytanie, ponieważ chcę nauczyć się teorii typów zależnych, ale także dlatego, że chcę przygotować przewodnik, który przy założeniu, że ma małe doświadczenie w CS, uczy obsługi i sposobu rozumienia asystentów dowodzenia oraz języków zależnie wpisywanych.