Система F

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

Система F допускает конструирование термов, зависящих от типов. Технически это достигается через механизм абстрагирования терма по типу, что в результате даёт новый терм. Традиционно для такой абстракции используют символ большой лямбды Λ {\displaystyle \Lambda } . Например, взяв терм λ x α .   x {\displaystyle \lambda x^{\alpha }.~x} типа α α {\displaystyle \alpha \to \alpha } и абстрагируясь по переменной типа α {\displaystyle \alpha } , получаем терм Λ α .   λ x α .   x {\displaystyle \Lambda \alpha .~\lambda x^{\alpha }.~x} . Этот терм представляет собой функцию из типов в термы. Применяя эту функцию к различным типам, мы будем получать термы с идентичной структурой, но разными типами:

( Λ α .   λ x α .   x )   Bool   β   λ x Bool .   x {\displaystyle (\Lambda \alpha .~\lambda x^{\alpha }.~x)~{\texttt {Bool}}\ \to _{\beta }\ \lambda x^{\texttt {Bool}}.~x} — терм типа Bool Bool {\displaystyle {\texttt {Bool}}\to {\texttt {Bool}}} ;
( Λ α .   λ x α .   x )   Nat   β   λ x Nat .   x {\displaystyle (\Lambda \alpha .~\lambda x^{\alpha }.~x)~{\texttt {Nat}}\ \to _{\beta }\ \lambda x^{\texttt {Nat}}.~x} — терм типа Nat Nat {\displaystyle {\texttt {Nat}}\to {\texttt {Nat}}} .

Видно, что терм Λ α .   λ x α .   x {\displaystyle \Lambda \alpha .~\lambda x^{\alpha }.~x} обладает полиморфным поведением, то есть задаёт общий интерфейс для различных типов данных. В Системе F этому терму приписывается тип α .   α α {\displaystyle \forall \alpha .~\alpha \to \alpha } . Квантор всеобщности в типе подчёркивает возможность подстановки вместо переменной типа α {\displaystyle \alpha } любого допустимого типа.

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

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

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

  • (Переменная типа) Если α {\displaystyle \alpha } — переменная типа, то α {\displaystyle \alpha } — это тип;
  • (Стрелочный тип) Если A {\displaystyle A} и B {\displaystyle B} являются типами, то ( A B ) {\displaystyle (A\to B)} — это тип;
  • (Универсальный тип) Если α {\displaystyle \alpha } является переменной типа, а B {\displaystyle B} — типом, то ( α .   B ) {\displaystyle (\forall \alpha .~B)} — это тип.

Внешние скобки часто опускают, оператор {\displaystyle \rightarrow } считают правоассоциативным, а действие оператора {\displaystyle \forall } продолжающимся вправо насколько это возможно. Например, α .   β .   α β α {\displaystyle \forall \alpha .~\forall \beta .~\alpha \to \beta \to \alpha } — стандартное сокращение для ( α .   ( β .   ( α ( β α ) ) ) ) {\displaystyle (\forall \alpha .~(\forall \beta .~(\alpha \to (\beta \to \alpha ))))} .

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

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

  • (Переменная) Если x {\displaystyle x} — переменная, то x {\displaystyle x} — это терм;
  • (Абстракция) Если x {\displaystyle x} является переменной, A {\displaystyle A} — типом, а M {\displaystyle M} — термом, то ( λ x A .   M ) {\displaystyle (\lambda x^{A}.~M)} — это терм;
  • (Применение) Если M {\displaystyle M} и N {\displaystyle N} являются термами, то ( M   N ) {\displaystyle (M~N)} — это терм;
  • (Универсальная абстракция) Если α {\displaystyle \alpha } является переменной типа, а M {\displaystyle M} — термом, то ( Λ α .   M ) {\displaystyle (\Lambda \alpha .~M)} — это терм;
  • (Универсальное применение) Если M {\displaystyle M} является термом, а A {\displaystyle A} — типом, то ( M   A ) {\displaystyle (M~A)} — это терм.

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

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

  • (Абстракция по Карри) Если x {\displaystyle x} является переменной, а M {\displaystyle M} — термом, то ( λ x .   M ) {\displaystyle (\lambda x.~M)} — это терм,

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

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

Помимо стандартного для лямбда-исчисления правила β {\displaystyle \beta } -редукции

( λ a A .   M )   N   β   M [ a := N ] {\displaystyle (\lambda a^{A}.~M)~N\ \to _{\beta }\ M[a:=N]}

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

( Λ α .   M )   A   β   M [ α := A ] {\displaystyle (\Lambda \alpha .~M)~A\ \to _{\beta }\ M[\alpha :=A]} ,

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

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

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

Γ = x 1 : A 1 , x 2 : A 1 , , x n : A n {\displaystyle \Gamma =x_{1}\!:\!A_{1},x_{2}\!:\!A_{1},\ldots ,x_{n}\!:\!A_{n}}

В контекст можно добавить «свежую» для этого контекста переменную: если Γ {\displaystyle \Gamma } — допустимый контекст, не содержащий переменной x {\displaystyle x} , а B {\displaystyle B} — тип, то Γ , x : B {\displaystyle \Gamma ,x\!:\!B} — тоже допустимый контекст.

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

Γ M : A {\displaystyle \Gamma \vdash M\!:\!A}

Это читается следующим образом: в контексте Γ {\displaystyle \Gamma } терм M {\displaystyle M} имеет тип A {\displaystyle A} .

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

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

(Начальное правило) Если переменная x {\displaystyle x} присутствует с типом A {\displaystyle A} в контексте Γ {\displaystyle \Gamma } , то в этом контексте x {\displaystyle x} имеет тип A {\displaystyle A} . В виде правила вывода

x : A Γ Γ x : A {\displaystyle {x\!:\!A\in \Gamma } \over {\Gamma \vdash x\!:\!A}}

(Правило введения {\displaystyle \rightarrow } ) Если в некотором контексте, расширенном утверждением, что a {\displaystyle a} имеет тип A {\displaystyle A} , терм M {\displaystyle M} имеет тип B {\displaystyle B} , то в упомянутом контексте (без a {\displaystyle a} ), лямбда-абстракция λ a A .   M {\displaystyle \lambda a^{A}.~M} имеет тип A B {\displaystyle A\to B} . В виде правила вывода

Γ , a : A M : B Γ ( λ a A .   M ) : ( A B ) {\displaystyle {\Gamma ,a\!:\!A\vdash M\!:\!B} \over {\Gamma \vdash (\lambda a^{A}.~M)\!:\!(A\to B)}}

(Правило удаления {\displaystyle \rightarrow } ) Если в некотором контексте терм M {\displaystyle M} имеет тип A B {\displaystyle A\to B} , а терм N {\displaystyle N} имеет тип A {\displaystyle A} , то применение M   N {\displaystyle M~N} имеет тип B {\displaystyle B} . В виде правила вывода

Γ M : ( A B ) Γ N : A Γ ( M   N ) : B {\displaystyle {\Gamma \vdash M\!:\!(A\to B)\quad \Gamma \vdash N\!:\!A} \over {\Gamma \vdash (M~N)\!:\!B}}

(Правило введения {\displaystyle \forall } ) Если в некотором контексте терм M {\displaystyle M} имеет тип A {\displaystyle A} , то в этом контексте терм Λ α .   M {\displaystyle \Lambda \alpha .~M} имеет тип α .   A {\displaystyle \forall \alpha .~A} . В виде правила вывода

Γ M : A Γ ( Λ α .   M ) : ( α .   A ) {\displaystyle {\Gamma \vdash M\!:\!A} \over {\Gamma \vdash (\Lambda \alpha .~M)\!:\!(\forall \alpha .~A)}}

Это правило требует оговорки: переменная типа α {\displaystyle \alpha } не должна встречаться в утверждениях типизации контекста Γ {\displaystyle \Gamma } .

(Правило удаления {\displaystyle \forall } ) Если в некотором контексте терм M {\displaystyle M} имеет тип α .   A {\displaystyle \forall \alpha .~A} , и B {\displaystyle B} — это тип, то в этом контексте терм M   B {\displaystyle M~B} имеет тип A [ α := B ] {\displaystyle A[\alpha :=B]} . В виде правила вывода

Γ M : ( α .   A ) Γ ( M   B ) : ( A [ α := B ] ) {\displaystyle {\Gamma \vdash M\!:\!(\forall \alpha .~A)} \over {\Gamma \vdash (M~B)\!:\!(A[\alpha :=B])}}

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

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

(Начальное правило) Если переменная x {\displaystyle x} присутствует с типом A {\displaystyle A} в контексте Γ {\displaystyle \Gamma } , то в этом контексте x {\displaystyle x} имеет тип A {\displaystyle A} . В виде правила вывода

x : A Γ Γ x : A {\displaystyle {x\!:\!A\in \Gamma } \over {\Gamma \vdash x\!:\!A}}

(Правило введения {\displaystyle \rightarrow } ) Если в некотором контексте, расширенном утверждением, что a {\displaystyle a} имеет тип A {\displaystyle A} , терм M {\displaystyle M} имеет тип B {\displaystyle B} , то в упомянутом контексте (без a {\displaystyle a} ), лямбда-абстракция λ a .   M {\displaystyle \lambda a.~M} имеет тип A B {\displaystyle A\to B} . В виде правила вывода

Γ , a : A M : B Γ ( λ a .   M ) : ( A B ) {\displaystyle {\Gamma ,a\!:\!A\vdash M\!:\!B} \over {\Gamma \vdash (\lambda a.~M)\!:\!(A\to B)}}

(Правило удаления {\displaystyle \rightarrow } ) Если в некотором контексте терм M {\displaystyle M} имеет тип A B {\displaystyle A\to B} , а терм N {\displaystyle N} имеет тип A {\displaystyle A} , то применение M   N {\displaystyle M~N} имеет тип B {\displaystyle B} . В виде правила вывода

Γ M : ( A B ) Γ N : A Γ ( M   N ) : B {\displaystyle {\Gamma \vdash M\!:\!(A\to B)\quad \Gamma \vdash N\!:\!A} \over {\Gamma \vdash (M~N)\!:\!B}}

(Правило введения {\displaystyle \forall } ) Если в некотором контексте терм M {\displaystyle M} имеет тип A {\displaystyle A} , то в этом контексте этому терму M {\displaystyle M} может быть приписан и тип α .   A {\displaystyle \forall \alpha .~A} . В виде правила вывода

Γ M : A Γ M : ( α .   A ) {\displaystyle {\Gamma \vdash M\!:\!A} \over {\Gamma \vdash M\!:\!(\forall \alpha .~A)}}

Это правило требует оговорки: переменная типа α {\displaystyle \alpha } не должна встречаться в утверждениях типизации контекста Γ {\displaystyle \Gamma } .

(Правило удаления {\displaystyle \forall } ) Если в некотором контексте терм M {\displaystyle M} имеет тип α .   A {\displaystyle \forall \alpha .~A} , и B {\displaystyle B} — это тип, то в этом контексте этому терму M {\displaystyle M} может быть приписан и тип A [ α := B ] {\displaystyle A[\alpha :=B]} . В виде правила вывода

Γ M : ( α .   A ) Γ M : ( A [ α := B ] ) {\displaystyle {\Gamma \vdash M\!:\!(\forall \alpha .~A)} \over {\Gamma \vdash M\!:\!(A[\alpha :=B])}}

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

x : ( α .   α α ) x : ( α .   α α ) {\displaystyle x\!:\!(\forall \alpha .~\alpha \to \alpha )\vdash x\!:\!(\forall \alpha .~\alpha \to \alpha )}

Применим правило удаления {\displaystyle \forall } , взяв в качестве B {\displaystyle B} тип α .   α α {\displaystyle \forall \alpha .~\alpha \to \alpha }

x : ( α .   α α ) x : ( α .   α α ) ( α .   α α ) {\displaystyle x\!:\!(\forall \alpha .~\alpha \to \alpha )\vdash x\!:\!(\forall \alpha .~\alpha \to \alpha )\to (\forall \alpha .~\alpha \to \alpha )}

Теперь по правилу удаления {\displaystyle \rightarrow } имеем возможность применить терм x {\displaystyle x} сам к себе

x : ( α .   α α ) ( x   x ) : ( α .   α α ) {\displaystyle x\!:\!(\forall \alpha .~\alpha \to \alpha )\vdash (x~x)\!:\!(\forall \alpha .~\alpha \to \alpha )}

и, наконец, по правилу введения {\displaystyle \rightarrow }

( λ x .   x   x ) : ( α .   α α ) ( α .   α α ) {\displaystyle \vdash (\lambda x.~x~x)\!:\!(\forall \alpha .~\alpha \to \alpha )\to (\forall \alpha .~\alpha \to \alpha )}

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

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

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

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

    α .   α {\displaystyle \bot \ \equiv \ \forall \alpha .~\alpha }

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

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

    α .   α α {\displaystyle \top \ \equiv \ \forall \alpha .~\alpha \to \alpha }

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

i d     Λ α .   λ x α .   x {\displaystyle {\mathtt {id}}\ \equiv \ \Lambda \alpha .~\lambda x^{\alpha }.~x} .

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

B o o l     α .   α α α {\displaystyle {\mathtt {Bool}}\ \equiv \ \forall \alpha .~\alpha \to \alpha \to \alpha } .

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

t r u e     Λ α .   λ x α .   λ y α .   x {\displaystyle {\mathtt {true}}\ \equiv \ \Lambda \alpha .~\lambda x^{\alpha }.~\lambda y^{\alpha }.~x}
f a l s e     Λ α .   λ x α .   λ y α .   y {\displaystyle {\mathtt {false}}\ \equiv \ \Lambda \alpha .~\lambda x^{\alpha }.~\lambda y^{\alpha }.~y}

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

i f T h e n E l s e     Λ α .   λ b B o o l .   λ x α .   λ y α .   b α x y {\displaystyle {\mathtt {ifThenElse}}\ \equiv \ \Lambda \alpha .~\lambda b^{\mathtt {Bool}}.~\lambda x^{\alpha }.~\lambda y^{\alpha }.~b\,\alpha \,x\,y}

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

i f T h e n E l s e A t r u e M N = M {\displaystyle {\mathtt {ifThenElse}}\,A\,{\mathtt {true}}\,M\,N=M}

и

i f T h e n E l s e A f a l s e M N = N {\displaystyle {\mathtt {ifThenElse}}\,A\,{\mathtt {false}}\,M\,N=N}

для произвольного типа A {\displaystyle A} и произвольных M : A {\displaystyle M\!:\!A} и N : A {\displaystyle N\!:\!A} . В этом легко убедиться, раскрыв определения и выполнив β {\displaystyle \beta } -редукции.

Тип произведения. Для произвольных типов A {\displaystyle A} и B {\displaystyle B} тип их декартова произведения

A × B     α .   ( A B α ) α {\displaystyle A\times B~\equiv ~\forall \alpha .~(A\to B\to \alpha )\to \alpha }

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

M ; N     Λ α .   λ f ( A B α ) .   f   M   N {\displaystyle \langle M;N\rangle ~\equiv ~\Lambda \alpha .~\lambda f^{(A\to B\to \alpha )}.~f~M~N}

для каждых M : A {\displaystyle M\!:\!A} и N : B {\displaystyle N\!:\!B} . Проекции пары задаются функциями

f s t     Λ α .   Λ β .   λ p α × β .   p α ( λ x α . λ y β . x )   :   α .   β . α × β α {\displaystyle {\mathtt {fst}}\ \equiv \ \Lambda \alpha .~\Lambda \beta .~\lambda p^{\alpha \times \beta }.~p\,\alpha \,(\lambda x^{\alpha }.\,\lambda y^{\beta }.\,x)~:~\forall \alpha .~\forall \beta .\,\alpha \times \beta \to \alpha }
s n d     Λ α .   Λ β .   λ p α × β .   p β ( λ x α . λ y β . y )   :   α .   β . α × β β {\displaystyle {\mathtt {snd}}\ \equiv \ \Lambda \alpha .~\Lambda \beta .~\lambda p^{\alpha \times \beta }.~p\,\beta \,(\lambda x^{\alpha }.\,\lambda y^{\beta }.\,y)~:~\forall \alpha .~\forall \beta .\,\alpha \times \beta \to \beta }

Эти функции удовлетворяют естественным требованиям f s t A B M ; N = M {\displaystyle {\mathtt {fst}}\,A\,B\,\langle M;N\rangle =M} и s n d A B M ; N = N {\displaystyle {\mathtt {snd}}\,A\,B\,\langle M;N\rangle =N} .

Тип суммы. Для произвольных типов A {\displaystyle A} и B {\displaystyle B} тип их суммы

A + B     α .   ( A α ) ( B α ) α {\displaystyle A+B~\equiv ~\forall \alpha .~(A\to \alpha )\to (B\to \alpha )\to \alpha }

населён либо термом типа A {\displaystyle A} , либо термом типа B {\displaystyle B} , в зависимости от применённого конструктора

i n j L M     Λ α . λ f A α . λ g B α . f M {\displaystyle {\mathtt {injL}}\,M~\equiv ~\Lambda \alpha .\,\lambda f^{A\to \alpha }.\,\lambda g^{B\to \alpha }.\,f\,M}
i n j R N     Λ α . λ f A α . λ g B α . g N {\displaystyle {\mathtt {injR}}\,N~\equiv ~\Lambda \alpha .\,\lambda f^{A\to \alpha }.\,\lambda g^{B\to \alpha }.\,g\,N}

Здесь M : A {\displaystyle M\!:\!A} , N : B {\displaystyle N\!:\!B} . Функция, осуществляющая разбор случаев (сопоставление с образцом), имеет вид

m a t c h     Λ α . Λ β . Λ γ . λ s α + β . λ f α γ . λ g β γ . s γ f g   :   α .   β .   γ .   α + β ( α γ ) ( β γ ) γ {\displaystyle {\mathtt {match}}~\equiv ~\Lambda \alpha .\,\Lambda \beta .\,\Lambda \gamma .\,\lambda s^{\alpha +\beta }.\,\lambda f^{\alpha \to \gamma }.\,\lambda g^{\beta \to \gamma }.\,s\,\gamma \,f\,g~:~\forall \alpha .~\forall \beta .~\forall \gamma .~\alpha +\beta \to (\alpha \to \gamma )\to (\beta \to \gamma )\to \gamma }

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

m a t c h A B C ( i n j L M ) F G = F M {\displaystyle {\mathtt {match}}\,A\,B\,C\,({\mathtt {injL}}\,M)\,F\,G=F\,M}

и

m a t c h A B C ( i n j R N ) F G = G N {\displaystyle {\mathtt {match}}\,A\,B\,C\,({\mathtt {injR}}\,N)\,F\,G=G\,N}

для произвольных типов A {\displaystyle A} , B {\displaystyle B} и C {\displaystyle C} и произвольных термов F : A C {\displaystyle F\!:\!A\to C} и G : B C {\displaystyle G\!:\!B\to C} .

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

N a t     α .   α ( α α ) α {\displaystyle {\mathtt {Nat}}\ \equiv \ \forall \alpha .~\alpha \to (\alpha \to \alpha )\to \alpha }

населён бесконечным количеством различных элементов, получаемых посредством двух конструкторов z e r o : N a t {\displaystyle {\mathtt {zero}}\!:\!{\mathtt {Nat}}} и s u c c : N a t N a t {\displaystyle {\mathtt {succ}}\!:\!{\mathtt {Nat}}\to {\mathtt {Nat}}} :

z e r o     Λ α . λ z α . λ s α α . z {\displaystyle {\mathtt {zero}}\ \equiv \ \Lambda \alpha .\,\lambda z^{\alpha }.\,\lambda s^{\alpha \to \alpha }.\,z}
s u c c     λ n N a t . Λ α . λ z α . λ s α α . s ( n α z s ) {\displaystyle {\mathtt {succ}}\ \equiv \ \lambda n^{\mathtt {Nat}}.\,\Lambda \alpha .\,\lambda z^{\alpha }.\,\lambda s^{\alpha \to \alpha }.\,s\,(n\,\alpha \,z\,s)}

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

n ¯     Λ α . λ z α . λ s α α . s ( s ( s ( s n z ) ) ) {\displaystyle {\overline {n}}\ \equiv \ \Lambda \alpha .\,\lambda z^{\alpha }.\,\lambda s^{\alpha \rightarrow \alpha }.\,\underbrace {s(s(s\ldots (s} _{n}\,z)\ldots ))}

Свойства

  • Просто типизированная система обладает свойством типовой безопасности: при β {\displaystyle \beta } -редукциях тип лямбда-терма остаётся неизменным, а сама типизация не мешает продвижению вычислений.
  • В своей диссертации Жан-Ив Жирар показал[1], что Система F обладает свойством сильной нормализации: любой допустимый терм за конечное число β {\displaystyle \beta } -редукций приводится к единственной нормальной форме.
  • Система F является импредикативной[англ.] системой, поскольку переменная типа, связываемая квантором всеобщности при определении универсального типа, может замещаться самим определяемым объектом. Например, терм id {\displaystyle {\texttt {id}}} единичного типа α .   α α {\displaystyle \top \equiv \forall \alpha .~\alpha \to \alpha } может быть применён к собственному типу, порождая терм типа {\displaystyle \top \to \top } . Как показал Джо Уэллс в 1994 году[3], задача вывода типов для версии Карри Системы F неразрешима. Поэтому при практической реализации языков программирования обычно используют ограниченные, предикативные версии полиморфизма: пренекс-полиморфизм (полиморфизм в стиле ML), полиморфизм ранга 2 и т.п. В случае пренекс-полиморфизма областью определения переменных типа служат только типы без кванторов. В этих системах задача вывода типов разрешима, такой вывод базируется на алгоритме Хиндли — Милнера.
  • Соответствие Карри — Ховарда связывает Систему F с минимальной интуиционистской логикой высказываний второго порядка[англ.], формулы которой построены из пропозициональных переменных с помощью импликации и универсальной квантификации по высказываниям. При этом значения {\displaystyle \top } (истина), {\displaystyle \bot } (ложь), связки ¬ {\displaystyle \lnot } (отрицание), {\displaystyle \land } (конъюнкция) и {\displaystyle \lor } (дизъюнкция), а также {\displaystyle \exists } (квантор существования) могут быть определены так
    α . α α {\displaystyle \top ~\equiv ~\forall \alpha .\,\alpha \to \alpha }
    α . α {\displaystyle \bot ~\equiv ~\forall \alpha .\,\alpha }
¬ A     A {\displaystyle \lnot A~\equiv ~A\to \bot }
A B     α . ( A B α ) α {\displaystyle A\land B~\equiv ~\forall \alpha .\,(A\to B\to \alpha )\to \alpha }
A B     α . ( A α ) ( B α ) α {\displaystyle A\lor B~\equiv ~\forall \alpha .\,(A\to \alpha )\to (B\to \alpha )\to \alpha }
α . M [ α ]     γ . ( α . M [ α ] γ ) γ {\displaystyle \exists \alpha .\,M[\alpha ]~\equiv ~\forall \gamma .\,(\forall \alpha .\,M[\alpha ]\to \gamma )\to \gamma }

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

Примечания

  1. 1 2 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. Towards a Theory of Type Structure. — 1974. Архивировано 31 октября 2014 года.
  3. Wells J. B. Typability and type checking in the second-order lambda-calculus are equivalent and undecidable // 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. Lambda Calculi with Types // Handbook of Logic in Computer Science. — Oxford University Press, 1992. — Т. II. — С. 117-309.
  • Jean-Yves Girard, Paul Taylor, Yves Lafont. Proofs and Types. — Cambridge University Press, 1989. — ISBN 0 521 37181 3.