Я читаю книгу "Хаскель из первых принципов".На странице 12 мы учимся сокращать лямбда-выражения.
![enter image description here](https://i.stack.imgur.com/6hXWO.png)
Я не понимаю, почему символ точки между λz и (λm.λn.m) исчез в шаге 3. Когда на шаге 3 я заменил x на (λm.λn.m), я подумал, что следует заменить только x, а не точку перед ним.Поэтому я бы ожидал (λy.λz. (λm.λn.m) z (yz)) (λp.p) вместо (λy.λz (λm.λn.m) z (yz)) (λp.p)
Вот мой анализ
(λxyz.xz (yz)) (λm.λn.m) (λp.p)
Сделайте карри явным.
(λx.λy.λz.xz (yz)) (λm.λn.m) (λp.p)
Замените x =(λm.λn.m)
(λy.λz. (λm.λn.m) z (yz)) (λp.p)
Заменить y =(λp.p)
(λz. (λm.λn.m) z ((λp.p) z))
Теперь заметим, что λz не имеетаргументы.Таким образом, остается только уменьшить (λm.λn.m) z ((λp.p) z)
(λm.λn.m) z ((λp.p) z)
Заменить m = z
(λn.z) ((λp.p) z)
Здесь мы имеем λn.z (что-то),Но λn.z всего - это просто z.(Так как тело λn.z - это просто z, которое не содержит n)
z
Вспоминая λz перед шагом 4, мы получаем
λz.z
Таким образом, мы получаем тот же ответ, что и в книге.