Тип - це властивість обчислень. Це те, що ви пишете в правій частині двокрапки.
Дозвольте мені детальніше зупинитися на цьому. Зауважте, що термінологія не зовсім стандартна: деякі статті чи книги можуть використовувати різні слова для певних понять.
Термін представляє собою елемент з абстрактного синтаксису , який призначений для представлення обчислень. Інтуїтивно це дерево розбору. Формально це скінченне дерево, де вузли належать до якогось алфавіту. Нетипізований підрахунок визначає синтаксис термінів. Наприклад, (типове) обчислення лямбда містить терміни (написані , тощо), побудовані з трьох типів вузлів:НMN
- змінні, значення aity 0 (їх численна колекція), написані , тощо;уxy
- застосування змінної, arity 1 (її численна колекція, з біекцією до змінних), написаної тощо;λx.M
- застосування, арності 2, написаний .MN
Термін - це синтаксична конструкція. А семантика відноситься терміни для обчислень. Існує багато типів семантики, найпоширеніша - оперативна (описує, як терміни можуть бути перетворені в інші терміни) або денотаційна (описує терміни перетворенням в інший простір, зазвичай побудований з теорії множин).
Тип є властивістю термінів. Система типів для нетипізованого обчислення описує, які терміни мають, які типи. Математично, в основі, система типів - це відношення між термінами і типами. Точніше, типова система - це сімейство таких відносин, що індексується контекстами - як правило, контекст забезпечує принаймні типи змінних (тобто контекст є частковою функцією від змінних до типів), таким чином, що термін може мати лише тип у контекстах, які надають тип для всіх його вільних змінних. Який тип математичного об’єкта залежить, залежить від системи типів.
Деякі типи систем описуються типами як множини, використовуючи такі поняття теорії множин, як перетин, об'єднання та розуміння. Це має перевагу, спираючись на знайомі математичні основи. Обмеженням цього підходу є те, що він не дозволяє міркувати про еквівалентні типи.
Багато типів системи описують самі типи як терміни в обчисленні типів. Залежно від типової системи, це можуть бути однакові терміни або різні терміни. Я буду використовувати базовий термін фрази для позначення терміна обчислення, який описує обчислення. Наприклад, просто набране лямбда-числення використовує такі типи числення (письмові тощо):τ
- базові типи, аритус 0 (їх кінцева чи численна колекція), написані , тощо;БAB
- функція, близько 2, написана .τ0→τ1
Співвідношення між термінами та типами, яке визначає просто набране лямбда-числення, зазвичай визначається шляхом введення правил . Правила введення тексту - не єдиний спосіб визначення типової системи, але вони є загальними. Вони добре працюють для систем композиційного типу, тобто систем типів, де тип (и) терміна будується з типів підтермін. Правила введення визначають типову систему індуктивно: кожне правило введення тексту - це аксіома, яка стверджує, що для будь-якого примірника формул над горизонтальним правилом формула нижче правила також є правдивою. Див. Як читати правила набору тексту? для отримання детальної інформації. Чи існує повне набране лямбда числення Тюрінга? може також представляти інтерес.
Для просто введеного лямбдального числення, судження про введення тексту означає, що має тип в контексті . Я опустив формальне визначення контекстів.
Γ⊢M:τMτΓ
x:τ∈ΓΓ⊢x:τ(Γ)Γ,x:τ0⊢M:τ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(A→B)→A→B(→I)(→E)(Γ)
Можна інтерпретувати типи просто набраного лямбдального числення як множини. Це означає надання денотаційної семантики для типів. Хороша денотаційна семантика для базових термінів призначала б кожному базовому терміну член позначення всіх його типів.
Інтуїціоністська теорія типів (також відома як теорія типу Мартіна-Лефа) є більш складною, що просто набрала числення лямбда, оскільки вона має в елементах числення багато інших елементів (а також додає до базових термінів кілька констант). Але основні принципи однакові. Важливою особливістю теорії типів Мартіна-Лефа є те, що типи можуть містити базові терміни (вони залежні типи ): Всесвіт базових термінів і Всесвіт типів однакові, хоча їх можна розрізнити простими синтаксичними правилами (зазвичай відомими як сортування, тобто віднесення сортів до термінів в теорії переписування).
Існують системи типів, які йдуть далі і повністю змішують типи та базові терміни, щоб не було різниці між ними. Кажуть, що такі системи мають вищий клас . У таких обчисленнях, типи мають типів - тип може з'явитися на лівій стороні . Аналіз побудови - парадигма залежних типів вищого порядку. Лямбда - куба (також відома як куб Barendregt) системи типу класифікує в термінах чи дозволяють вони умови залежать від типів ( поліморфізм - деякі базові терміни містять типи як подтерми), типів, залежать від точки ( в залежності від типу), або типів залежати на типи ( оператори типів - обчислення типів має поняття обчислення).:
Більшість типів систем отримали теоретико-семантичну семантику, щоб зв'язати їх із звичайними основами математики.
Як пов’язані мови програмування та основи математики? і
Чим відрізняються смислові та синтаксичні погляди типів функцій? тут можуть бути цікаві. Також була проведена робота з використання теорії типів як основи математики - теорія множин є історичною основою, але це не єдиний можливий вибір. Теорія типу гомотопії є важливою віхою в цьому напрямку: вона описує семантику навмисної інтуїтивістської теорії типу з точки зору теорії гомотопії та будує теорію множин в цьому рамках.
Я рекомендую книги Бенджаміна Пірса Типи та мови програмування та теми з питань виду та мови програмування . Вони доступні будь-яким студентам без будь-яких інших умов, крім базового ознайомлення з формальними математичними міркуваннями. TAPL описує системи багатьох типів; залежні типи є предметом глави 2 ATTAPL.