Неразрешимость задачи вывода типов в языке с зависимыми типами — различия между версиями
(Добавил пробелов в применения) |
(→Неразрешимость задачи вывода типов в \lambda\Pi-исчислении) |
||
Строка 101: | Строка 101: | ||
где <tex>\beta</tex> это терм типа <tex>(T \rightarrow T) \rightarrow \ldots \rightarrow (T \rightarrow T) \rightarrow \mathrm{Type}</tex> в <tex>\Gamma\Delta</tex>. | где <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>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>. | ||
}} | }} |
Версия 21:40, 17 января 2017
-исчисление
Определение: |
Множество термов рекурсивно определяется следующей грамматикой:
Термы . и называются сортами, — переменными, — применениями, — абстракциями, — произведениями. Обозначение используется вместо , если не входит свободно в . |
Пусть есть термы и и переменная . Записью обозначается терм, полученный заменой на в . Запись означает, что термы и -эквивалентны.
Определение: |
Контекст это список пар | , где — переменная, — терм.
Определение: |
Правила вывода для нашего исчисления:
где Терм , а — множество корректных грамматик. типизируется в контексте , если существует такой терм , что . |
Отношение редуцируемости на типизируемых термах сильно нормализуемо и обладает ромбовидным свойством. Каждый типизируемый терм имеет единственную нормальную форму, два терма эквивалентны, если у них одинаковая нормальная форма.
Типизируемый в контексте
терм имеет единственный тип с точностью до эквивалентности.Определение: |
Нормальный терм , где это переменная или сорт, либо видСогласимся первым символом называть в первом случае, и во втором. Первыми переменными будем называть переменные . | , типизируемый в контекте , имеет либо вид
Задача вывода типов в -исчислении
Определение: |
Терм | типа в контексте называется объектом в , если
Утверждение: |
Если терм является объёктом в контексте , то он является либо переменной, либо применением, либо абстракцией. Если он является применением , тогда оба терма и являются объектами в , если он является абстракцией , то тогда терм является объектом в контексте . |
Определение: |
Множество чистых термов определяется грамматикой | .
Определение: |
Пусть
| — объект в контексте . Содержимое ( ) — это рекурсивно определённый чистый терм:
Определение: |
Чистый терм | называется типизируемым в контексте , если существует терм , типизируемый в неком , являющимся расширением , что является объектом в и .
Типизация чистого терма в контексте это присвоение типов связанным переменным и некоторым свободным переменным, типов которых нет в . Если же контекст пустой, то типизация терма в нём будет являться присваиванием типов и связанным и свободным переменным.
Утверждение: |
Задача вывода типов в пустом контексте разрешима в -исчислении. |
Типизируемые в пустом контексте чистые термы | исчисления совпадают с типизируемыми выражениями просто типизированного -исчисления, а задача вывода типов в просто типизированном -исчислении разрешима.
Неразрешимость задачи вывода типов в -исчислении
Рассмотрим контекст
.
Определение: |
Пусть
| — слово двухсимвольного алфавита . Определим и следующим образом:
Утверждение: |
Рассмотрим проблему соответствий Поста для списков слов над двухсимвольным алфавитом и . Непустая последовательность является её решением тогда и только тогда, когда . |
Утверждение: |
Если это такой терм, что терм ( повторяется раз) типизируемый, и он является объектом в неком , то тогда терм типизируется в контексте , и его тип эквивалентен терму для какого-то терма типа в контексте . |
Индукция по | .
Утверждение: |
Пусть — такие нормальные термы, что — типизируемый терм, и его нормальная форма это . Тогда первый символ это либо первый символ , либо первая переменная . |
Пусть | — первый символ . Если не является первой переменной , то первый символ нормальной формы это тоже , значит, это первый символ .
Утверждение: |
Пусть — такой нормальный терм типа в контексте , что нормальная форма равна . Тогда терм является термом вида
для некой последовательности . |
Индукция по числу переменных в | .
Теорема: |
Задача проверки типизируемости чистого терма в заданном контексте неразрешима. |
Доказательство: |
Рассмотрим проблему соответствий Поста для списков слов над двухсимвольным алфавитом и . Построим такой чистый терм , что типизируем в тогда и только тогда, когда проблема соответствий поста имеет решение.
Предположим, что этот терм типизируем, и обозначим тип как . Терм типизируется и является объектом в , значит,, где это терм типа в .Тогда все переменные , связанные в термах , , и , имеют тип . Терм имеет тип , тогда из типизируемости терма мы получаем, что тип переменной имеет вид , и. Точно так же, из типизируемости терма получаем, что, значит, . Из типизируемости терма получаем. Наконец, из типизируемости терма получаем. Поскольку терм имеет тип , первый символ нормальной формы терма не может быть первой переменной , значит, это переменная , и мы получаем, что, где — некий терм типа . Получаем, что
Вторая эквивалентность показывает, что нормальная форма имеет вид
для некоторой последовательности . Третья эквивалентность показывает, что , и первая — что, то есть последовательность является решением проблемы Поста.И наоборот, если предположить, что проблема Поста имеет решение , то можно задать типы переменным , и :и тип всем остальным переменным терма , и получить такой типизируемый в терм , который является объектом и . |