Вступ до теорії типу Мартина-Лефа


36

Що було б найкращим вступом до ідей Пер Мартіна-Лефса щодо теорії типів? Я переглянув кілька лекцій літньої школи в Орегоні, але мене все ще спантеличує таке питання:

Що таке тип?

Я знаю, що таке набір, оскільки ви можете визначити їх за звичайними аксіомами ZF, і вони мають дуже інтуїтивну конкретну модель; просто подумайте про кошик, наповнений речами. Однак я ще не бачив розумного визначення типу, і мені було цікаво, чи є якесь джерело, яке б перекрило цю ідею для манекена.


4
У книзі HoTT є вступ, в якому порівнюються типи та набори, можливо, це допоможе, див. Розділ 1.1 homotopytypetheory.org/book . Але що ще важливіше, ви хочете, щоб ми імплантували у вашу голову правильне уявлення про типи, тоді як для наборів ви раді описати їх аксіомами, не наполягаючи на тому, щоб знати, що вони є насправді ». Ну, типи описуються правилами виводу для типів. І у них дуже інтуїтивна конкретна модель, ви знаєте, кошик, наповнений блоками Lego. Все, що ви можете побудувати з них, є типом.
Андрій Бауер

Я думаю, що віддалення мозку від теорії множин є найбільшою проблемою. Однак я не впевнений, наскільки хороша аналогія Лего. Що таке блоки? Якщо x: A і y: a, як правило, я нічого не можу створити з них, якщо A не є рекурсивним типом стрілки. Звичайно, я часто можу змішувати речі різного типу, щоб створити щось третього типу ...
dst

4
Блоки Lego - це конструктори типу. Так, наприклад, з і ви можете побудувати і і , і та . Ви також можете створювати нові типи, наприклад та тощо. Люди мають різні інтуїції щодо типів. Набори - це одна з них, але сира. Типи також схожі на топологічні простори. Вони також схожі на структуровані дані в програмуванні. Вони також схожі на -groupoids. Ось у цьому краса, багатство можливостей. Виберіть одну можливість і біжіть з нею.у : ( х , у ) ( х , х ) я п л ( х ) г е л е х λ г : . x I d ( x , y ) z : A I d ( x , z ) ωx:Ay:A(x,y)(x,x)inl(x)relfxλz:A.xId(x,y)z:AId(x,z)ω
Андрій Бауер

Відповіді:


31

Тип - це властивість обчислень. Це те, що ви пишете в правій частині двокрапки.

Дозвольте мені детальніше зупинитися на цьому. Зауважте, що термінологія не зовсім стандартна: деякі статті чи книги можуть використовувати різні слова для певних понять.

Термін представляє собою елемент з абстрактного синтаксису , який призначений для представлення обчислень. Інтуїтивно це дерево розбору. Формально це скінченне дерево, де вузли належать до якогось алфавіту. Нетипізований підрахунок визначає синтаксис термінів. Наприклад, (типове) обчислення лямбда містить терміни (написані , тощо), побудовані з трьох типів вузлів:НMN

  • змінні, значення aity 0 (їх численна колекція), написані , тощо;уxy
  • застосування змінної, arity 1 (її численна колекція, з біекцією до змінних), написаної тощо;λx.M
  • застосування, арності 2, написаний .MN

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

Тип є властивістю термінів. Система типів для нетипізованого обчислення описує, які терміни мають, які типи. Математично, в основі, система типів - це відношення між термінами і типами. Точніше, типова система - це сімейство таких відносин, що індексується контекстами - як правило, контекст забезпечує принаймні типи змінних (тобто контекст є частковою функцією від змінних до типів), таким чином, що термін може мати лише тип у контекстах, які надають тип для всіх його вільних змінних. Який тип математичного об’єкта залежить, залежить від системи типів.

Деякі типи систем описуються типами як множини, використовуючи такі поняття теорії множин, як перетин, об'єднання та розуміння. Це має перевагу, спираючись на знайомі математичні основи. Обмеженням цього підходу є те, що він не дозволяє міркувати про еквівалентні типи.

Багато типів системи описують самі типи як терміни в обчисленні типів. Залежно від типової системи, це можуть бути однакові терміни або різні терміни. Я буду використовувати базовий термін фрази для позначення терміна обчислення, який описує обчислення. Наприклад, просто набране лямбда-числення використовує такі типи числення (письмові тощо):τ

  • базові типи, аритус 0 (їх кінцева чи численна колекція), написані , тощо;БAB
  • функція, близько 2, написана .τ0τ1

Співвідношення між термінами та типами, яке визначає просто набране лямбда-числення, зазвичай визначається шляхом введення правил . Правила введення тексту - не єдиний спосіб визначення типової системи, але вони є загальними. Вони добре працюють для систем композиційного типу, тобто систем типів, де тип (и) терміна будується з типів підтермін. Правила введення визначають типову систему індуктивно: кожне правило введення тексту - це аксіома, яка стверджує, що для будь-якого примірника формул над горизонтальним правилом формула нижче правила також є правдивою. Див. Як читати правила набору тексту? для отримання детальної інформації. Чи існує повне набране лямбда числення Тюрінга? може також представляти інтерес.

Для просто введеного лямбдального числення, судження про введення тексту означає, що має тип в контексті . Я опустив формальне визначення контекстів. ΓM:τMτΓ

x:τΓΓx:τ(Γ)Γ,x:τ0M:τ1Γλx.M:τ0τ1(I)ΓM:τ0τ1ΓN:τ0ΓMN:τ1(E)

Наприклад, якщо і це типи на основі, то має тип у будь-якому контексті (знизу вгору, застосувати двічі, потім , і нарешті на кожній гілці).B λ x . λ у . хAB( A B ) A B ( I ) ( E ) ( Γ )λx.λy.xy(AB)AB(I)(E)(Γ)

Можна інтерпретувати типи просто набраного лямбдального числення як множини. Це означає надання денотаційної семантики для типів. Хороша денотаційна семантика для базових термінів призначала б кожному базовому терміну член позначення всіх його типів.

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

Існують системи типів, які йдуть далі і повністю змішують типи та базові терміни, щоб не було різниці між ними. Кажуть, що такі системи мають вищий клас . У таких обчисленнях, типи мають типів - тип може з'явитися на лівій стороні . Аналіз побудови - парадигма залежних типів вищого порядку. Лямбда - куба (також відома як куб Barendregt) системи типу класифікує в термінах чи дозволяють вони умови залежать від типів ( поліморфізм - деякі базові терміни містять типи як подтерми), типів, залежать від точки ( в залежності від типу), або типів залежати на типи ( оператори типів - обчислення типів має поняття обчислення).:

Більшість типів систем отримали теоретико-семантичну семантику, щоб зв'язати їх із звичайними основами математики. Як пов’язані мови програмування та основи математики? і Чим відрізняються смислові та синтаксичні погляди типів функцій? тут можуть бути цікаві. Також була проведена робота з використання теорії типів як основи математики - теорія множин є історичною основою, але це не єдиний можливий вибір. Теорія типу гомотопії є важливою віхою в цьому напрямку: вона описує семантику навмисної інтуїтивістської теорії типу з точки зору теорії гомотопії та будує теорію множин в цьому рамках.

Я рекомендую книги Бенджаміна Пірса Типи та мови програмування та теми з питань виду та мови програмування . Вони доступні будь-яким студентам без будь-яких інших умов, крім базового ознайомлення з формальними математичними міркуваннями. TAPL описує системи багатьох типів; залежні типи є предметом глави 2 ATTAPL.


+1 для TAPL. Я міг навчити себе зовсім небагато типів із читання цієї книги.
Гай Кодер

Я не впевнений, що ATTAPL є гарною відправною точкою для вивчення залежних типів.
Мартін Бергер

15

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

На відміну від загальноприйнятого розуміння, теорія множин - це теорія двох відносин: рівності та встановленого членства , а не просто встановленого членства. І ці два відносини будуються у суттєво виразних фазах.

  1. Ми будуємо логіку першого порядку як теорію рівності довільних речей (а не просто множин). Логіка першого порядку використовує неформальне поняття доказування. Доказ поняття не є формально вираженим лише в логіці першого порядку.

  2. Тоді ми будуємо теорію множин на основі логіки першого порядку як теорії множин і встановлюємо членство.

  3. Встановлене членство і рівність потім пов'язані аксіомою розширення, яка говорить про те, що два множини рівні саме тоді, коли вони мають однакові члени.

  4. Нарешті, неформальна концепція доказування з (1) отримує раціоналізацію як певні набори (дерева доказів).

Важливо усвідомити, що поняття доказування , таким чином, є громадянином другого класу в теорії множин.

Ця настройка добре працює для звичайної математики малого / середнього розміру, але, як ми зараз вирішуємо масштабні докази, такі як класифікація всіх кінцевих простих груп або перевірка нетривіальних комп’ютерних програм, вона розпадається, тому що це не веде себе до простої механізації.

Теорія типу Мартіна-Лефа різна: вона формує поняття доказів і типу (що, приблизно, належить теорії типу Мартіна-Лефа, якими є множини для теорії множин) одним махом. Це означає, що докази є першокласними громадянами теорії. Хоча набір дають його члени, теорія множин не дає формально визначити, що вважається доказом того, що щось є членом набору. На противагу цьому типу присвоюються докази його проживання. Таким чином , ви розумієте , типу точно , коли ви розумієте , що розраховує як доказ .ТTT

Які ці докази населяють типи? Дещо спрощуючи (і опускаючи типи ідентичності), вони є функціональними програмами, точніше термінами в -calculus, які можна набрати. Це відомо як листування Кері-Говарда. Це дає прекрасну нову і менш спеціальну основу конструктивної математики. Це не дуже добре для класичної математики важко.λ


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

Я згоден. Вивчити невпізнані теоретично-теоретичні припущення потрібно деякий час. Багато програм програмування Agda мені допомогло, і могло б працювати і для вас, якщо ви походите з інформатики.
Мартін Бергер

10

Мені невідомі легкі шляхи в теорії типу Мартіна-Лефа. Я думаю, що наступне може послужити введенням.

Однак якщо вас спантеличить питання "що таке тип", я пропоную спочатку зайнятися набагато простішими теоріями типів. Буде працювати будь-яка набрана мова програмування, але, наприклад, Ocaml, F # та Haskell буде особливо корисно. Спростивши трохи, можна сказати, що теорія типів Мартіна-Льофа розширює типи за вищезгаданими мовами двома способами:

  1. З залежними типами . Ви знаходите їх у тамер-формі на різних мовах програмування.
  2. З типами ідентичності. Це головне нововведення Мартіна-Лефа над попередніми теоріями залежного типу.

Ключова ідея залежних типів проста: типи можуть бути параметризовані програмами. Це неможливо (трохи спростивши) у більш звичайних системах набору тексту, таких як згадані вище. Хоча прості, наслідки глибокі: залежні типи піднімають відповідність Кері-Говарда на конструктивну логіку першого порядку. Типи особи трохи незвичні. Якщо / коли вам подобається така мова, як Haskell, ви можете вивчити Agda , що в основному є Haskell з теорією типу Мартина-Лефа. Я відчуваю, що Агда набагато простіше вчитися програмісту, ніж читати згадані вище книги.


Я насправді знаю Haskell. Моя проблема полягає в тому, що будь-який підручник просто розповість вам, як визначити типи, але ніколи не вони є. Здається, це якийсь магічний тег, приєднаний до всіх ваших даних, щоб перевіряючий тип міг вибрати правильну версію поліморфної функції та перевірити, чи не змішуються речі так, що не мають сенсу. Вони все ще залишають відкритим питання про те, що таке тип. Мене це особливо спантеличує, оскільки Voevodsky & co намагається базувати на цьому всю математику, але точного визначення я ніколи не бачив.
dst

2
У Haskell ви вводите судження де - програма, - тип , припускаючи, що вільні змінні вводяться так, як передбачається в середовищі набору тексту . У першому наближенні самі типи Хаскелл - це "краплі", синтаксичні маркери. Точно так само в теорії типу Мартіна-Лефа. Так буває, що типи, «краплі», синтаксичні маркери теорії типу Мартіна-Лефа складніші, ніж у Хаскелла. M α M M ΓΓM:αMαMMΓ
Мартін Бергер

Типи дуже точно визначені в Хаскеллі, в теорії типу Мартіна-Лефа та в теорії типу гомотопії Воєводського. У цьому немає ніякої неоднозначності. Наприклад, у Додатку А.2 наведена система доказів для всіх термінів і типів теорії типу гомотопії. Якщо ви хочете ще більше суворості, можете подивитися на формації Coq або Agda .
Мартін Бергер

2
Можливо, вам потрібно проковтнути, що типи не мають жодної сутності, крім того, як вони визначені. Це не відрізняється, наприклад, від наборів, вони задані аксіомами теорії множин. (Це не зовсім вірно, але все-таки важливо зрозуміти.)
Мартін Бергер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.