Введение в теорию типов Мартина-Лёфа


36

Что было бы лучшим введением в идеи Пера Мартина-Лёфса о теории типов? Я посмотрел некоторые лекции из летней школы Орегона, но все еще озадачен следующим вопросом:

Что такое тип?

Я знаю, что такое набор, так как вы можете определить их по обычным аксиомам ZF, и они имеют очень интуитивную конкретную модель; просто подумай о корзине, наполненной вещами. Тем не менее, я еще не видел разумного определения типа, и мне было интересно, есть ли какой-нибудь источник, который бы использовал эту идею для пустышки.


4
Книга HoTT содержит введение, в котором сравниваются типы и наборы, возможно, это поможет, см. Раздел 1.1 на homotopytypetheory.org/book . Но что еще более важно, вы хотите, чтобы мы непосредственно внесли в вашу голову правильное представление о типах, тогда как для наборов вы будете рады описать их аксиомами, не настаивая на том, чтобы «что они есть на самом деле». Ну, типы описываются правилами вывода для типов. И у них есть очень интуитивная модель бетона, вы знаете, с грелкой, заполненной блоками Lego. Все, что вы можете из них построить, относится к типу.
Андрей Бауэр

Я думаю, что отвлечься от теории множеств - это самая большая проблема. Однако я не уверен, насколько хороша аналогия с Lego. Какие блоки? Если x: A и y: A, как правило, я не могу ничего построить из них, если A не является рекурсивным типом стрелки. Конечно , я часто смешивать вещи разного типа , чтобы построить что - то третьего типа ...
ДСТ

4
Блоки Lego являются конструкторами типов. Так, например, из x:A и y:A вы можете построить и и , а также и . Вы также можете создавать новые типы, например и и т. Д. У людей разные представления о типах. Наборы это один из них, но сырой. Типы также похожи на топологические пространства. Они также похожи на структурированные данные в программировании. Они также как ω( х , х ) я п л ( х ) г е л е х λ г : . x I d ( x , y ) z : A I d ( x , z )(x,y)(x,x)inl(x)relfxλz:A.ИксId(Икс,Y)ΣZ:Aяd(Икс,Z)ω-группоидов. В этом вся прелесть, богатство возможностей. Выберите одну возможность и работайте с ней.
Андрей Бауэр

Ответы:


31

Тип - это свойство вычислений. Это то, что вы пишете на правой стороне двоеточия.

Позвольте мне остановиться на этом подробнее. Обратите внимание, что терминология не является полностью стандартной: некоторые статьи или книги могут использовать разные слова для определенных понятий.

Термин представляет собой элемент из абстрактного синтаксиса , который предназначен для представления вычислений. Интуитивно понятно, что это дерево разбора. Формально, это конечное дерево, где узлы принадлежат некоторому алфавиту. Нетипизированное исчисление определяет синтаксис для терминов. Например, (нетипизированное) лямбда-исчисление содержит термины (записанные , N и т. Д.), Построенные из трех типов узлов:MN

  • переменные, имеющие арность 0 (их перечисляемая коллекция), написанные , y и т.д .;ИксY
  • применение переменной арности 1 (ее счетная коллекция с биекцией к переменным), записанная как и т.д .;λИкс,M
  • заявка, arity 2, написано .MN

Термин является синтаксической конструкцией. А семантика относится термины для вычислений. Существует много типов семантики, наиболее распространенной из которых является операционная (описывающая, как термины могут быть преобразованы в другие термины) или денотационная (описывающая термины путем преобразования в другое пространство, обычно построенное из теории множеств).

Тип является свойством терминов. Система типов для нетипизированного исчисления описывает, какие термины имеют какие типы. Математически, в основе, система типов - это связь между терминами и типами. Точнее говоря, система типов - это семейство таких отношений, индексируемых контекстами - обычно контекст предоставляет как минимум типы для переменных (т. Е. Контекст является частичной функцией от переменных к типам), так что термин может иметь только тип в контекстах, которые предоставляют тип для всех своих свободных переменных. Какой тип математического объекта является типом, зависит от системы типов.

Некоторые системы типов описываются с типами как множества, используя понятия теории множеств, такие как пересечение, объединение и понимание. Это имеет преимущество, опираясь на знакомые математические основы. Ограничением этого подхода является то, что он не позволяет рассуждать об эквивалентных типах.

Многие системы типов описывают сами типы как термины в исчислении типов. В зависимости от системы типов это могут быть одни и те же термины или разные термины. Я буду использовать термин «базовая фраза» для обозначения термина в исчислении, описывающего вычисления. Например, в простом типе лямбда-исчисления используется следующее исчисление типов (записанное и т. Д.):τ

  • базовые типы, арность 0 (их конечная или счетная коллекция), написанные , B и т. д .;AВ
  • функция арности 2, записанная .τ0τ1

Отношение между терминами и типами, которое определяет простейшее лямбда-исчисление, обычно определяется правилами набора текста . Правила набора текста - не единственный способ определить систему типов, но они распространены. Они хорошо работают для систем композиционных типов, т. Е. Систем типов, в которых тип (ы) термина построен из типов подтермов. Правила типизации определяют систему типов индуктивно: каждое правило типизации является аксиомой, которая гласит, что для любого экземпляра формул над горизонтальным правилом формула под правилом также верна. См. Как читать правила набора текста? Больше подробностей. Существует ли полное лямбда-исчисление по Тьюрингу? также может представлять интерес.

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

Икс:τΓΓИкс:τ(Γ)Γ,Икс:τ0M:τ1ΓλИкс,M:τ0τ1(я)ΓM:τ0τ1ΓN:τ0ΓMN:τ1(Е)

Например, если и B являются базовыми типами, то λ x . λ y . ИксAВ имеет тип ( A B ) A B в любом контексте (снизу вверх, примените ( I ) дважды, затем ( E ) и, наконец, ( Γ ) на каждой ветви).λИкс,λY,ИксY(AВ)AВ(я)(Е)(Γ)

Типы лямбда-исчисления с простыми типами можно интерпретировать как множества. Это равносильно предоставлению денотационной семантики для типов. Хорошая денотационная семантика для базовых терминов будет назначать каждому базовому термину член обозначения всех его типов.

Интуиционистская теория типов (также известная как теория типов Мартина-Лёфа) более сложна, чем просто типизированное лямбда-исчисление, так как в ней есть гораздо больше элементов в исчислении типов (а также добавляет несколько констант к базовым слагаемым). Но основные принципы одинаковы. Важной особенностью теории типов Мартина-Лёфа является то, что типы могут содержать базовые термины (они являются зависимыми типами ): универсум базовых терминов и универсум типов одинаковы, хотя их можно отличить с помощью простых синтаксических правил (обычно известных как сортировка, т. е. присвоение сортов терминам, в теории переписывания).

Существуют системы типов, которые идут дальше и полностью смешивают типы и базовые термины, так что нет различия между ними. Такие системы типов называются более высокого порядка . В таких исчислениях, типы имеют типов - тип может появиться на левой стороне . Исчисление строительства парадигма зависимых видов высших порядков. Лямбда - куба (также известная как куб Barendregt) системы типа классифицирует в терминах позволяют ли они условия зависят от типов ( полиморфизм - некоторые базовые термины содержат типы как подтермы) типов зависеть от точки ( в зависимости от типа), или типов зависеть на типах ( операторы типов - в исчислении типов есть понятие вычисления).:

Большинству систем типов была дана теоретико-множественная семантика, чтобы связать их с обычными основами математики. Как связаны языки программирования и основы математики? и В чем разница между семантическим и синтаксическим представлениями типов функций? может быть интересным здесь Была также работа по использованию теории типов в качестве основы математики - теория множеств является исторической основой, но это не единственный возможный выбор. Теория гомотопических типов является важной вехой в этом направлении: она описывает семантику интенциональной интуиционистской теории типов в терминах теории гомотопий и строит теорию множеств в этих рамках.

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


+1 за TAPL. Из этой книги я смог немного узнать о типах.
Парень кодер

Я не уверен, что ATTAPL является хорошей отправной точкой для изучения зависимых типов.
Мартин Бергер

15

Возможно, лучший вопрос для тех, кто приходит из теории множеств и разбирается в том, чем отличаются теория множеств и теория типов Мартина-Лёфа, - подумать о том, что такое множества. Ваша интуиция о теории множеств и основах математики будет заражена несомненными теоретико-множественными предположениями, которые вы принимаете как должное. Увы, теория типа Мартина-Лёфа не разделяет эти предположения.

Вопреки общепринятому пониманию, теория множеств - это теория двух отношений: равенство и множественность , а не просто множественность. И эти два отношения строятся в существенно разных фазах.

  1. Мы строим логику первого порядка как теорию равенства произвольных вещей (а не только множеств). Логика первого порядка использует неформальное понятие доказательства. Само доказательство концепции формально не выразимо только в логике первого порядка.

  2. Затем мы строим теорию множеств поверх логики первого порядка как теорию множеств и принадлежность множества.

  3. Принадлежность к множеству и равенство затем связаны аксиомой экстенсиональности, которая гласит, что два набора в точности равны, когда они имеют одинаковые члены.

  4. Наконец, неформальная концепция доказательства из (1) получает фактическую рационализацию в виде определенных множеств (деревьев доказательств).

Важно понимать, что понятие доказательства , таким образом, является гражданином второго сорта в теории множеств.

Эта установка отлично работает для обычной математики малого / среднего размера, но, поскольку мы сейчас занимаемся крупномасштабными доказательствами, такими как классификация всех конечных простых групп или проверка нетривиальных компьютерных программ, она не работает, потому что это не ведет к легкой механизации.

TT

λ


Это было чрезвычайно полезно. Я думаю, что одна из главных проблем любого, кто приходит в конструктивную математику, - это отучиться от многих вещей.
ДСТ

Я согласен. Требуется время, чтобы отучиться от непризнанных теоретико-множественных предположений. Многое помогло мне в программировании Agda, и оно может сработать и для вас, если вы работаете в области компьютерных наук.
Мартин Бергер

10

Я не знаю легких путей в теорию типов Мартина-Лёфа. Я думаю, что следующее может служить введением.

Однако, если вы озадачены вопросом «что такое тип», я предлагаю сначала перейти к гораздо более простым теориям типов. Подойдет любой типизированный язык программирования, но, например, Ocaml, F # и Haskell были бы особенно полезны. Проще говоря, можно сказать, что теория типов Мартина-Лёфа расширяет типы вышеупомянутых языков двумя способами:

  1. С зависимыми типами . Вы найдете их в форме укротителя на разных языках программирования.
  2. С типами идентичности. Это главное нововведение Мартина-Лёфа по сравнению с предыдущими теориями зависимого типа.

Основная идея зависимых типов проста: типы могут параметризоваться программами. Это невозможно (немного упрощая) в более традиционных системах печати, таких как упомянутые выше. Несмотря на простоту, последствия глубоки: зависимые типы поднимают соответствие Карри-Говарда конструктивной логике первого порядка. Типы идентичности немного необычны. Если / когда вам комфортно с таким языком, как Haskell, вы можете изучать Agda , который в основном Haskell с теорией типов Мартина-Лёфа. Я чувствую, что для программиста Agda гораздо легче выучить, чем читать книги, упомянутые выше.


Я на самом деле знаю Haskell. Моя проблема в том, что любой урок просто скажет вам, как определять типы, но никогда не будет тем, чем они являются на самом деле. Кажется, это просто магический тег, прикрепленный ко всем вашим данным, так что средство проверки типов может выбрать правильную версию полиморфной функции и проверить, что все не смешано способами, которые не имеют смысла. Они все еще оставляют открытым вопрос о том, что это за тип. Я особенно озадачен этим, так как Voevodsky & co пытается основать всю математику на этом, но я никогда не видел точного определения.
ДСТ

2
ΓM:αMαMMΓ

Типы очень точно определены в Хаскеле, в теории типов Мартина-Лёфа и в теории гомотопических типов Воеводского. В этом нет никакой двусмысленности. Например, Приложение A.2 дает систему доказательств для всех членов и типов теории гомотопических типов. Если вы хотите еще большей строгости, посмотрите на формализации Coq или Agda .
Мартин Бергер

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