Уменьшение этого лямбда-выражения - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь попрактиковаться в бета-уменьшении, но я застрял в том, как уменьшить эту проблему:

(λx((λy.x)(λx.x))x)y

Внешний λx, очевидно, будет заменен y, но должен ли я все жепродолжить сокращение ((λy.x)(λx.x))?Что мне здесь не хватает?

1 Ответ

0 голосов
/ 09 декабря 2018

Я пытаюсь попрактиковаться в бета-уменьшении, но я застрял в том, как уменьшить эту проблему:

(λx((λy.x)(λx.x))x)y

Чтобы выполнить первое β-сокращение, вы должны посмотреть напеременные x ограничены внешней λx, то есть

(λx((λy.x)(λx.x))x)y
        ^        ^  

Обратите внимание, что во внутренней λx.x затеняется внешняя лямбда, поскольку она использует то же имя переменной.Таким образом, граница x здесь привязана к этой внутренней лямбде, а не к внешней.

Другая проблема состоит в том, что если вы замените y на x в λy.x, тогда y будет захваченвнешняя лямбда.Этого не может быть, поэтому вам нужно выполнить α-преобразование (переименование) на λy.x, чтобы избежать захвата.

Итак, сначала α-преобразование, β-уменьшение

  (λx((λy.x)(λx.x))x)y
→ (λx((λz.x)(λx.x))x)y
→    ((λz.y)(λx.x))y

Если вы хотите продолжить, то λz.y возвращает y для любого ввода,

  ((λz.y)(λx.x))y
→ yy

Обратите внимание, что λ-исчисление не устанавливает стратегию сокращения, оно только устанавливает отношение эквивалентностимежду сроками.Таким образом, вы можете выбрать другой порядок сокращения.Например, вы могли бы сначала β-уменьшить внутренний β-redex (λy.x)(λx.x).

  (λx((λy.x)(λx.x))x)y
→ (λx(xx)y
→ yy

Это позволило бы избежать α-преобразования.

...