Обозначения
Числа Чёрча: $\overline{n} = \lambda fx.f^n x$, т.е. $\overline{0}=\lambda fx.x$, $\overline{1}=\lambda fx.fx$, $\overline{n}$ применяет $f$ ровно $n$ раз.
Булевы: $\mathbf{T}=\lambda xy.x$, $\mathbf{F}=\lambda xy.y$.
Сложение: $\text{Add} = \lambda mnfx.mf(nfx)$.
Задача 1
a) $(\lambda xy.xxy)((\lambda xy.yx)(\lambda x.x))(\lambda xy.xyx)$
Сначала вычислим аргумент $A = (\lambda xy.yx)(\lambda x.x)$:
$$A = (\lambda xy.yx)(\lambda x.x) \to_\beta \lambda y.\,y(\lambda x.x)$$Теперь применяем $(\lambda xy.xxy)$ к $A$ и к $B = \lambda xy.xyx$:
$$(\lambda xy.xxy)\,A\,B \to_\beta A\,A\,B$$Вычислим $A\,A$:
$$A\,A = (\lambda y.\,y(\lambda x.x))\,A \to_\beta A(\lambda x.x) = (\lambda y.\,y(\lambda x.x))(\lambda x.x) \to_\beta (\lambda x.x)(\lambda x.x) \to_\beta \lambda x.x$$Теперь $(\lambda x.x)\,B \to_\beta B = \lambda xy.xyx$.
$$\boxed{\lambda xy.xyx}$$b) $(\lambda xy.xyx)(\lambda x.x)((\lambda xy.xxy)(\lambda xy.yx))$
Сначала вычислим $C = (\lambda xy.xxy)(\lambda xy.yx)$:
$$C \to_\beta \lambda y.\,(\lambda xy.yx)(\lambda xy.yx)\,y$$$$(\lambda xy.yx)(\lambda xy.yx) \to_\beta \lambda y.\,y(\lambda xy.yx)$$
$$C = \lambda y.\,(\lambda y'.\,y'(\lambda xy.yx))\,y = \lambda y.\,y(\lambda xy.yx)$$
Пусть $D = \lambda y.\,y(\lambda xy.yx)$.
Вычислим $(\lambda xy.xyx)(\lambda x.x)$:
$$(\lambda xy.xyx)(\lambda x.x) \to_\beta \lambda y.(\lambda x.x)\,y\,(\lambda x.x) \to_\beta \lambda y.\,y(\lambda x.x)$$Теперь применим к $D$:
$$(\lambda y.\,y(\lambda x.x))\,D \to_\beta D(\lambda x.x) = (\lambda y.\,y(\lambda xy.yx))(\lambda x.x) \to_\beta (\lambda x.x)(\lambda xy.yx) \to_\beta \lambda xy.yx$$$$\boxed{\lambda xy.yx}$$Задача 2
a) $(\lambda xy.xxy)(\lambda xy.xyx)(\lambda x.xx)$ vs $(\lambda xy.yxx)(\lambda xy.xyx)(\lambda x.xx)$
Пусть $P = \lambda xy.xyx$, $Q = \lambda x.xx$.
Левый терм:
$$(\lambda xy.xxy)\,P\,Q \to_\beta P\,P\,Q$$$$P\,P = (\lambda xy.xyx)\,P \to_\beta \lambda y.\,P\,y\,P$$
$$P\,P\,Q = (\lambda y.\,PyP)\,Q \to_\beta P\,Q\,P$$
$$P\,Q = (\lambda xy.xyx)\,Q \to_\beta \lambda y.\,Q\,y\,Q$$
$$P\,Q\,P = (\lambda y.\,QyQ)\,P \to_\beta Q\,P\,Q$$
$$Q\,P = (\lambda x.xx)\,P \to_\beta P\,P \quad\text{(цикл!)}$$
Редукция не завершается — нормальной формы нет.
Правый терм:
$$(\lambda xy.yxx)\,P\,Q \to_\beta Q\,P\,P$$$$Q\,P = P\,P \to_\beta \lambda y.\,PyP$$
$$\lambda y.\,PyP\,P \to_\beta P\,P\,P \to_\beta \ldots$$
Тоже не завершается. Оба терма не имеют нормальной формы, оба расходятся одинаково (через $P\,P\,\ldots$).
$$\boxed{\text{Термы } =_{\beta\eta}\text{ равны (оба не имеют н.ф., редуцируются к одной и той же бесконечной последовательности)}}$$$$\boxed{\text{Нельзя установить равенство: оба расходятся, общего нормального редукта нет.}}$$Строго: оба не имеют нормальной формы; по теореме Чёрча–Россера равенство $=_{\beta}$ означает наличие общего редукта. Проследим: левый $\twoheadrightarrow PQP \twoheadrightarrow QPQ \twoheadrightarrow \ldots$, правый $\twoheadrightarrow PPP \twoheadrightarrow \ldots$ — общего нормального редукта нет, значит не равны в $=_\beta$ (нет общего редукта в нормальной форме). Но поскольку оба расходятся, из Church–Rosser напрямую равенство не следует.
b) $(\lambda x.xx)(\lambda xy.xyx)(\lambda xy.yxy)$ vs $(\lambda x.xx)(\lambda xy.yxy)(\lambda xy.xyx)$
Пусть $P = \lambda xy.xyx$, $R = \lambda xy.yxy$.
Левый:
$$(\lambda x.xx)\,P\,R \to_\beta P\,P\,R$$$$P\,P = \lambda y.\,PyP,\quad P\,P\,R = P\,R\,P$$
$$P\,R = \lambda y.\,R\,y\,P,\quad P\,R\,P = R\,P\,P$$
$$R\,P = (\lambda xy.yxy)\,P = \lambda y.\,y\,P\,y,\quad R\,P\,P = P\,P\,P \to \ldots$$
Расходится.
Правый:
$$(\lambda x.xx)\,R\,P \to_\beta R\,R\,P$$$$R\,R = \lambda y.\,y\,R\,y,\quad R\,R\,P = P\,R\,P$$
Мы получили $P\,R\,P$ — то же, что и в левом терме после нескольких шагов!
Оба терма редуцируются к $P\,R\,P$, значит:
$$\boxed{(\lambda x.xx)(\lambda xy.xyx)(\lambda xy.yxy) =_\beta (\lambda x.xx)(\lambda xy.yxy)(\lambda xy.xyx)}$$Задача 3
$$M = (\lambda xyzw.\; z\,(x\,y\,(x\,y\,y\,y\,z))\,w)\;\overline{5}\;\overline{3}\;(\lambda yfx.\,y\,f\,(y\,f\,x))\;(\lambda x.x)$$Шаг 1. Подставим: $x:=\overline{5}$, $y:=\overline{3}$, $z:=Z$, $w:=I$, где $Z=\lambda yfx.\,yfx$ — это $\overline{2}$ в другой записи… Разберёмся.
Обозначим:
- $x = \overline{5} = \lambda fx.f^5x$
- $y = \overline{3} = \lambda fx.f^3x$
- $z = Z = \lambda yfx.\,yf(yfx)$ — это умножение на 2 для чисел Чёрча? Нет, это $\overline{2}$! Действительно $\overline{2} = \lambda fx.f(fx)$, а $\lambda yfx.\,yf(yfx) = \lambda y.\overline{2}\,y$… Нет.
Проверим: $Z = \lambda yfx.\,yf(yfx)$. Это $\lambda y.\,\overline{2}\circ y$… На самом деле $Zn = \lambda fx.\,nf(nfx) = \overline{2}\cdot n$ (умножение числа Чёрча на 2, т.е. $Zn = 2n$).
Действительно: $(\lambda yfx.\,yf(yfx))\,n = \lambda fx.\,nf(nfx)$. А $\text{Add}\,n\,n = \lambda fx.\,nf(nfx)$. Так что $Z\,n = \overline{2n}$ — удвоение.
- $w = I = \lambda x.x$
Шаг 2. Тело: $z\,(x\,y\,(x\,y\,y\,y\,z))\,w$
Вычислим изнутри:
$x\,y\,y\,y\,z$: Здесь $x = \overline{5}$, применяем к $y,y,y,z$:
$$\overline{5}\,y = \lambda x.\,y^5 x$$$$\overline{5}\,y\,y = y^5\,y = y^6\,(\text{т.е. применить }y\text{ шесть раз})$$
Стоп, аккуратнее. $\overline{5} = \lambda fx.f^5x$, поэтому:
$$\overline{5}\,y\,y = y^5\,y$$Это означает применить $y=\overline{3}$ пять раз к $y=\overline{3}$:
$$\overline{3}^5\,\overline{3}$$$\overline{3}^5$ — это $\overline{3}$ применённое 5 раз как функция к числу:
$$\overline{3}^1\,\overline{3} = \overline{3}\,\overline{3} = \overline{3^3} = \overline{27}$$$$\overline{3}^2\,\overline{3} = \overline{3}\,\overline{27} = \overline{3^4} = \overline{81}$$
Подождём — $\overline{m}\,\overline{n} = \overline{n^m}$ (в числах Чёрча $\overline{m}\,\overline{n} = \lambda fx.\overline{n}^m f\,x$, но $\overline{n}^m f = f^{n^m}$, поэтому $\overline{m}\,\overline{n} = \overline{n^m}$).
Итак:
$$\overline{5}\,\overline{3}\,\overline{3} = \overline{3}^5\,\overline{3} = \overline{3}\,(\overline{3}\,(\overline{3}\,(\overline{3}\,(\overline{3}\,\overline{3}))))$$Вычислим последовательно:
- $\overline{3}\,\overline{3} = \overline{3^3} = \overline{27}$
- $\overline{3}\,\overline{27} = \overline{27^3} = \overline{19683}$
- $\overline{3}\,\overline{19683} = \overline{19683^3}$ — числа растут как башенная экспонента.
Но у нас ещё $\overline{5}\,\overline{3}\,\overline{3}\,\overline{3}\,Z$ — это $(\overline{5}\,\overline{3}\,\overline{3})\,\overline{3}\,Z$. Подождём, разберём скобки.
Скобки: $x\,y\,y\,y\,z = ((((x\,y)\,y)\,y)\,z)$
- $\overline{5}\,\overline{3} = \overline{3^5} = \overline{243}$ (так как $\overline{m}\,\overline{n}=\overline{n^m}$, $\overline{5}\,\overline{3}=\overline{3^5}=\overline{243}$)
- $\overline{243}\,\overline{3} = \overline{3^{243}}$
- $\overline{3^{243}}\,\overline{3} = \overline{3^{3^{243}}}$
- $\overline{3^{3^{243}}}\,Z$: применить $Z$ ровно $3^{3^{243}}$ раз к $Z$… Стоп.
Последнее применение: $N\,Z$ где $N = \overline{3^{3^{243}}}$.
$N\,Z = \lambda fx.\,Z^N\,f\,x$… Нет: $N\,Z = Z^N$ как функция? Нет: $\overline{n}\,f = \lambda x.f^n x$, поэтому $N\,Z = \lambda x.\,Z^N x$ где $Z^N$ означает $Z$ composed $N$ times.
Поскольку $Z\,k = 2k$ (удвоение), $Z^N\,k = 2^N\,k$.
Так что $N\,Z = \lambda x.\,2^N\,x$, то есть это число Чёрча $\overline{2^N}$ где $N = 3^{3^{243}}$.
Пусть $K = x\,y\,y\,y\,z = \overline{2^{3^{3^{243}}}}$.
Шаг 3. $x\,y\,K = \overline{5}\,\overline{3}\,K$:
- $\overline{5}\,\overline{3} = \overline{243}$ (как выше)
- $\overline{243}\,K = K^{243}$…
Снова: $\overline{243}\,K = \lambda fx.\,K^{243}f\,x$.
Что такое $K^{243}\,f$? $K = \overline{2^{3^{3^{243}}}}$, поэтому $K\,f = \lambda x.f^{K'}\,x$ где $K' = 2^{3^{3^{243}}}$.
$K^2\,f = K\,(Kf) = K\,(\lambda x.f^{K'} x) = \lambda x.(f^{K'})^{K'} x = \lambda x.f^{K'^2}x$.
$K^{243} f = \lambda x.f^{K'^{243}} x$, т.е. $\overline{243}\,K = \overline{K'^{243}}$ где $K' = 2^{3^{3^{243}}}$.
Пусть $L = \overline{243}\,K = \overline{(2^{3^{3^{243}}})^{243}} = \overline{2^{243\cdot 3^{3^{243}}}}$.
Шаг 4. $z\,L\,w = Z\,L\,I$:
$$Z\,L = \lambda fx.\,Lf(Lfx) = \overline{2L'}$$где $L' = 2^{243\cdot 3^{3^{243}}}$, итого $Z\,L = \overline{2^{243\cdot 3^{3^{243}}+1}}$.
Нет, аккуратнее: $Z\,n = 2n$ как натуральное число, т.е. $Z\,\overline{n} = \overline{2n}$.
$$Z\,L = \overline{2 \cdot 2^{243\cdot 3^{3^{243}}}} = \overline{2^{243\cdot 3^{3^{243}}+1}}$$Шаг 5. $(Z\,L)\,I$: применяем число Чёрча к $I=\text{id}$.
$\overline{n}\,I = \lambda x.\,I^n\,x = \lambda x.x = I$.
$$\boxed{M =_\beta \lambda x.x}$$Итог: после всех редукций получаем $(\lambda x.x)$ — тождественный комбинатор.
Задача 4. Комбинатор Even
Идея: $\text{Even}\,n$ — применить функцию «переключить бит» $n$ раз к $\mathbf{T}$.
Функция «не»: $\text{Not} = \lambda b.\,b\,\mathbf{F}\,\mathbf{T}$.
$$\boxed{\text{Even} = \lambda n.\,n\,\text{Not}\,\mathbf{T}}$$Проверка:
- $\text{Even}\,\overline{0} = \overline{0}\,\text{Not}\,\mathbf{T} = \mathbf{T}$ ✓ (0 чётное)
- $\text{Even}\,\overline{1} = \text{Not}\,\mathbf{T} = \mathbf{F}$ ✓
- $\text{Even}\,\overline{2} = \text{Not}\,(\text{Not}\,\mathbf{T}) = \mathbf{T}$ ✓
В развёрнутом виде (без имён):
$$\text{Even} = \lambda n.\,n\,(\lambda b.\,b\,(\lambda xy.y)\,(\lambda xy.x))\,(\lambda xy.x)$$Задача 5. Комбинатор Fib
Идея (из императивного): в цикле храним пару $(fib(k), fib(k+1))$, на каждом шаге: $(a,b)\mapsto (b, a+b)$. Начало: $(0,1)$. После $n$ шагов первая компонента равна $fib(n)$.
Нужно:
- Пары: $\text{Pair} = \lambda abf.f\,a\,b$, $\text{Fst} = \lambda p.p\,\mathbf{T}$, $\text{Snd} = \lambda p.p\,\mathbf{F}$.
- Сложение: $\text{Add} = \lambda mnfx.\,mf(nfx)$.
Шаг: $\text{Step} = \lambda p.\,\text{Pair}\,(\text{Snd}\,p)\,(\text{Add}\,(\text{Fst}\,p)\,(\text{Snd}\,p))$
Начало: $\text{Init} = \text{Pair}\,\overline{0}\,\overline{1}$
$$\boxed{\text{Fib} = \lambda n.\,\text{Fst}\,(n\,\text{Step}\,\text{Init})}$$Проверка:
- $n=0$: $\text{Fst}\,\text{Init} = \overline{0}$ ✓
- $n=1$: $\text{Fst}\,(\text{Step}\,\text{Init}) = \text{Fst}\,(\text{Pair}\,\overline{1}\,\overline{1}) = \overline{1}$ ✓
- $n=2$: $\text{Fst}\,(\text{Step}^2\,\text{Init}) = \text{Fst}\,(\text{Pair}\,\overline{1}\,\overline{2}) = \overline{1}$ ✓
- $n=3$: $\text{Fst}\,(\text{Pair}\,\overline{2}\,\overline{3}) = \overline{2}$ ✓
В развёрнутом виде (без имён вспомогательных):
$$\text{Fib} = \lambda n.\,n\,(\lambda p\,f.\,f\,(p\,(\lambda ab.b))\,(\lambda fx.\,(p\,(\lambda ab.a))f((p\,(\lambda ab.b))fx)))\,(\lambda f.\,f\,(\lambda fx.x)\,(\lambda fx.fx))\,(\lambda ab.a)$$