Система F

Систе́ма F (полімо́рфне ля́мбда-чи́слення, систе́ма λ 2 {\displaystyle \lambda 2} , типізо́ване ля́мбда-чи́слення дру́гого поря́дку) — система типізованого лямбда-числення, що відрізняється від просто типізованої системи наявністю механізму універсальної квантифікації над типами. Цю систему розробив 1972 року Жан-Ів Жирар[en][1] у контексті теорії доведень у логіці. Незалежно від нього подібну систему запропонував 1974 року Джон Рейнольдс[en][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} пирсутня в контексті Γ {\displaystyle \Gamma } з типом A {\displaystyle A} , то в цьому контексті 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} в контексті Γ {\displaystyle \Gamma } присутня з типом A {\displaystyle A} , то в цьому контексті 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 } -редукціях тип лямбда-терму залишається незмінним, а сама типізація не заважає перебігу обчислень.
  • У своїй дисертації Жан-Ів Жирар[en] показав[1], що система F має властивість сильної нормалізації: будь-який допустимий терм за скінченне число β {\displaystyle \beta } -редукцій зводиться до єдиної нормальної форми.
  • Система F є імпредикативною системою, оскільки змінна типу, що зв'язується квантором загальності при визначенні універсального типу, може заміщатися самим об'єктом, що визначається. Наприклад, терм id {\displaystyle {\texttt {id}}} одиничного типу α .   α α {\displaystyle \top \equiv \forall \alpha .~\alpha \to \alpha } можна застосувати до власного типу, породжуючи терм типу {\displaystyle \top \to \top } . Як показав Джо Веллз (Joe Wells) 1994 року[3], задача виведення типів для версії Каррі системи F нерозв'язна. Тому при практичній реалізації мов програмування зазвичай використовують обмежені, предикативні версії поліморфізму: пренекс-поліморфізм (поліморфізм у стилі ML), поліморфізм рангу 2 тощо. У разі пренекс-поліморфізму областю визначення змінних типу є лише типи без кванторів. У цих системах задачу виведення типів можна розв'язати, такий висновок базується на алгоритмі Гіндлі — Мілнера.
  • Відповідність Каррі — Говарда пов'язує систему F із мінімальною інтуїціоністською логікою висловлювань другого порядку[en], формули якої побудовано з пропозиційних змінних за допомогою імплікації та універсальної квантифікації за висловлюваннями. При цьому значення {\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. а б Girard, Jean-Yves. Interprétation fonctionnelle et élimination des coupures de l’arithmétique d’ordre supérieur. — Université Paris 7, 1972.
  2. John C. Reynolds. Towards a Theory of Type Structure : [арх. 31 жовтня 2014]. — 1974.
  3. Wells J. B. Typability and type checking in the second-order lambda-calculus are equivalent and undecidable : [арх. 22 лютого 2007] // Proceedings of the 9th Annual IEEE Symposium on Logic in Computer Science (LICS). — 1994. — С. 176–185.

Література

  • Pierce, Benjamin C. Types and Programming Languages. — MIT Press, 2002. — ISBN 0-262-16209-1.
  • Barendregt, Henk. Lambda Calculi with Types // Handbook of Logic in Computer Science. — Oxford University Press, 1992. — Т. II (4 червня). — С. 117-309.
  • Jean-Yves Girard, Paul Taylor, Yves Lafont. Proofs and Types. — Cambridge University Press, 1989. — ISBN 0 521 37181 3.
  • п
  • о
  • р
Неінтерпретовувані
Числові
Вказівник
  • Адреса
  • Посилання
Текстові
Складені
Інші
Пов'язані теми