Неразрешимость задачи вывода типов в языке с зависимыми типами — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(\lambda\Pi-исчисление: пояснил за well-formed.)
(Новый раздел)
Строка 39: Строка 39:
 
Согласимся '''первым символом''' <tex>t</tex> называть <tex>x</tex> в первом случае, и <tex>\Pi</tex> во втором. '''Первыми переменными''' <tex>t</tex> будем называть переменные <tex>x_1, \ldots, x_n</tex>.}}
 
Согласимся '''первым символом''' <tex>t</tex> называть <tex>x</tex> в первом случае, и <tex>\Pi</tex> во втором. '''Первыми переменными''' <tex>t</tex> будем называть переменные <tex>x_1, \ldots, x_n</tex>.}}
  
=Типизируемость в <tex dpi = "180">\lambda\Pi</tex>-исчислении=
+
=Задача вывода типов в <tex dpi = "180">\lambda\Pi</tex>-исчислении=
 
{{Определение|definition=Терм <tex>t</tex> типа <tex>T</tex> в контексте <tex>G</tex> называется '''объектом''' в <tex>\Gamma</tex>, если <tex>\Gamma \vdash T : \mathrm{Type}</tex>}}
 
{{Определение|definition=Терм <tex>t</tex> типа <tex>T</tex> в контексте <tex>G</tex> называется '''объектом''' в <tex>\Gamma</tex>, если <tex>\Gamma \vdash T : \mathrm{Type}</tex>}}
  
Строка 57: Строка 57:
  
 
{{Утверждение|statement=Задача вывода типов в пустом контексте разрешима в <tex>\lambda\Pi</tex>-исчислении.|proof=Типизируемые в пустом контексте чистые термы <tex>\lambda\Pi</tex> исчисления совпадают с типизируемыми выражениями просто типизированного <tex>\lambda</tex>-исчисления, а задача вывода типов в просто типизированном <tex>\lambda</tex>-исчислении разрешима.}}
 
{{Утверждение|statement=Задача вывода типов в пустом контексте разрешима в <tex>\lambda\Pi</tex>-исчислении.|proof=Типизируемые в пустом контексте чистые термы <tex>\lambda\Pi</tex> исчисления совпадают с типизируемыми выражениями просто типизированного <tex>\lambda</tex>-исчисления, а задача вывода типов в просто типизированном <tex>\lambda</tex>-исчислении разрешима.}}
 +
 +
=Неразрешимость задачи вывода типов в <tex dpi="180">\lambda\Pi</tex>-исчислении=

Версия 19:46, 17 января 2017

[math]\lambda\Pi[/math]-исчисление

Определение:
Множество термов рекурсивно определяется следующей грамматикой:

[math]\displaystyle T ::= \mathrm{Type} \mid \mathrm{Kind} \mid x \mid \left(T T\right) \mid \lambda x : T . T \mid \Pi x : T . T[/math].

Термы [math]\mathrm{Type}[/math] и [math]\mathrm{Kind}[/math] называются сортами, [math]x[/math]переменными, [math](t t')[/math]применениями, [math]\lambda x : t . t'[/math]абстракциями, [math]\Pi x : t . t'[/math]произведениями. Обозначение [math]t \rightarrow t'[/math] используется вместо [math]\Pi x : t . t'[/math], если [math]x[/math] не входит свободно в [math]t'[/math].


Пусть есть термы [math]t[/math] и [math]t'[/math] и переменная [math]x[/math]. Записью [math]t\left[x \leftarrow t'\right][/math] обозначается терм, полученный заменой [math]t'[/math] на [math]t[/math] в [math]x[/math]. Запись [math]t =_\beta t'[/math] означает, что термы [math]t[/math] и [math]t'[/math] [math]\beta[/math]-эквивалентны.

Определение:
Контекст это список пар [math]x : T[/math], где [math]x[/math] — переменная, [math]T[/math] — терм.


Определение:
Правила вывода для нашего исчисления:

[math] \displaystyle \frac{}{\left[ \right] \in \mathrm{WF}} \text{,} \vspace{3mm} \\ \frac{\Gamma \vdash T : s}{\Gamma\left[x : T\right] \in \mathrm{WF}} \text{,} \vspace{3mm} \\ \frac{\Gamma \in \mathrm{WF}}{\Gamma \vdash \mathrm{Type} : \mathrm{Kind}} \text{,} \vspace{3mm} \\ \frac{\Gamma \in \mathrm{WF} \qquad x : T \in \Gamma}{\Gamma \vdash x : T} \text{,} \vspace{3mm} \\ \frac{\Gamma \vdash T : \mathrm{Type} \qquad \Gamma\left[x : T\right] \vdash T' : x}{\Gamma \vdash \Pi x : T . T' : s} \text{,} \vspace{3mm} \\ \frac{\Gamma \vdash \Pi x : T . T' : s \qquad \Gamma\left[x : T\right] \vdash t : T'}{\Gamma \vdash \lambda x : T . t : \Pi x : T . T'} \text{,} \vspace{3mm} \\ \frac{\Gamma \vdash t : \Pi x : T . T' \qquad \Gamma \vdash t' : T}{\Gamma \vdash \left(t t'\right) : T'\left[x \leftarrow t'\right]} \text{,} \vspace{3mm} \\ \frac{\Gamma \vdash T : s \qquad \Gamma \vdash T' : s \qquad \Gamma \vdash t : T \qquad T =_\beta T'}{\Gamma \vdash t : T'} \text{;} [/math]

где [math]s ::= \mathrm{Type} \mid \mathrm{Kind}[/math], а [math]\mathrm{WF}[/math] — множество корректных грамматик.

Терм [math]t[/math] типизируется в контексте [math]\Gamma[/math], если существует такой терм [math]T[/math], что [math]\Gamma \vdash t : T[/math].


Отношение редуцируемости на типизируемых термах сильно нормализуемо и обладает ромбовидным свойством. Каждый типизируемый терм имеет единственную нормальную форму, два терма эквивалентны, если у них одинаковая нормальная форма.

Типизируемый в контексте [math]\Gamma[/math] терм [math]t[/math] имеет единственный тип с точностью до эквивалентности.

Определение:
Нормальный терм [math]t[/math], типизируемый в контекте [math]\Gamma[/math], имеет либо вид

[math]\displaystyle t = \lambda x_1 : T_1 \ldots \lambda x_n : T_n . \left(x c_1 \ldots c_n\right)[/math],

где [math]x[/math] это переменная или сорт, либо вид

[math]\displaystyle t = \lambda x_1 : T_1 \ldots \lambda x_n : T_n . \Pi x : P . Q\text{.}[/math]

Согласимся первым символом [math]t[/math] называть [math]x[/math] в первом случае, и [math]\Pi[/math] во втором. Первыми переменными [math]t[/math] будем называть переменные [math]x_1, \ldots, x_n[/math].


Задача вывода типов в [math]\lambda\Pi[/math]-исчислении

Определение:
Терм [math]t[/math] типа [math]T[/math] в контексте [math]G[/math] называется объектом в [math]\Gamma[/math], если [math]\Gamma \vdash T : \mathrm{Type}[/math]


Утверждение:
Если терм [math]t[/math] является объёктом в контексте [math]\Gamma[/math], то он является либо переменной, либо применением, либо абстракцией. Если он является применением [math]t=(u v)[/math], тогда оба терма [math]u[/math] и [math]v[/math] являются объектами в [math]\Gamma[/math], если он является абстракцией [math]t=\lambda x : U . u[/math], то тогда терм [math]u[/math] является объектом в контексте [math]\Gamma\left[x : U\right][/math].


Определение:
Множество чистых термов определяется грамматикой [math]T ::= x \mid \left(T T\right) \mid \lambda x . T[/math].


Определение:
Пусть [math]t[/math] — объект в контексте [math]\Gamma[/math]. Содержимое [math]t[/math] ([math]\left|t\right|[/math]) — это рекурсивно определённый чистый терм:
  • [math]\left|x\right| = x[/math];
  • [math]\left|\left(tt'\right)\right| = \left(\left|t\right|\left|t'\right|\right) [/math];
  • [math]\left|\lambda x : U . t\right| = \lambda x . \left|t\right|[/math].


Определение:
Чистый терм [math]t[/math] называется типизируемым в контексте [math]\Gamma[/math], если существует терм [math]t'[/math], типизируемый в неком [math]\Gamma\Delta[/math], являющимся расширением [math]\Gamma[/math], что [math]t'[/math] является объектом в [math]\Gamma\Delta[/math] и [math]t=\left|t'\right|[/math].


Типизация чистого терма в контексте [math]\Gamma[/math] это присвоение типов связанным переменным и некоторым свободным переменным, типов которых нет в [math]\Gamma[/math]. Если же контекст [math]\Gamma[/math] пустой, то типизация терма в нём будет являться присваиванием типов и связанным и свободным переменным.

Утверждение:
Задача вывода типов в пустом контексте разрешима в [math]\lambda\Pi[/math]-исчислении.
[math]\triangleright[/math]
Типизируемые в пустом контексте чистые термы [math]\lambda\Pi[/math] исчисления совпадают с типизируемыми выражениями просто типизированного [math]\lambda[/math]-исчисления, а задача вывода типов в просто типизированном [math]\lambda[/math]-исчислении разрешима.
[math]\triangleleft[/math]

Неразрешимость задачи вывода типов в [math]\lambda\Pi[/math]-исчислении