Оценка исчисления лямбда с участием церковных цифр
-
16-10-2019 - |
Вопрос
Я понимаю, что Церковное число $ c_n $ выглядит как $ lambda s. lambda z. S $ (... n Times ...) $ s ; z $. Это означает не что иное, как «функция $ s $ применила $ n $ times к функции $ z $».
Возможное определение функции $ mathtt {times} $ является следующим: $ mathtt {times} = lambda m. lambda n. lambda s. М; (n ; s) $. Глядя на тело, я понимаю логику, стоящую за функцией. Однако, когда я начинаю оцениваться, я застрял. Я проиллюстрирую это примером:
$$ begin {align*} ( lambda m. lambda n. lambda s. m ; (n ; s)) ( lambda s. lambda zs ; s ; z) ( lambda s. . lambda zs ; s ; s ; z) mspace {-4em} to^*& rambda s. ( lambda s. lambda zs ; s ; z) ; (( lambda s. lambda zs ; s ; s ; z) ; s)) to^*& rambda s. ( lambda s. lambda zs ; s ; z) ; ( lambda zs ; s ; s ; z) to^*& lambda s. lambda z. ( lambda zs ; s ; s ; z) ; ( lambda zs ; s ; s ; z) ; z end {Align*} $$
Теперь в этой ситуации, если я впервые применяю $ ( lambda zs ; s ; s ; z) ; z $, я получаю желаемый результат. Однако, если я применяю $ ( lambda zs ; s ; s ; z) ; ( lambda zs ; s ; s ; z) $ сначала, как я должен, потому что заявление ассоциативно слева Я получаю неправильный результат:
$ lambda s. lambda z. ( lambda zs ; s ; s ; z) ; ( lambda zs ; s ; s ; z) ; z to lambda s. lambda z. (s ; s ; s ; ( lambda zs ; s ; s ; z)) ; ; z $
Я больше не могу это уменьшить. Что я делаю не так? Результат должен быть $ лямбда с. lambda zs ; s ; s ; s ; s ; s ; z $
Решение
Я думаю, что ваше сокращение верно (хотя я только гладил его, хотя). В конце концов, вы не можете применить $ ( lambda z. Sssz) $ к $ z $, это никогда не появляется в термин. $ lambda z. ffz $ - это $ lambda z. (ff) z $, а не $ lambda z. f (fz) $. Функции в лямбда-калькулусе принимают один аргумент; они эффективно карри: Функция с двумя аргументами реализована как функция одного аргумента, которая принимает первый аргумент и возвращает новую функцию с одним аргументом, которая берет второй аргумент и возвращает результат.
Вы совершили ту же ошибку при определении цифр церкви. Церковное число для $ n $ основана на составлении функции $ n $ times. «Функция $ s $ применяла $ n $ times к функции $ z $» $ lambda s. lambda z. s (s (… s : z)…)) $. То, что вы написали,-это функция $ S $ Applied $ N-1 $ Times к функции $ S $ и, наконец, к $ Z $, что не затрагивает меня как полезный термин.
$ 2 times 3 $, таким образом, $ ( lambda mn s. M (ns)) ( lambda s z. S (s : z)) ( lambda s z. S (s : z)))) $. Я позволю вам проверить, что это уменьшается до $ lambda s z. s (s (s (s (s (s : z)))) $.