Система F , также известная как полиморфное лямбда-исчисление ( Жирара – Рейнольдса ) или лямбда-исчисление второго порядка , представляет собой типизированное лямбда-исчисление, которое отличается от просто типизированного лямбда-исчисления введением механизма универсальной квантификации по типам. Таким образом, система F формализует понятие параметрического полиморфизма в языках программирования и формирует теоретическую основу для таких языков, как Haskell и ML . Система F была независимо открыта логиком Жан-Ивом Жираром (1972) и ученым-компьютерщиком. Джон С. Рейнольдс (1974).
В то время как просто типизированное лямбда-исчисление имеет переменные, варьирующиеся по термам, и связующие для них, Система F дополнительно имеет переменные, варьирующиеся по типам , и связующие для них. Например, тот факт, что функция идентичности может иметь любой тип формы A → A, будет формализован в Системе F как суждение
где - переменная типа . Верхний регистр традиционно используется для обозначения функций уровня типа, в отличие от нижнего регистра, который используется для функций уровня значений. (Верхний индекс означает, что привязка x относится к типу ; выражение после двоеточия - это тип предшествующего ему лямбда-выражения.)
Как система переписывания терминов Система F сильно нормализует . Однако вывод типа в Системе F (без явных аннотаций типов) неразрешим. При изоморфизме Карри – Ховарда Система F соответствует фрагменту интуиционистской логики второго порядка, который использует только универсальную квантификацию. Систему F можно рассматривать как часть лямбда-куба вместе с еще более выразительными типизированными лямбда-исчислениями, в том числе с зависимыми типами .
По словам Жирара, буква «F» в системе F выбрана случайно. [1]
Правила набора [ править ]
Правила типизации Системы F - это правила просто типизированного лямбда-исчисления с добавлением следующего:
(1) | (2) |
где являются типами, является переменной типа и в контексте указывает, что она связана. Первое правило - это правило приложения, а второе - правило абстракции.[2] [3]
Логика и предикаты [ править ]
Тип определяется как: , где является тип переменной . Это означает: тип всех функций , которые принимают в качестве входных данных типа α и два выражения типа а, и производят в качестве выходного сигнала выражения типа а (заметит , что мы считаем , что правоассоциативными .)
Следующие два определения булевых значений и используются, расширяя определение логических значений Черча :
(Обратите внимание, что для указанных выше двух функций требуется три, а не два аргумента. Последние два должны быть лямбда-выражениями, но первое должно быть типом. Этот факт отражается в том факте, что тип этих выражений - универсальный квантор привязка α соответствует привязке Λ к альфа в самом лямбда-выражении. Также обратите внимание, что это удобное сокращение для , но это не символ самой Системы F, а скорее «метасимвол». Точно так же и являются также «метасимволы», удобные сокращения, «сборок» Системы F (в смысле Бурбаки); в противном случае, если бы такие функции могли быть названы (в Системе F), тогда не было бы необходимости в лямбда-выражающем аппарате, способном определять функции анонимно, и в комбинаторе с фиксированной точкой , который обходит это ограничение.)
Затем с помощью этих двух термов мы можем определить некоторые логические операторы (которые имеют тип ):
Обратите внимание, что в определениях выше, это аргумент типа для , указывающий, что два других параметра, которые задаются, имеют тип . Как и в кодировках Чёрча, здесь нет необходимости в функции IFTHENELSE, поскольку можно просто использовать термины необработанного типа в качестве функций принятия решений. Однако, если об этом попросят:
Сделаю. Предикат является функцией , которая возвращает -typed значения. Самый фундаментальный предикат - ISZERO, который возвращает тогда и только тогда, когда его аргумент - цифра Черча 0 :
Структуры Системы F [ править ]
Система F позволяет встраивать рекурсивные конструкции естественным образом, что связано с теорией типов Мартина-Лёфа . Абстрактные структуры (S) создаются с помощью конструкторов . Это функции, набранные как:
- .
Рекурсивность проявляется, когда сама появляется внутри одного из типов . Если у вас есть из этих конструкторов, вы можете определить тип как:
Например, натуральные числа можно определить как индуктивный тип данных с конструкторами.
Тип System F, соответствующий этой структуре . Термины этого типа представляют собой печатную версию цифр Чёрча , первые несколько из которых:
- 0: =
- 1: =
- 2: =
- 3: =
Если мы изменим порядок каррированных аргументов ( т. Е. ), То числительное Чёрча для будет функцией, которая принимает функцию f в качестве аргумента и возвращает th степень f . Другими словами, число Чёрча является функцией высшего порядка - оно принимает функцию с одним аргументом f и возвращает другую функцию с одним аргументом.
Использование в языках программирования [ править ]
Версия Системы F, используемая в этой статье, представляет собой явно типизированное исчисление в стиле Чёрча. Информация о типе, содержащаяся в λ-термах, упрощает проверку типов . Джо Уэллс (1994) решил «неловкую открытую проблему», доказав, что проверка типов неразрешима для варианта Системы F в стиле Карри, то есть такого, в котором отсутствуют явные аннотации типов . [4] [5]
Результат Уэллса означает, что вывод типа для Системы F невозможен. Ограничение Системы F, известное как « Hindley – Milner » или просто «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. DOI : 10.1016 / 0304-3975 (86) 90044-7 .
Однако в [3] было показано, что очевидные правила преобразования для этой системы, случайно названной F, сходятся.
- ^ Harper R . «Практические основы языков программирования, второе издание» (PDF) . С. 142–3.
- ^ Geuvers H, Nordström B, Dowek G. "Доказательства программ и формализация математики" (PDF) . п. 51.
- Перейти ↑ Wells, JB (2005-01-20). «Исследовательские интересы Джо Уэллса» . Университет Хериот-Ватт.
- Перейти ↑ Wells, JB (1999). «Типизация и проверка типов в Системе F эквивалентны и неразрешимы». Анна. Pure Appl. Логика . 98 (1–3): 111–156. DOI : 10.1016 / S0168-0072 (98) 00047-5 .«Проект Чёрча: типизация и проверка типов в {S} системе {F} эквивалентны и неразрешимы» . 29 сентября 2007 года Архивировано из оригинала 29 сентября 2007 года.
- ^ "Система FC: ограничения и принуждения равенства" . gitlab.haskell.org . Проверено 8 июля 2019 .
- ^ «Примечания к выпуску OCaml 4.00.1» . ocaml.org . 2012-10-05 . Проверено 23 сентября 2019 .
- ^ "Справочное руководство по OCaml 4.09" . 2012-09-11 . Проверено 23 сентября 2019 .
- ^ a b 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. DOI : 10.1016 / S0049-237X (08) 70843-7 .
- Жирар, Жан-Ив (1972), Interprétation fonctionnelle et élimination des coupures de l'arithmétique d'ordre supérieur (докторская диссертация) (на французском языке), Université Paris 7.
- Рейнольдс, Джон (1974). К теории структуры типов .
- Жирар, Жан-Ив; Лафон, Ив; Тейлор, Пол (1989). Доказательства и типы . Издательство Кембриджского университета. ISBN 978-0-521-37181-0.
- Уэллс, Дж. Б. (1994). «Типизация и проверка типов в лямбда-исчислении второго порядка эквивалентны и неразрешимы». Материалы 9-го ежегодного симпозиума IEEE по логике в компьютерных науках (LICS) . С. 176–185. DOI : 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.
Внешние ссылки [ править ]
В Викиучебнике есть книга по теме: Haskell |
- Краткое изложение системы F Франка Бинара.
- Система F ш : рабочая лошадь современных компиляторов по Грег Моррисетт