如何在 lambda 演算中正确减去 TRUE 和 TRUE?

How to substract TRUE and TRUE in lambda calculus correctly?

我正在尝试了解 lambda 演算。但是,我有点卡在这个表达式上:TRUE 和 TRUE。我不知道你如何从

((\T F -> T) (\T F -> T)) 

(\F T F -> T)

,不是

(\F -> (\T F -> T))

\ 是 lambda 签名

(\F T F -> T)

(\F -> (\T F -> T))

是一样的。

https://en.wikipedia.org/wiki/Lambda_calculus_definition#Notation:

  • Outermost parentheses are dropped: M N instead of (M N)
  • [...]
  • The body of an abstraction extends as far right as possible: λx. M N means λx. (M N) and not (λx. M) N
  • A sequence of abstractions is contracted: λx. λy. λz. N is abbreviated as λxyz. N

特别是,

(\F -> (\T F -> T))

可以写

(\F -> \T F -> T)

因为我们可以去掉多余的括号,并且外层 lambda 的主体尽可能向右延伸,这样就可以写成

(\F -> \T -> \F -> T)

(\F T F -> T)

根据最后一条规则(收缩)。