Тип - это свойство вычислений. Это то, что вы пишете на правой стороне двоеточия.
Позвольте мне остановиться на этом подробнее. Обратите внимание, что терминология не является полностью стандартной: некоторые статьи или книги могут использовать разные слова для определенных понятий.
Термин представляет собой элемент из абстрактного синтаксиса , который предназначен для представления вычислений. Интуитивно понятно, что это дерево разбора. Формально, это конечное дерево, где узлы принадлежат некоторому алфавиту. Нетипизированное исчисление определяет синтаксис для терминов. Например, (нетипизированное) лямбда-исчисление содержит термины (записанные , N и т. Д.), Построенные из трех типов узлов:MN
- переменные, имеющие арность 0 (их перечисляемая коллекция), написанные , y и т.д .;ИксY
- применение переменной арности 1 (ее счетная коллекция с биекцией к переменным), записанная как и т.д .;λ x . M
- заявка, arity 2, написано .MN
Термин является синтаксической конструкцией. А семантика относится термины для вычислений. Существует много типов семантики, наиболее распространенной из которых является операционная (описывающая, как термины могут быть преобразованы в другие термины) или денотационная (описывающая термины путем преобразования в другое пространство, обычно построенное из теории множеств).
Тип является свойством терминов. Система типов для нетипизированного исчисления описывает, какие термины имеют какие типы. Математически, в основе, система типов - это связь между терминами и типами. Точнее говоря, система типов - это семейство таких отношений, индексируемых контекстами - обычно контекст предоставляет как минимум типы для переменных (т. Е. Контекст является частичной функцией от переменных к типам), так что термин может иметь только тип в контекстах, которые предоставляют тип для всех своих свободных переменных. Какой тип математического объекта является типом, зависит от системы типов.
Некоторые системы типов описываются с типами как множества, используя понятия теории множеств, такие как пересечение, объединение и понимание. Это имеет преимущество, опираясь на знакомые математические основы. Ограничением этого подхода является то, что он не позволяет рассуждать об эквивалентных типах.
Многие системы типов описывают сами типы как термины в исчислении типов. В зависимости от системы типов это могут быть одни и те же термины или разные термины. Я буду использовать термин «базовая фраза» для обозначения термина в исчислении, описывающего вычисления. Например, в простом типе лямбда-исчисления используется следующее исчисление типов (записанное и т. Д.):τ
- базовые типы, арность 0 (их конечная или счетная коллекция), написанные , B и т. д .;AВ
- функция арности 2, записанная .τ0→ τ1
Отношение между терминами и типами, которое определяет простейшее лямбда-исчисление, обычно определяется правилами набора текста . Правила набора текста - не единственный способ определить систему типов, но они распространены. Они хорошо работают для систем композиционных типов, т. Е. Систем типов, в которых тип (ы) термина построен из типов подтермов. Правила типизации определяют систему типов индуктивно: каждое правило типизации является аксиомой, которая гласит, что для любого экземпляра формул над горизонтальным правилом формула под правилом также верна. См. Как читать правила набора текста? Больше подробностей. Существует ли полное лямбда-исчисление по Тьюрингу? также может представлять интерес.
Для простого типизированного лямбда - исчисления, то типирование суждение означает , что M имеет тип т в контексте Г . Я опустил формальное определение контекстов.
x : τ ∈ ΓΓ⊢M:τMτΓ
х :τ∈ ΓΓ ⊢ x : τ( Γ )Γ , x : τ0⊢M: τ1Γ ⊢ λ x .M: τ0→ τ1( →I)Γ ⊢M: τ0→ τ1Γ ⊢N: τ0Γ ⊢MN: τ1( →E)
Например, если и B являются базовыми типами, то λ x . λ y . ИксAВ имеет тип ( A → B ) → A → B в любом контексте (снизу вверх, примените ( → I ) дважды, затем ( → E ) и, наконец, ( Γ ) на каждой ветви).λ x . λy,xY( A → B ) → A → B( → Я)( → E)( Γ )
Типы лямбда-исчисления с простыми типами можно интерпретировать как множества. Это равносильно предоставлению денотационной семантики для типов. Хорошая денотационная семантика для базовых терминов будет назначать каждому базовому термину член обозначения всех его типов.
Интуиционистская теория типов (также известная как теория типов Мартина-Лёфа) более сложна, чем просто типизированное лямбда-исчисление, так как в ней есть гораздо больше элементов в исчислении типов (а также добавляет несколько констант к базовым слагаемым). Но основные принципы одинаковы. Важной особенностью теории типов Мартина-Лёфа является то, что типы могут содержать базовые термины (они являются зависимыми типами ): универсум базовых терминов и универсум типов одинаковы, хотя их можно отличить с помощью простых синтаксических правил (обычно известных как сортировка, т. е. присвоение сортов терминам, в теории переписывания).
Существуют системы типов, которые идут дальше и полностью смешивают типы и базовые термины, так что нет различия между ними. Такие системы типов называются более высокого порядка . В таких исчислениях, типы имеют типов - тип может появиться на левой стороне . Исчисление строительства парадигма зависимых видов высших порядков. Лямбда - куба (также известная как куб Barendregt) системы типа классифицирует в терминах позволяют ли они условия зависят от типов ( полиморфизм - некоторые базовые термины содержат типы как подтермы) типов зависеть от точки ( в зависимости от типа), или типов зависеть на типах ( операторы типов - в исчислении типов есть понятие вычисления).:
Большинству систем типов была дана теоретико-множественная семантика, чтобы связать их с обычными основами математики.
Как связаны языки программирования и основы математики? и В
чем разница между семантическим и синтаксическим представлениями типов функций? может быть интересным здесь Была также работа по использованию теории типов в качестве основы математики - теория множеств является исторической основой, но это не единственный возможный выбор. Теория гомотопических типов является важной вехой в этом направлении: она описывает семантику интенциональной интуиционистской теории типов в терминах теории гомотопий и строит теорию множеств в этих рамках.
Я рекомендую книги Бенджамина Пирса « Типы и языки программирования» и « Достижения» по темам «Типы и языки программирования» . Они доступны любому студенту без каких-либо предварительных условий, кроме базового знания формальных математических рассуждений. TAPL описывает много типов систем; зависимые типы являются предметом главы 2 ATTAPL.