Оценка лямбда-исчисления с использованием церковных цифр


10

Я понимаю, что церковная цифра выглядит как λ s . λ z . s (... n раз ...) . Это означает не что иное, как «функция примененная раз к функции ».cnλs.λz.ss n zszsnz

Возможное определение функции следующее: . Глядя на тело, я понимаю логику функции. Однако, когда я начинаю оценивать, я застреваю. Я проиллюстрирую это на примере:т я м е с = λ м . λ n . λ s . мtimestimes=λm.λn.λs.m(ns)

(λm.λn.λs.m(ns))(λs.λz.ssz)(λs.λz.sssz)λs.(λs.λz.ssz)((λs.λz.sssz)s))λs.(λs.λz.ssz)(λz.sssz)λs.λz.(λz.sssz)(λz.sssz)z

Теперь в этой ситуации, если я сначала применю , я получу желаемый результат. Однако, если я , как я должен, потому что приложение ассоциативно слева, я получаю неправильный результат:( λ z . s(λz.sssz)z(λz.sssz)(λz.sssz)

λs.λz.(λz.sssz)(λz.sssz)zλs.λz.(sss(λz.sssz))z

Я больше не могу уменьшить это. Что я делаю неправильно? Результат должен бытьλs.λz.ssssssz


Церковные цифры в вашем начальном сроке неверны. 2 представлен , а не . λ s . λ z . s s zλs.λz.s(sz)λs.λz.ssz
Uday Reddy

Ответы:


7

Я думаю, что ваше сокращение является правильным (я только оценил это, хотя). В конце концов, вы не можете подать заявку к z , это никогда не появляется в термине. λ z . f f z является λ z . ( f f ) z , а не λ z . f ( f z ) . Функции в лямбда-исчислении принимают один аргумент; они эффективнокарри(λz.sssz)zλz.ffzλz.(ff)zλz.f(fz): функция с двумя аргументами реализована как функция с одним аргументом, которая принимает первый аргумент и возвращает новую функцию с одним аргументом, которая принимает второй аргумент и возвращает результат.

Вы сделали ту же ошибку при определении церковных цифр. Церковная цифра для основана на составлении функции n раз. «Функция s применяется n раз к функции z » λ s . λ z . s ( s ( snnsnz . Вы написали, что функция s применяется n - 1 раз к функции s и, наконец, к z , что не кажется мне полезным термином.λs.λz.s(s(sz)))sn1sz

, таким образом ( λ m n s . M ( n s ) ) ( λ s z . S ( s2×3 . Я позволю вам проверить, что оно сводится к λ s z . s ( s ( s ( s ( s ( s)(λmns.m(ns))(λsz.s(sz))(λsz.s(s(sz))) .λsz.s(s(s(s(s(sz)))))


Что касается вашего абзаца, вы правы, и я знал об этом. Меня просто поразило, что применение правильно ассоциативного действительно дает правильный результат. Что касается второго абзаца: вы правы. Использование без скобок было ошибочным с моей стороны, опять же из-за левой ассоциативности приложения. Теперь я снова уменьшу все это и посмотрю, действительно ли мое отсутствие скобок привело к моей ошибке!
codd

Это сделал. Вы заметили, что мои обозначения подразумевают неправильный порядок подачи заявки, что решило проблему! Принимая ваш ответ.
codd
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.