Теорема Чёрча — Россера

Все дороги ведут в Рим. Точно? На это есть теорема Чёрча — Россера, которая гарантирует единственность нормальной формы, какими бы путями мы к ней ни шли. Конечно, надо заметить, что в Тьюринг-полном языке мы можем такой нормальной формы и не достичь, но вот если достигаем, то она единственна, то есть каким путём ни иди, всегда придёшь именно в Рим.

Если MMβN{} \twoheadrightarrow_\beta N и MMβK{} \twoheadrightarrow_\beta K, то найдётся LL такой, что NNβL{} \twoheadrightarrow_\beta L и KKβL{} \twoheadrightarrow_\beta L. Иначе говоря, β{} \twoheadrightarrow_\beta обладает свойством ромба (сходимостью):

M\displaystyle M βN,    M\displaystyle {} \twoheadrightarrow_\beta N,\;\; MβK    \displaystyle {} \twoheadrightarrow_\beta K \;\;    L:  N\displaystyle {} \Longrightarrow\;\; \exists L:\; NβL,    K\displaystyle {} \twoheadrightarrow_\beta L,\;\; KβL\displaystyle {} \twoheadrightarrow_\beta L
(1.31)

Доказательство удобно вести через параллельную редукцию. Нам понадобятся три оператора редукции над термами:

  • β{} \to_\beta — обычная, одношаговая β-редукция: MMβN{} \to_\beta N значит, что в MM выбрали ровно один редекс и стянули его (один шаг — один редекс);
  • {} \Rightarrowпараллельная редукция: MMN{} \Rightarrow N значит, что стянули произвольный набор редексов, уже присутствующих в MM (нуль, один, два — сколько угодно), каждый не более одного раза, и только имеющиеся, а не их будущие копии;
  • β{} \twoheadrightarrow_\betaмногошаговая редукция (рефлексивно-транзитивное замыкание β{} \to_\beta): MMβN{} \twoheadrightarrow_\beta N значит, что есть цепочка MMβ{} \to_\beta \dotsβN{} \to_\beta N любой длины, в том числе нулевой.
Три ромба с вершинами M, N, K, L: для одношаговой (а), параллельной (б) и многошаговой (в) редукции; между б и в — знак вложения ⊆
Рис. 1.1. Свойство ромба для трёх операторов редукции: а — одношаговая β-редукция β{} \to_\beta; б — параллельная редукция {} \Rightarrow; в — многошаговая редукция β{} \twoheadrightarrow_\beta.

Одношаговая редукция — частный случай параллельной, а та — частный случай многошаговой:

β\displaystyle {\to_\beta} \displaystyle {} \subseteq {\Rightarrow}β\displaystyle {} \subseteq {\twoheadrightarrow_\beta}
(1.32)

Почему свойство ромба не доказывается прямо для одношаговой редукции β{} \to_\beta (рис. 1.1, а)? Мешает копирование редексов. Возьмём терм, в котором два редекса — внешний и внутренний:

M\displaystyle M (λx.xx)((λy.y)z)\displaystyle {} \equiv (\lambda x.x\,x)\,\bigl((\lambda y.y)\,z\bigr)

Стянем внешний редекс — внутренний при подстановке удвоится: получим ((λy.y)z)((λy.y)z)\bigl((\lambda y.y)\,z\bigr)\,\bigl((\lambda y.y)\,z\bigr). Стянем внутренний — получим (λx.xx)z(\lambda x.x\,x)\,z. Пути разошлись на один шаг, а вот сойтись за один шаг уже не могут: из второго терма zzz\,z получается сразу, а из первого — только за два шага, по шагу на каждую копию. Значит, одношаговое свойство ромба для β{} \to_\beta попросту ложно.

Параллельная редукция {} \Rightarrow лечит ровно эту болезнь: размножившиеся копии редекса она стягивает все разом, за один тик. Для неё свойство ромба уже верно (рис. 1.1, б), и доказывается оно приёмом Такахаси — через полную развёртку.

Полной развёрткой MM^{*} назовём терм, в котором одновременно стянуты все редексы, видимые в MM, — самый жадный из возможных параллельных шагов. Определение — индукцией по строению терма:

Первое правило: xx^{*}=x{} = x — переменная развёртывается в себя.

Второе правило: (λx.P)(\lambda x.P)^{*}=λx.P{} = \lambda x.P^{*} — развёртка проходит под абстракцию.

Третье правило: (PQ)(P\,Q)^{*}=PQ{} = P^{*}\,Q^{*}, если PQP\,Q — не редекс (PP — не абстракция): части развёртываются независимо.

Четвёртое правило: ((λx.P)Q)\bigl((\lambda x.P)\,Q\bigr)^{*}=P[x ⁣:= ⁣Q]{} = P^{*}[x\!:=\!Q^{*}] — сам редекс стягивается, а его части ещё и развёртываются.

Развернём терм из контрпримера по этим правилам:

  • ((λx.xx)((λy.y)z))\bigl((\lambda x.x\,x)\,((\lambda y.y)\,z)\bigr)^{*}=(xx)[x ⁣:= ⁣((λy.y)z)]{} = (x\,x)^{*}[x\!:=\!((\lambda y.y)\,z)^{*}] — весь терм есть редекс, работает четвёртое правило: внешний редекс стянут, обе его части ушли в развёртку;
  • (xx)(x\,x)^{*}=xx{} = x^{*}\,x^{*}=xx{} = x\,x — применение xxx\,x — не редекс: третье правило, затем первое для каждой переменной;
  • ((λy.y)z)((\lambda y.y)\,z)^{*}=y[y ⁣:= ⁣z]{} = y^{*}[y\!:=\!z^{*}]=y[y ⁣:= ⁣z]{} = y[y\!:=\!z]=z{} = z — внутренний редекс: четвёртое правило, затем дважды первое;
  • (xx)[x ⁣:= ⁣z](x\,x)[x\!:=\!z]=zz{} = z\,z — осталось выполнить подстановку.

Итого MM^{*}=zz{} = z\,z: развёртка стянула и внешний редекс, и внутренний — ещё до того, как тот успел размножиться. Всю конструкцию держит лемма о треугольнике.

Лемма о треугольнике. Полную развёртку нельзя обогнать: каким бы ни был параллельный шаг MMN{} \Rightarrow N, из NN ровно один параллельный шаг ведёт в MM^{*}:

M\displaystyle M N    \displaystyle {} \Rightarrow N \;\;    N\displaystyle {} \Longrightarrow\;\; NM\displaystyle {} \Rightarrow M^{*}
Треугольник: параллельный шаг M ⇒ N достраивается до полной развёртки M*; справа — свойство ромба из двух треугольников
Рис. 1.2. Лемма о треугольнике (слева): любой параллельный шаг MMN{} \Rightarrow N достраивается одним шагом до полной развёртки MM^{*}. Справа — свойство ромба для {} \Rightarrow: два треугольника с общей нижней вершиной MM^{*}.

Параллельный шаг не обязан стягивать все редексы — из одного MM шаги {} \Rightarrow ведут в целый веер термов, и полная развёртка — лишь крайняя, самая жадная точка этого веера. Поэтому шаг NNM{} \Rightarrow M^{*} в общем случае настоящий; нулевым он оказывается, только когда всё уже стянуто и NN=M{} = M^{*}.

Редукция, которая сразу стягивает все видимые редексы одним разом, называется редукцией Гросса — Кнута MMGKM{} \Rightarrow_{\mathrm{GK}} M^{*}. Но она нам неинтересна: в ней нет никакой вариативности — из терма такой шаг ведёт ровно в один результат. А теорема Чёрча — Россера как раз про вариативность: пути β{} \twoheadrightarrow_\beta стягивают редексы в произвольном порядке, и в жёсткие шаги Гросса — Кнута их не разложить. Нужна именно свобода стягивать любое подмножество.

Свойство ромба из треугольника получается очевидно. Пусть MMN{} \Rightarrow N и MMK{} \Rightarrow K. По лемме о треугольнике NNM{} \Rightarrow M^{*} и KKM{} \Rightarrow M^{*} — берём LL=M{} = M^{*}, и обе стороны замыкаются одним шагом (рис. 1.2, справа). Общая точка одна на всех: она не зависит ни от NN, ни от KK.

Осталось поднять свойство ромба с одного параллельного шага на многошаговую редукцию (рис. 1.1, в). Вложения (1.32) позволяют читать любую цепочку β{} \to_\beta-шагов как цепочку {} \Rightarrow-шагов и наоборот. Поэтому распишем MMβN{} \twoheadrightarrow_\beta N и MMβK{} \twoheadrightarrow_\beta K как две цепочки параллельных шагов, выложим их по сторонам сетки и достроим её клетка за клеткой — каждую клетку замыкает свойство ромба для {} \Rightarrow.

Сетка из клеток-ромбов, сходящаяся к общему редукту L
Рис. 1.3. Сетка из клеток-ромбов: стороны — цепочки параллельных шагов MM{} \Rightarrow \dotsN{} \Rightarrow N и MM{} \Rightarrow \dotsK{} \Rightarrow K; каждая клетка (например, закрашенная) — свойство ромба для {} \Rightarrow. Нижняя вершина — общий редукт LL.

Заполнив всю сетку, в нижней вершине получаем терм LL, в который сходятся обе цепочки. Все рёбра сетки — параллельные шаги, а {\Rightarrow}β{} \subseteq {\twoheadrightarrow_\beta}, поэтому NNβL{} \twoheadrightarrow_\beta L и KKβL{} \twoheadrightarrow_\beta L. Теорема Чёрча — Россера доказана.

Из теоремы Чёрча — Россера (1.31) сразу вытекает существование общего редукта: если MM=βN{} =_\beta N, то найдётся LL с MMβL{} \twoheadrightarrow_\beta L и NNβL{} \twoheadrightarrow_\beta L (индукция по определению =β{} =_\beta). Отсюда единственность нормальной формы: у терма не больше одной β-НФ — два пути сошлись бы к общему LL, а НФ дальше не редуцируется, поэтому N1N_1L{} \equiv LN2{} \equiv N_2. Далее, редуцируемость к НФ: если NN — нормальная форма MM, то MMβN{} \twoheadrightarrow_\beta N (а не просто MM=βN{} =_\beta N). Наконец, непротиворечивость: разные нормальные формы не β-равны — например true\mathrm{true} и false\mathrm{false}, — иначе нарушилась бы единственность НФ; так доказываются «неравенства» термов.

Порядок стягивания редексов, стало быть, на результат не влияет — только на то, завершится ли вычисление и за сколько шагов. Выбором этого порядка и занимаются стратегии редукции.