Interested Article - Система F

Система F ( полиморфное лямбда-исчисление , система , типизированное лямбда-исчисление второго порядка ) — система типизированного лямбда-исчисления , отличающаяся от просто типизированной системы наличием механизма универсальной квантификации над типами. Эту систему разработал в 1972 году Жан-Ив Жирар в контексте теории доказательств в логике. Независимо от него подобную систему предложил в 1974 году Джон Рейнольдс . Система F позволяет формализовать концепцию параметрического полиморфизма в языках программирования и служит теоретической основой для таких языков программирования как Haskell и ML .

Система F допускает конструирование термов, зависящих от типов. Технически это достигается через механизм абстрагирования терма по типу, что в результате даёт новый терм. Традиционно для такой абстракции используют символ большой лямбды . Например, взяв терм типа и абстрагируясь по переменной типа , получаем терм . Этот терм представляет собой функцию из типов в термы. Применяя эту функцию к различным типам, мы будем получать термы с идентичной структурой, но разными типами:

— терм типа ;
— терм типа .

Видно, что терм обладает полиморфным поведением, то есть задаёт общий интерфейс для различных типов данных. В Системе F этому терму приписывается тип . Квантор всеобщности в типе подчёркивает возможность подстановки вместо переменной типа любого допустимого типа.

Формальное описание

Синтаксис типов

Типы Системы F конструируются из набора переменных типа с помощью операторов и . По традиции для переменных типа используют греческие буквы. Правила формирования типов таковы:

  • ( Переменная типа ) Если — переменная типа, то — это тип;
  • ( Стрелочный тип ) Если и являются типами, то — это тип;
  • ( Универсальный тип ) Если является переменной типа, а — типом, то — это тип.

Внешние скобки часто опускают, оператор считают правоассоциативным, а действие оператора продолжающимся вправо насколько это возможно. Например, — стандартное сокращение для .

Синтаксис термов

Термы Системы F конструируются из набора термовых переменных ( , , и т.д.) по следующим правилам

  • ( Переменная ) Если — переменная, то — это терм;
  • ( Абстракция ) Если является переменной, — типом, а — термом, то — это терм;
  • ( Применение ) Если и являются термами, то — это терм;
  • ( Универсальная абстракция ) Если является переменной типа, а — термом, то — это терм;
  • ( Универсальное применение ) Если является термом, а — типом, то — это терм.

Внешние скобки часто опускают, оба сорта применения считают левоассоциативными, а действие абстракций — продолжающимся вправо насколько это возможно.

Различают две версии просто типизированной системы. Если, как в приведённых выше правилах, термовые переменные в лямбда-абстракции аннотируются типами, то систему называют типизированной по Чёрчу . Если же правило абстракции заменить на

  • ( Абстракция по Карри ) Если является переменной, а — термом, то — это терм,

и отбросить два последних правила, то систему называют типизированной по Карри . Фактически, термы системы, типизированной по Карри, те же, что и в бестиповом лямбда-исчислении.

Правила редукции

Помимо стандартного для лямбда-исчисления правила -редукции

в системе F в стиле Чёрча вводится дополнительное правило,

,

позволяющее вычислять применение терма к типу через механизм подстановки типа вместо переменной типа.

Контексты типизации и утверждение типизации

Контекстом, как и в просто типизированном лямбда-исчислении , называется множество утверждений о приписывании типов различным переменным, разделённых запятой

В контекст можно добавить «свежую» для этого контекста переменную: если — допустимый контекст, не содержащий переменной , а — тип, то — тоже допустимый контекст.

Общий вид утверждения о типизации таков:

Это читается следующим образом: в контексте терм имеет тип .

Правила типизации по Чёрчу

В Системе F, типизированной по Чёрчу, приписывание типов термам осуществляется в соответствии со следующими правилами:

( Начальное правило ) Если переменная присутствует с типом в контексте , то в этом контексте имеет тип . В виде правила вывода

( Правило введения ) Если в некотором контексте, расширенном утверждением, что имеет тип , терм имеет тип , то в упомянутом контексте (без ), лямбда-абстракция имеет тип . В виде правила вывода

( Правило удаления ) Если в некотором контексте терм имеет тип , а терм имеет тип , то применение имеет тип . В виде правила вывода

( Правило введения ) Если в некотором контексте терм имеет тип , то в этом контексте терм имеет тип . В виде правила вывода

Это правило требует оговорки: переменная типа не должна встречаться в утверждениях типизации контекста .

( Правило удаления ) Если в некотором контексте терм имеет тип , и — это тип, то в этом контексте терм имеет тип . В виде правила вывода

Правила типизации по Карри

В Системе F, типизированной по Карри, приписывание типов термам осуществляется в соответствии со следующими правилами:

( Начальное правило ) Если переменная присутствует с типом в контексте , то в этом контексте имеет тип . В виде правила вывода

( Правило введения ) Если в некотором контексте, расширенном утверждением, что имеет тип , терм имеет тип , то в упомянутом контексте (без ), лямбда-абстракция имеет тип . В виде правила вывода

( Правило удаления ) Если в некотором контексте терм имеет тип , а терм имеет тип , то применение имеет тип . В виде правила вывода

( Правило введения ) Если в некотором контексте терм имеет тип , то в этом контексте этому терму может быть приписан и тип . В виде правила вывода

Это правило требует оговорки: переменная типа не должна встречаться в утверждениях типизации контекста .

( Правило удаления ) Если в некотором контексте терм имеет тип , и — это тип, то в этом контексте этому терму может быть приписан и тип . В виде правила вывода

Пример. По начальному правилу:

Применим правило удаления , взяв в качестве тип

Теперь по правилу удаления имеем возможность применить терм сам к себе

и, наконец, по правилу введения

Это пример терма, типизируемого в Системе F, но не в просто типизированной системе .

Представление типов данных

Система F обладает достаточными выразительными средствами, для того чтобы напрямую реализовать многие типы данных, используемые в языках программирования. Будем работать в версии Чёрча системы F.

Пустой тип. Тип

необитаем в системе F, то есть в ней отсутствуют термы с таким типом.

Единичный тип. У типа

в системе F имеется единственный находящийся в нормальной форме обитатель — терм

.

Булев тип. В системе F задается так:

.

У этого типа ровно два обитателя, отождествляемых с двумя булевыми константами

Конструкция условного оператора

Эта функция удовлетворяет естественным требованиям

и

для произвольного типа и произвольных и . В этом легко убедиться, раскрыв определения и выполнив -редукции.

Тип произведения. Для произвольных типов и тип их декартова произведения

населён парой

для каждых и . Проекции пары задаются функциями

Эти функции удовлетворяют естественным требованиям и .

Тип суммы. Для произвольных типов и тип их суммы

населён либо термом типа , либо термом типа , в зависимости от применённого конструктора

Здесь , . Функция, осуществляющая разбор случаев (сопоставление с образцом), имеет вид

Эта функция удовлетворяет следующим естественным требованиям

и

для произвольных типов , и и произвольных термов и .

Числа Чёрча. Тип натуральных чисел в системе F

населён бесконечным количеством различных элементов, получаемых посредством двух конструкторов и :

Натуральное число может быть получено -кратным применением второго конструктора к первому или, эквивалентно, представлено термом

Свойства

  • Просто типизированная система обладает свойством типовой безопасности: при -редукциях тип лямбда-терма остаётся неизменным, а сама типизация не мешает продвижению вычислений.
  • В своей диссертации Жан-Ив Жирар показал , что Система F обладает свойством сильной нормализации: любой допустимый терм за конечное число -редукций приводится к единственной нормальной форме.
  • Система F является системой, поскольку переменная типа , связываемая квантором всеобщности при определении универсального типа, может замещаться самим определяемым объектом. Например, терм единичного типа может быть применён к собственному типу, порождая терм типа . Как показал Джо Уэллс в 1994 году , задача вывода типов для версии Карри Системы F неразрешима. Поэтому при практической реализации языков программирования обычно используют ограниченные, предикативные версии полиморфизма: пренекс-полиморфизм (полиморфизм в стиле ML ), полиморфизм ранга 2 и т.п. В случае пренекс-полиморфизма областью определения переменных типа служат только типы без кванторов. В этих системах задача вывода типов разрешима, такой вывод базируется на алгоритме Хиндли — Милнера .
  • Соответствие Карри — Ховарда связывает Систему F с минимальной интуиционистской , формулы которой построены из пропозициональных переменных с помощью импликации и универсальной квантификации по высказываниям. При этом значения (истина), (ложь), связки (отрицание), (конъюнкция) и (дизъюнкция), а также (квантор существования) могут быть определены так

Отметим, что соответствие Карри — Ховарда ставит в соответствие истине — единичный тип, лжи — пустой тип, конъюнкции — произведение типов, а дизъюнкции — их сумму.

Примечания

  1. Girard, Jean-Yves. Interprétation fonctionnelle et élimination des coupures de l’arithmétique d’ordre supérieur : Ph.D. thesis. — Université Paris 7, 1972.
  2. John C. Reynolds. . — 1974. 31 октября 2014 года.
  3. Wells J. B. // Proceedings of the 9th Annual IEEE Symposium on Logic in Computer Science (LICS). — 1994. — С. 176–185 . 22 февраля 2007 года.

Литература

  • Pierce, Benjamin C. Types and Programming Languages. — MIT Press , 2002. — ISBN 0-262-16209-1 .
    • Перевод на русский язык: Пирс Б. Типы в языках программирования. — , 2012. — 680 с. — ISBN 978-5-7913-0082-9 .
  • Barendregt, Henk. // Handbook of Logic in Computer Science. — Oxford University Press, 1992. — Т. II . — С. 117-309 .
  • Jean-Yves Girard, Paul Taylor, Yves Lafont. . — Cambridge University Press , 1989. — ISBN 0 521 37181 3 .
Источник —

Same as Система F