Неразрешимость задачи вывода типов в языке с зависимыми типами
Лямбда исчисление с зависимыми типами — расширение просто типизированного лямбда-исчисления, которое позволяет типам зависеть от значений. Например, в языке с таким исчислением функция может возвращать не просто пару чисел, а пару чисел, в которой первое число меньше второго, или если ваша функция принимает число и возвращает массив длины , то это можно будет выразить типом этой функции. Зависимые типы добавляют выразительности типовой системе, что приводит к лучшей проверке корректности программы на этапе компиляции. Однако, как будет показано далее, для этого придётся идти на определённые жертвы: почти всегда придётся явно указывать типы выражений, так как компилятор не сможет справиться с выводом типов для них.
Содержание
-исчисление
| Определение: | 
| Множество термов (англ. term) рекурсивно определяется следующей грамматикой:
 . 
  | 
Пусть есть термы  и  и переменная . Записью  обозначается терм, полученный заменой  на  в . Запись  означает, что термы  и  -эквивалентны.
| Определение: | 
| Контекст (англ. context) это список пар , где — переменная, — терм. | 
| Определение: | 
| Правила вывода для нашего исчисления:
 
 где , а — множество корректных грамматик. Терм типизируется (англ. well-typed) в контексте , если существует такой терм , что . | 
Отношение редуцируемости на типизируемых термах сильно нормализуемо и обладает ромбовидным свойством. Каждый типизируемый терм имеет единственную нормальную форму, два терма эквивалентны, если у них одинаковая нормальная форма.
Типизируемый в контексте терм имеет единственный тип с точностью до эквивалентности.
| Определение: | 
| Нормальный терм , типизируемый в контекте , имеет либо вид
 , где это переменная или сорт, либо вид Согласимся первым символом (англ. head symbol) называть в первом случае, и во втором. Первыми переменными (англ. top variables) будем называть переменные .  | 
Задача вывода типов в -исчислении
| Определение: | 
| Терм типа в контексте называется объектом (англ. object) в , если . | 
| Утверждение: | 
Если терм  является объёктом в контексте , то он является либо переменной, либо применением, либо абстракцией. Если он является применением , тогда оба терма  и  являются объектами в , если он является абстракцией , то тогда терм  является объектом в контексте .  | 
| Определение: | 
| Множество чистых термов (англ. pure terms) определяется грамматикой . | 
| Определение: | 
Пусть  — объект в контексте . Содержимое  () — это рекурсивно определённый чистый терм:
  | 
| Определение: | 
| Чистый терм называется типизируемым в контексте , если существует терм , типизируемый в неком , являющимся расширением , что является объектом в и . | 
Типизация чистого терма в контексте  это присвоение типов связанным переменным и некоторым свободным переменным, типов которых нет в . Если же контекст  пустой, то типизация терма в нём будет являться присваиванием типов и связанным и свободным переменным.
| Утверждение: | 
Задача вывода типов в пустом контексте разрешима в -исчислении.  | 
| Типизируемые в пустом контексте чистые термы исчисления совпадают с типизируемыми выражениями просто типизированного -исчисления, а задача вывода типов в просто типизированном -исчислении разрешима. | 
Неразрешимость задачи вывода типов в -исчислении
Рассмотрим контекст .
| Определение: | 
Пусть  — слово двухсимвольного алфавита . Определим  и  следующим образом:
  | 
| Утверждение: | 
Рассмотрим проблему соответствий Поста для списков слов над двухсимвольным алфавитом  и . Непустая последовательность  является её решением тогда и только тогда, когда .  | 
| Утверждение: | 
Если  это такой терм, что терм  ( повторяется  раз) типизируемый, и он является объектом в неком , то тогда терм  типизируется в контексте , и его тип эквивалентен терму  для какого-то терма  типа  в контексте .  | 
| Индукция по . | 
| Утверждение: | 
Пусть  — такие нормальные термы, что  — типизируемый терм, и его нормальная форма это . Тогда первый символ  это либо первый символ , либо первая переменная .  | 
| Пусть — первый символ . Если не является первой переменной , то первый символ нормальной формы это тоже , значит, это первый символ . | 
| Утверждение: | 
Пусть  — такой нормальный терм типа  в контексте , что нормальная форма  равна . Тогда терм  является термом вида
 для некой последовательности .  | 
| Индукция по числу переменных в . | 
| Теорема: | 
Задача проверки типизируемости чистого терма в заданном контексте неразрешима.  | 
| Доказательство: | 
| 
 Рассмотрим проблему соответствий Поста для списков слов над двухсимвольным алфавитом и . Построим такой чистый терм , что типизируем в тогда и только тогда, когда проблема соответствий поста имеет решение. 
 Предположим, что этот терм типизируем, и обозначим тип как . Терм типизируется и является объектом в , значит, , где это терм типа в . Тогда все переменные , связанные в термах , , и , имеют тип . Терм имеет тип , тогда из типизируемости терма мы получаем, что тип переменной имеет вид , и . Точно так же, из типизируемости терма получаем, что , значит, . Из типизируемости терма получаем . Наконец, из типизируемости терма получаем . Поскольку терм имеет тип , первый символ нормальной формы терма не может быть первой переменной , значит, это переменная , и мы получаем, что , где — некий терм типа . Получаем, что 
 Вторая эквивалентность показывает, что нормальная форма имеет вид 
 для некоторой последовательности . Третья эквивалентность показывает, что , и первая — что , то есть последовательность является решением проблемы Поста. И наоборот, если предположить, что проблема Поста имеет решение , то можно задать типы переменным , и : и тип всем остальным переменным терма , и получить такой типизируемый в терм , который является объектом и .  | 
См. также
- Лямбда-исчисление
 - Примеры неразрешимых задач: проблема соответствий Поста
 - Неразрешимость исчисления предикатов первого порядка
 - Математическая логика
 
Источники информации
- Gilles Dowek, The undecidability of typability in the Lambda-Pi-calculus
 - Д. Штукенберг. Лекции по математической логике
 - Конспект лекций по теории типов
 - Henk Barendregt, Introduction to generalized type systems