Оскільки те, що знаходиться праворуч від товстої кишки, не обов'язково є набором, а те, що знаходиться зліва від товстої кишки, не обов'язково є членом цього набору.
Теорія типів виникла на початку 20 століття як підхід до основи математики. Бертран Рассел виявив парадокс в теорії наївних множин, і він працював над теорією типів як спосіб обмеження виразної сили теорії множин, щоб уникнути цього (та будь-якого іншого) парадоксу. За роки Руссел та інші визначили багато теорій типів. В одних теоріях типів типи - це набори з певними властивостями, а в інших - звіра іншого типу.
Зокрема, багато теорій типів мають синтаксичну формулювання. Є правила, завдяки яким річ має тип. Коли правила набору тексту використовуються в якості основи теорії, важливо відрізняти, що кажуть правила набору тексту від того, що можна зробити, застосовуючи додаткові зовнішні знання. Це особливо важливо, якщо правила введення тексту є основою для теорії доказів: теореми, які ґрунтуються на теорії множин з класичною логікою та аксіомою вибору, можуть, а можуть не містити, наприклад, конструктивної логіки. Одним з основоположних документів у цій галузі є церква «S рецептурою з простої теорії типів (1940)
Можливо, найбільш очевидним є розрізнення між типами та множинами, що основне правило для множин, а саме те, що два множини рівні, якщо вони мають однакові елементи, як правило, не застосовується для типів. Дивіться відповідь Андрея Бауера тут і його відповідь на пов'язане питання на кілька прикладів. Цей другий потік має інші відповіді, які варто прочитати.
За типовим численням сказати, що типи є множинами, це насправді дати семантику типам. Надання числення теоретично-теоретичної семантики не є тривіальним. Наприклад, припустимо, ви визначаєте мову за допомогою функцій. Який набір - це тип функції? Загальні функції визначаються їх графіком, як ми вчили в теорії множин 101. А як щодо часткових функцій? Ви хочете надати всім не закінчуючим функціям однакову семантику? Ви не можете інтерпретувати типи як набори для числення, що дозволяє рекурсивні функції, поки ви не відповіли на це питання. Надання мов програмування або обчислення денотаційної семантики було важкою проблемою на початку 1970-х. Навчальний документ тут - Назустріч математичній семантиці для комп'ютерних мов (1971) поДана Скотт і Крістофер Страчі . У вікі-книзі Haskell добре представлена тема.
Як я писав вище, друга частина відповіді полягає в тому, що навіть якщо вам вдалося надати типам теоретико-семантичну множину, річ зліва від двокрапки не завжди є елементом множини. Значення мають типи, але так само роблять і інші речі, такі як вирази та змінні . Наприклад, вираз на мові програмування має тип, навіть якщо він не закінчується. Ви можете бути готові прирівнювати integer
і Z , але (x := 0; while true; do x := x + 1; x)
це не є елементом Z .
Я не знаю, коли виникли позначення товстої кишки для типів. Зараз це стандарт у семантиці та поширений у мовах програмування, але ні Руссел, ні Церква не використовували його. Алголь не користувався ним, але сильно натхненний алгольською мовою Паскаль зробив у 1971 році. Я підозрюю, що це був не перший, оскільки багато теоретичних робіт з початку 1970-х використовують позначення, але я не знаю про більш раннє використання. Цікаво, що це було незабаром після уніфікації понять типів від програмування та логіки - як показує Саймон Мартіні в кількох типах мов програмування , те, що до 1960-х років у мовах програмування називалося "типом", походить з просторічної мови використання слова, а не від теорії типів.