Чому двокрапка позначає, що значення належить до типу?


19

Пірс (2002) вводить відносини набору тексту на сторінці 92, написавши:

Відношення введення для арифметичних виразів, написане "t: T", визначається набором правил умовиводу, що присвоюють типи термінам

і виноска говорить, що символ часто використовується замість:. Моє запитання полягає в тому, чому теоретики типу вважають за краще використовувати: над ? Якщо тип T - це набір значень, то має сенс писати tT , нове позначення не потрібно.

Чи схоже це на те, як деякі письменники-цитата вважають за краще 3n2=O(n2) навіть вважають, що це зловживання нотацією, і слід писати 3n2O(n2) ?


7
Присудок членства може бути істинним, або хибним, тоді як декларація набору тексту x : X взагалі інтерпретується як фактичне твердження, яке оголошується істинним, або його правда може бути отримана суто синтаксичними засобами. Протиставляйте це простому числу, для якого не вистачає синтаксичного методу членства. xX x:X
Муса Аль-Хассі

4
@ MusaAl-hassy: це неправильне представлення того, що відбувається. Це не оголошено правдою, оскільки це означатиме, що я можу "оголосити", що " false: int", наприклад. Також не випадок, що судження має бути обов'язково виведене "чисто синтаксичними засобами", наприклад, у випадку внутрішнього типу теорії категорії з сім'ями.
Андрій Бауер


2
Щоб додати до коментаря @ MusaAl-hassy, ​​у теорії обчислювального типу Боб Констебл, Стюарт Аллен, Боб Харпер та ін. використовується звичайно для введення суджень, оскільки це більше схоже на предикат про членство (див. Цю розмову, слайд 25, для прикладу).
xrq

3
Безумовно, також є зловживанням позначенням і справді слід писати λ n .3 n 2O ( λ n . N 2 ) ? (Математики, можливо, вважають за краще n 3 n 2O ( n n 2 ) .)3n2O(n2)λn.3n2O(λn.n2)n3n2O(nn2)
Оскар Каннінгем,

Відповіді:


12

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

Теорія типів виникла на початку 20 століття як підхід до основи математики. Бертран Рассел виявив парадокс в теорії наївних множин, і він працював над теорією типів як спосіб обмеження виразної сили теорії множин, щоб уникнути цього (та будь-якого іншого) парадоксу. За роки Руссел та інші визначили багато теорій типів. В одних теоріях типів типи - це набори з певними властивостями, а в інших - звіра іншого типу.

Зокрема, багато теорій типів мають синтаксичну формулювання. Є правила, завдяки яким річ ​​має тип. Коли правила набору тексту використовуються в якості основи теорії, важливо відрізняти, що кажуть правила набору тексту від того, що можна зробити, застосовуючи додаткові зовнішні знання. Це особливо важливо, якщо правила введення тексту є основою для теорії доказів: теореми, які ґрунтуються на теорії множин з класичною логікою та аксіомою вибору, можуть, а можуть не містити, наприклад, конструктивної логіки. Одним з основоположних документів у цій галузі є церква «S рецептурою з простої теорії типів (1940)

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

За типовим численням сказати, що типи є множинами, це насправді дати семантику типам. Надання числення теоретично-теоретичної семантики не є тривіальним. Наприклад, припустимо, ви визначаєте мову за допомогою функцій. Який набір - це тип функції? Загальні функції визначаються їх графіком, як ми вчили в теорії множин 101. А як щодо часткових функцій? Ви хочете надати всім не закінчуючим функціям однакову семантику? Ви не можете інтерпретувати типи як набори для числення, що дозволяє рекурсивні функції, поки ви не відповіли на це питання. Надання мов програмування або обчислення денотаційної семантики було важкою проблемою на початку 1970-х. Навчальний документ тут - Назустріч математичній семантиці для комп'ютерних мов (1971) поДана Скотт і Крістофер Страчі . У вікі-книзі Haskell добре представлена ​​тема.

Як я писав вище, друга частина відповіді полягає в тому, що навіть якщо вам вдалося надати типам теоретико-семантичну множину, річ зліва від двокрапки не завжди є елементом множини. Значення мають типи, але так само роблять і інші речі, такі як вирази та змінні . Наприклад, вираз на мові програмування має тип, навіть якщо він не закінчується. Ви можете бути готові прирівнювати integerі Z , але (x := 0; while true; do x := x + 1; x)це не є елементом Z .

Я не знаю, коли виникли позначення товстої кишки для типів. Зараз це стандарт у семантиці та поширений у мовах програмування, але ні Руссел, ні Церква не використовували його. Алголь не користувався ним, але сильно натхненний алгольською мовою Паскаль зробив у 1971 році. Я підозрюю, що це був не перший, оскільки багато теоретичних робіт з початку 1970-х використовують позначення, але я не знаю про більш раннє використання. Цікаво, що це було незабаром після уніфікації понять типів від програмування та логіки - як показує Саймон Мартіні в кількох типах мов програмування , те, що до 1960-х років у мовах програмування називалося "типом", походить з просторічної мови використання слова, а не від теорії типів.


37

Основна причина віддати перевагу позначення двокрапки t:T перед відношенням членства tT полягає в тому, що відношення членства може бути оманливим, оскільки типи не є (просто) колекціями .

[ Доповнення: Я мушу зазначити, що теорія історичного типу була написана з використанням . Концепція типу Мартіна-Льофа мала на меті конструктивно зафіксувати набори, і вже Рассел та Уайтхед використовували ϵ для мембранства класу. Було б цікаво простежити момент, коли : став більш поширеним, ніж .]

Тип описує певний вид побудови, тобто як створювати предмети з певною структурою, як їх використовувати та які рівняння щодо них.

Наприклад типу продукту × B є правила вступних , які пояснюють , як зробити впорядковані пари, а також правила елімінації пояснюють , що ми можемо спроектувати перші і другу компоненту з будь-якого елементу A × B . Визначення A × B зовсім НЕ починати зі слів «сукупність всіх ...» і ні робить це сказати де - небудь що - небудь на зразок «всі елементи A × B є пари» (але це слід з визначення , що кожен елемент × B єA×BA×BA×BA×BA×B propositionallyрівна пара). У контрасті, теоретико-множинне визначення X×Y будевказано як «безліч всіх упорядкованих пар ...».

Позначення t:T означає той факт , що t має структуру , описану T .

Тип T не слід плутати з його розширенням , що сукупність всіх об'єктів типу T . Тип не визначається його розширенням, подібно до того, як група не визначається набором її носія. Крім того, може статися, що два типи мають однакове розширення, але відрізняються, наприклад:

  1. Σ(n:N).isprime(n)×iseven(n)×(n>2)
  2. Σ(n:N).isprime(n)×isodd(n)×(n<2)

Розширення обох порожнє, але вони не одного типу.

:at:Tt:UTUtTt

aA¬(aA)aAt:T


1
Андрій, чудова відповідь. Чи знаєте ви історичне походження позначення товстої кишки?
Андреас Росберг

xααϵ

1
gG

2
f:STfSTf(ST)широко використовувався задовго до того, як теорія типів стала популярною.
користувач21820

1
f(ST)STf:ST

5

Бьорн,

Напевно, є більш рання посилання, але з одного боку двокрапка була використана мовою програмування Паскаля:

Перший хіт Google для Pascal


2
Чи не було раніше використовуваних мов програмування :?
Андрій Бауер

@AndrejBauer дійсно, я написав "Мабуть, раніше є посилання, але ...", щоб захистити цей ймовірний факт.
Bjørn Kjos-Hanssen

@AndrejBauer Алголь цього не зробив. Чи :використовувався в теоретичних роботах до 1970-х років?
Жил "ТАК - перестань бути злим"

1
Фортран має, REAL :: xале я не знаю, чи це було раніше Паскаля.
Майкл

1
@Michael Fortran з'явився раніше, ніж Паскаль (ок. 1955 р. Порівняно з 1970 р.), Але я думаю, що цей специфічний синтаксис був введений лише у Fortran 90, тобто набагато пізніше, ніж Паскаль. Дивіться, наприклад, тут fortranwiki.org/fortran/show/Moderising+Old+Fortran
Федеріко Полоні
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.