Система F - System F
Система F, также известный как (Жирар – Рейнольдс) полиморфное лямбда-исчисление или лямбда-исчисление второго порядка, это типизированное лямбда-исчисление это отличается от просто типизированное лямбда-исчисление за счет внедрения механизма универсальная количественная оценка над типами. Таким образом, система F формализует понятие параметрический полиморфизм в языки программирования, и формирует теоретическую основу для таких языков, как Haskell и ML. Система F была открыта независимо логик Жан-Ив Жирар (1972) и специалист в области информатики Джон С. Рейнольдс (1974).
В то время как просто типизированное лямбда-исчисление имеет переменные в диапазоне терминов и связующие для них, Система F дополнительно имеет переменные в диапазоне типы, и связующие к ним. Например, тот факт, что функция идентичности может иметь любой тип формы A → A, будет формализован в Системе F как суждение
куда это переменная типа. Верхний регистр традиционно используется для обозначения функций уровня типа, в отличие от строчных букв который используется для функций уровня значений. (Надстрочный означает, что граница Икс относится к типу ; выражение после двоеточия является типом предшествующего лямбда-выражения.)
Как система переписывания терминов, Система F сильно нормализующий. Однако вывод типа в Системе F (без явных аннотаций типов) неразрешим. Под Изоморфизм Карри – Ховарда, Система F соответствует фрагменту второго порядка интуиционистская логика который использует только универсальную количественную оценку. Систему F можно рассматривать как часть лямбда-куб, вместе с еще более выразительными типизированными лямбда-исчислениями, в том числе с зависимые типы.
По словам Жирара, буква «F» в Система F был выбран случайно.[1]
Правила набора
Правила типизации Системы F - это правила просто типизированного лямбда-исчисления с добавлением следующего:
(1) | (2) |
куда типы, это переменная типа, а в контексте указывает, что связан. Первое правило - это правило приложения, а второе - правило абстракции.[2][3]
Логика и предикаты
В тип определяется как:, куда это переменная типа. Это означает: - это тип всех функций, которые принимают на входе тип α и два выражения типа α и производят на выходе выражение типа α (обратите внимание, что мы рассматриваем быть правоассоциативный.)
Следующие два определения логических значений и используются, расширяя определение Церковные логические значения:
(Обратите внимание, что для указанных выше двух функций требуется три - не два - аргумента. Последние два должны быть лямбда-выражениями, но первое должно быть типом. Этот факт отражается в том, что тип этих выражений ; универсальный квантор, связывающий α, соответствует Λ, связывающему альфа в самом лямбда-выражении. Также обратите внимание, что удобное сокращение для , но это не символ самой Системы F, а скорее «метасимвол». Так же, и также являются «метасимволами», удобными сокращениями «сборок» Системы F (в Чувство Бурбаки ); в противном случае, если бы такие функции могли быть названы (в Системе F), тогда не было бы необходимости в лямбда-выражающем аппарате, способном определять функции анонимно и для комбинатор с фиксированной точкой, что позволяет обойти это ограничение.)
Затем с этими двумя -термы, мы можем определить некоторые логические операторы (которые имеют тип ):
Обратите внимание, что в определениях выше, аргумент типа для , указывая, что два других параметра, которые передаются относятся к типу . Как и в церковных кодировках, нет необходимости в IFTHENELSE работать так, как можно просто использовать сырые -типированные термины как функции принятия решений. Однако, если об этом попросят:
сделаю. предикат это функция, которая возвращает -типированное значение. Самый фундаментальный предикат - это ISZERO который возвращается тогда и только тогда, когда его аргументом является Церковная цифра 0:
Структуры системы F
Система F позволяет встраивать рекурсивные конструкции естественным образом, как и в Теория типов Мартина-Лёфа. Абстрактные структуры (S) создаются с использованием конструкторы. Это функции, набранные как:
- .
Рекурсивность проявляется при сам появляется в одном из типов . Если у вас есть из этих конструкторов вы можете определить тип в качестве:
Например, натуральные числа можно определить как индуктивный тип данных. с конструкторами
Тип системы F, соответствующий этой структуре:. Термины этого типа представляют собой типизированную версию Церковные цифры, первые из которых:
- 0 :=
- 1 :=
- 2 :=
- 3 :=
Если мы изменим порядок каррированных аргументов (т.е. ), то цифра Чёрча для это функция, которая принимает функцию ж в качестве аргумента и возвращает th сила ж. То есть цифра Чёрча - это функция высшего порядка - принимает функцию с одним аргументом ж, и возвращает другую функцию с одним аргументом.
Использование в языках программирования
Версия Системы F, используемая в этой статье, представляет собой явно типизированное исчисление в стиле Чёрча. Информация о типе, содержащаяся в λ-термах, делает проверка типов простой. Джо Уэллс (1994) разрешил «неприятную открытую проблему», доказав, что проверка типов неразрешимый для варианта системы F в стиле Карри, то есть такой, в которой отсутствуют явные аннотации ввода.[4][5]
Результат Уэллса означает, что вывод типа для Системы F невозможно. Ограничение Системы F, известное как "Хиндли-Милнер "или просто" HM "имеет простой алгоритм вывода типов и используется во многих статически типизированный функциональные языки программирования Такие как Haskell 98 и ML семья. Со временем, когда ограничения систем типов в стиле HM стали очевидными, языки неуклонно переходили к более выразительной логике для своих систем типов. GHC компилятор Haskell, выходит за рамки HM (по состоянию на 2008 г.) и использует System F, расширенную несинтаксическим равенством типов;[6] не-HM особенности в OCaml система типов включает GADT.[7][8]
Изоморфизм Жирара-Рейнольдса
Во втором порядке интуиционистская логика полиморфное лямбда-исчисление второго порядка (F2) было открыто Жираром (1972) и независимо Рейнольдсом (1974).[9] Жирар доказал Теорема представления: что в интуиционистской логике предикатов второго порядка (P2) функции от натуральных чисел до натуральных чисел, которые могут быть доказаны как полные, образуют проекцию из P2 в F2.[9] Рейнольдс доказал Теорема об абстракции: что каждый член в F2 удовлетворяет логическому отношению, которое может быть вложено в логические отношения P2.[9] Рейнольдс доказал, что проекция Жирара с последующим вложением Рейнольдса образуют тождество, т. Е. Изоморфизм Жирара-Рейнольдса.[9]
Система Fω
Система F соответствует первой оси Барендрегта лямбда-куб, Система Fω или полиморфное лямбда-исчисление высшего порядка совмещает первую ось (полиморфизм) со второй осью (операторы типа ); это другая, более сложная система.
Система Fω можно определить индуктивно на семействе систем, где индукция основана на виды разрешено в каждой системе:
- виды разрешений:
- (вид типов) и
- куда и (вид функций от типов к типам, где тип аргумента имеет более низкий порядок)
В пределе можно определить систему быть
То есть Fω - это система, которая позволяет выполнять функции от типов к типам, где аргумент (и результат) может иметь любой порядок.
Обратите внимание, что хотя Fω не накладывает ограничений на порядок аргументов в этих отображениях, это ограничивает вселенная аргументов для этих отображений: они должны быть типами, а не значениями. Система Fω не позволяет отображать значения в типы (Зависимые типы ), хотя он позволяет отображать значения в значения ( абстракция), отображения типов в значения ( абстракция, иногда пишется ) и отображения типов в типы ( абстракция на уровне типов)
Смотрите также
- Экзистенциальные типы - экзистенциально определенные аналоги универсальных типов
- Система F<: - расширяет систему F подтипами
- Система U
Примечания
- ^ Жирар, Жан-Ив (1986). «Система F переменных типов, пятнадцать лет спустя». Теоретическая информатика. 45: 160. Дои:10.1016/0304-3975(86)90044-7.
Однако в [3] было показано, что очевидные правила преобразования для этой системы, случайно названной F, сходятся.
- ^ Харпер Р. "Практические основы языков программирования, второе издание" (PDF). С. 142–3.
- ^ Геверс Х., Нордстрём Б., Довек Г. «Доказательства программ и формализация математики» (PDF). п. 51.
- ^ Уэллс, Дж. Б. (20 января 2005 г.). «Исследовательские интересы Джо Уэллса». Университет Хериот-Ватт.
- ^ Уэллс, Дж. Б. (1999). «Типизация и проверка типов в Системе F эквивалентны и неразрешимы». Анна. Pure Appl. Логика. 98 (1–3): 111–156. Дои:10.1016 / S0168-0072 (98) 00047-5.«Проект Чёрча: типизация и проверка типов в {S} ystem {F} эквивалентны и неразрешимы». 29 сентября 2007 г. Архивировано с оригинал 29 сентября 2007 г.
- ^ «Система FC: ограничения и принуждения равенства». gitlab.haskell.org. Получено 2019-07-08.
- ^ «Примечания к выпуску OCaml 4.00.1». ocaml.org. 2012-10-05. Получено 2019-09-23.
- ^ "Справочное руководство по OCaml 4.09". 2012-09-11. Получено 2019-09-23.
- ^ а б c d Филип Вадлер (2005) Изоморфизм Жирара-Рейнольдса (второе издание) Эдинбургский университет, Языки программирования и основы в Эдинбурге
Рекомендации
- Жирар, Жан-Ив (1971). "Une Extension de l'Interpretation de l'Interpretation of Gödel à l'Analyse, et son Application à l'Élimination des Coupures dans l'Analyse et la Théorie des Types". Материалы Второго симпозиума по скандинавской логике. Амстердам. С. 63–92. Дои:10.1016 / S0049-237X (08) 70843-7.
- Жирар, Жан-Ив (1972), Функция интерпретации и выявление купюр в искусстве арифметики высшего качества (Докторская диссертация) (на французском языке), Université Paris 7CS1 maint: ref = harv (связь).
- Рейнольдс, Джон (1974). К теории структуры типов.
- Жирар, Жан-Ив; Лафон, Ив; Тейлор, Пол (1989). Доказательства и типы. Издательство Кембриджского университета. ISBN 978-0-521-37181-0.
- Уэллс, Дж. Б. (1994). «Типизация и проверка типов в лямбда-исчислении второго порядка эквивалентны и неразрешимы». Материалы 9-го ежегодного IEEE Симпозиум по логике в компьютерных науках (LICS). С. 176–185. Дои:10.1109 / LICS.1994.316068. ISBN 0-8186-6310-3. Версия PostScript
дальнейшее чтение
- Пирс, Бенджамин (2002). "V Полиморфизм, глава 23. Универсальные типы, глава 25. Реализация системы F на ML". Типы и языки программирования. MIT Press. С. 339–362, 381–388. ISBN 0-262-16209-1.