Яку найінтуїтивнішу теорію залежного типу я міг вивчити?


46

Мені цікаво зрозуміти дійсно залежне введення тексту. Я читав більшість TaPL і читав (якщо не повністю поглинений) "Залежні типи" в ATTaPL . Я також читав і переглядав купу статей про залежність від набору тексту.

Багато дискусій з теорії типів, як видається, зосереджені на додаванні додаткових функцій до систем попереднього типу, а не "що таке наступне велике узагальнення від системи типу X?". Наступні великі узагальнення із системи F здаються залежними типами, але мені ще належить знайти інтуїтивну, канонічну залежну мову. Багато посилань на обчислення (індуктивних) конструкцій змушують мене думати, що КоК є цією мовою, але пояснення мови, яку я бачив, не здаються мені дуже зрозумілими чи інтуїтивно зрозумілими.

Я очікую / здогадуюсь, що така мова матиме такі функції, як: (і, будь ласка, повідомте мене, якщо щось конкретно вискакує як заплутане чи нереальне)

  • Узагальнена абстракція (може мати функції з будь-якого домену в ієрархії типів до іншого, роду -> термін, термін-> тип '' 'тощо)
  • Має нескінченну ієрархію введення тексту (терміни: типи: типи ': типи' ': ...)
  • Мінімальна кількість основних елементів. Я уявляю, що мова стверджує лише один елемент для кожного рівня. Наприклад, це може стверджувати, що ((): Unit: Type: Type ': ...). З цих елементів будуються інші елементи.
  • Сума та види продукції можна отримати.

Я також шукаю пояснення тієї мови, яка в ідеалі могла б обговорити:

  • Зв'язок між абстракцією та кількісною оцінкою в цій мові. Якщо вони не уніфіковані, то поясніть, чому вони не уніфіковані.
  • Ієрархія нескінченного типу явно

Я задаю це питання тому, що хочу вивчити теорію залежних типів, а також тому, що хочу скласти посібник, який, маючи на увазі невеликий досвід роботи з CS, вчить використання та розуміння асистентів підтвердження та залежно введених мов.

(Хрест опублікований на Reddit)

Відповіді:


35

Існує кілька різних способів підходу до цього:

  1. Теорія залежного типу . Це, мабуть, не найпростіший спосіб дізнатися про залежні типи, але ви можете подивитися статті обчислення конструкцій та їх варіанти, системи чистого типу та статтю Мартіна Гофмана про синтаксис та семантику залежних типів, наприклад.

  2. Теорема, що підтверджує . По-перше, погляньте на мою відповідь на споріднене запитання: як я б пішов на вивчення основної теорії асистента Coq? .

  3. ΠΣ, серед інших. І звичайно, є книга Адама Хліпала, дана у відповіді Марка Хамана.

Я схильний би почати з програмування, перш ніж перейти до використання теореми, а потім приступити до вивчення більш теоретичних питань.


Я можу знайти документи для Epigram, але не можу знайти фактичне завантаження для Epigram, лише ще незакінчену Epigram 2. Будь-які ідеї?
Джон Сальватьє

1
Ви знайшли: e-pig.org/darcs/Pig09/web ? Епіграма доступна внизу сторінки.
Дейв Кларк

3
Епіграма 1 по суті є незмінною, оскільки досить довго AFAIK - автор використовує Агда в наші дні (працюючи над Епіграмою 2 убік).
Blaisorblade

У 2019 році я не думаю, що Епіграма 2 ніколи не відбудеться - але зараз є Ідріс (і Ідріс 2!).
xrq

14

λπ

Twelf - це хороша система, що підтверджує теореми, заснована на LF. Перегляд розширених конспектів курсу, запропонованих Френк Пфеннінг, є хорошим вступом до теорії та практики НЧ.

Однак це, мабуть, не найкраща перша система, щоб дізнатися, чи цікавить вас конструктивна математика, а не основи теорії типів: LF означає логічну основу, і це система, яка використовується для теорій аксіоматизації, і вона не так часто працює, як цільова система безпосередньо. Використання системи, заснованої на теорії типів Мартіна-Лоефа, мабуть, найкраще введення - Давел згадує Агду, серед інших - може бути кращою відправною точкою, якщо це ваша мета, оскільки ви можете швидше рухатися з арифметичними та індуктивними типами швидше рамки.


10

CoC, швидше за все, шлях. Просто зануріться в Coq і працюйте над приємним підручником, як Software Foundation (в якому бере участь Pierce of TaPL та ATTaPL).

Як тільки ви зрозумієте практичні аспекти залежного набору тексту, поверніться до теоретичних джерел: вони тоді матимуть набагато більше сенсу.

Ваш список функцій звучить в основному правильно, але побачити, як вони грають на практиці, варто тисячу балів.

(Інший, трохи більш досконалий підручник - це сертифіковане програмування Адама Чліпала із залежними типами )


"Інтуїтивно зрозумілий" - це, можливо, найголовніший момент: тут у CoC / CIC летить набагато більше інтуїцій, ніж просто залежне введення тексту. Це гарна кінцева мета - на мій погляд, вибір дійсно між Coq і Twelf - але, можливо, не найкращий перший крок до "отримання дійсно міцного розуміння залежного набору тексту".
Чарльз Стюарт

@Charles: Ваша точка зору. Я все ще думаю, що з практичної точки зору це гарна ставка. Навіть незважаючи на те, що повне розуміння CoC / CIC може бути складнішим завданням, Coq (плюс наявність хороших навчальних посібників для базового рівня) дозволяє легко зосередитись на вивченні лише аспектів програмування або просто основних аспектів допоміжної роботи (як ваші інтереси диктують) ще до того, як ви зрозуміли всі складності. Я думаю, що це може бути "інтуїтивно зрозумілим" для тих, хто не йде з теоретичного походження.
Марк Хаманн


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.