你如何减少这个 lambda 演算表达式?

How do you reduce this lambda calculus expression?

如何简化这个 lambda 演算表达式? 我正在尝试使用具有给定定义的 lambda 演算将 NOT FALSE 减少为 TRUE:

NOT = (λb.λx.λy.b y x)
FALSE = (λx.λy.y)
TRUE = (λx.λy.x)
  NOT FALSE
= { expand definitions }
  (λb.λx.λy.b y x) (λx.λy.y)
= { beta-reduce, alpha-rename to avoid capture }
  λx.λy.(λa.λb.b) y x 
= { beta-reduce inside lambda, twice }
  λx.λy.x
= { definition of TRUE }
  TRUE

给定-

NOT = (λb.λx.λy.b y x)
FALSE = (λx.λy.y)
TRUE = (λx.λy.x)

评价-

NOT FALSE
---
 \
(λb.λx.λy.b y x) FALSE      β [b := FALSE]
 --       -      -----
          _______/
         /
(λx.λy.FALSE y x) 

我们已经可以看到 NOT 只是将参数反转为 FALSE,这实际上与 TRUE 相同。通过减少 lambda 内部,我们可以证明它们的计算结果相同 -

(λx.λy.FALSE y x) 
       -----
         \
(λx.λy.(λx.λy.y) y x)       β [x := y]
        --       -
         
(λx.λy.(λy.y) x)            β [y := x]
        __    _
         ____/
        /
(λx.λy.x)                   = TRUE