113
правок
Изменения
→Неразрешимость задачи вывода типов в \lambda\Pi-исчислении
где <tex>\beta</tex> это терм типа <tex>(T \rightarrow T) \rightarrow \ldots \rightarrow (T \rightarrow T) \rightarrow \mathrm{Type}</tex> в <tex>\Gamma\Delta</tex>.
Тогда все переменные <tex>y</tex>, связанные в термах <tex>\hat{\varphi_i}</tex>, <tex>\tilde{\psi_i}</tex>, <tex>\lambda y.y</tex> и <tex>\lambda y.d</tex>, имеют тип <tex>T</tex>. Терм <tex>(g \ \hat{\varphi_1} \ \ldots\ \hat{\varphi_n})</tex> имеет тип <tex>(\beta\ \hat{\varphi_1} \ \ldots\ \hat{\varphi_n})</tex>, тогда из типизируемости терма<tex>(h\ (g \ \hat{\varphi_1} \ \ldots\ \hat{\varphi_n}))</tex> мы получаем, что тип переменной <tex>h</tex> имеет вид <tex>\Pi x : \gamma : \gamma'</tex>, и <tex>y =_\beta (\beta\ \hat{\varphi_1} \ \ldots\ \hat{\varphi_n})</tex>. Точно так же, из типизируемости терма <tex>(h\ (g \ \hat{\psi_1} \ \ldots\ \hat{\psi_n}))</tex> получаем, что <tex>y =_\beta (\beta\ \hat{\psi_1} \ \ldots\ \hat{\psi_n})</tex>, значит, <tex>(\beta\ \hat{\varphi_1} \ \ldots\ \hat{\varphi_n}) =_\beta (\beta\ \hat{\psi_1} \ \ldots\ \hat{\psi_n})</tex>. Из типизируемости терма <tex>(F\ c\ (g\ \lambda y : T.y\ldots \lambda y : T . y))</tex> получаем <tex>(\beta\ \lambda y:T.y \ldots \lambda y:T.y) =_\beta (P\ c)</tex>. Наконец, из типизируемости терма <tex>(F\ d\ (g\ \lambda y : T.d\ldots \lambda y : T . d))</tex> получаем <tex>(\beta\ \lambda y:T.d \ldots \lambda y:T.d) =_\beta (P\ d)</tex>. Поскольку терм <tex>\beta</tex> имеет тип <tex>(T \rightarrow T) \rightarrow \ldots \rightarrow (T \rightarrow T) \rightarrow \mathrm{Type}</tex>, первый символ нормальной формы терма <tex>\beta</tex> не может быть первой переменной <tex>\beta</tex>, значит, это переменная <tex>P</tex>, и мы получаем, что <tex>\beta =_\beta \lambda x_1 : T \rightarrow T \ldots \lambda x_n : T \rightarrow T.(P\ (\delta\ x_1 \ldots x_n))</tex>, где <tex>\delta</tex> {{---}} некий терм типа <tex>(T \rightarrow T) \rightarrow \ldots \rightarrow (T \rightarrow T) \rightarrow T</tex>. Получаем, что <tex>(\delta\ \hat{\varphi_1} \ldots \hat{\varphi_n}) =_\beta (\delta\ \hat{\psi_1} \ldots \hat{\psi_n})\text{,} \\(\delta\ \lambda y:T.y \ldots \lambda y:T.y) =_\beta c \text{,}\\(\delta\ \lambda y:T.d \ldots \lambda y:T.d) =_\beta d \text{.}</tex> Вторая эквивалентность показывает, что нормальная форма <tex>\delta</tex> имеет вид <tex>\lambda x_1:T \rightarrow T \ldots \lambda x_n : T \rightarrow T . (x_{i_1}\ (\ldots(x_{i_p}\ c)\ldots))</tex> для некоторой последовательности <tex>i_1,\ldots,i_p</tex>. Третья эквивалентность показывает, что <tex>p>0</tex>, и первая {{---}} что <tex>(\hat{\varphi_{i_1}}\ (\ldots(\hat{\varphi_{i_p}\ c})\ldots)) =_\beta (\hat{\psi_{i_1}}\ (\ldots(\hat{\psi_{i_p}\ c})\ldots))</tex>, то есть последовательность <tex>i_1,\ldots,i_p</tex> является решением проблемы Поста. И наоборот, если предположить, что проблема Поста имеет решение <tex>i_1,\ldots,i_p</tex>, то можно задать типы переменным <tex>f</tex>, <tex>g</tex> и <tex>h</tex>: <tex>f : (P\ (a\ (\ldots(a\ c)\ldots))) \rightarrow T \rightarrow T \rightarrow T \rightarrow T \rightarrow T \text{,}\\g : \Pi x_1 : T \rightarrow T \ldots \Pi x_n : T \rightarrow T.(P\ (x_{i_1}\ (\ldots(x_{i_p}\ c)\ldots))) \text{,}\\h : (P\ (\hat{\varphi_{i_1}}\ (\ldots(\hat{\varphi_{i_p}}\ c)\ldots))) \rightarrow T \text{;}</tex> и тип <tex>T</tex> всем остальным переменным терма <tex>t</tex>, и получить такой типизируемый в <tex>\Gamma</tex> терм <tex>t'</tex>, который является объектом и <tex>t = \left|t'\right|</tex>.
}}