回想一下,K 组合子是一个常数函数。它总是返回它的第一个参数:
Kxy = x for all y
在《模仿一只知更鸟》一书中,作者展示了一个包含会说话的鸟儿的魔法森林的例子。鸟类有以下行为:
给定任何鸟 A 和 B,如果你向 A 喊 B 的名字,那么 A 会通过向你呼唤某种鸟的名字来回应:我们将用 AB 指定这只鸟。
假设森林由三只鸟 A、B 和 C 组成。是否有可能至少有一只鸟表现得像 K 组合子?
下表显示了魔法森林中鸟类可能的一组行为。第一列是森林中每只鸟的名字。最上面一行有可以叫到每只鸟的名字。身体是鸟对名字的反应。例如,如果你向鸟 A 喊 A 的名字,那么鸟 A 会用 C 回应(见第 2 行第 2 列)。简而言之,AA = C。如果你向鸟 A 喊 B 的名字,那么鸟 A 会用 B 回应(见第 2 行第 3 列)。简而言之,AB = B。AC 的空槽应该输入什么值?
| A B C
------------------
A | C B
B | B B B
C | A A A
让我们看看我们是否可以让鸟 A 表现得像 K 组合器。上面的一组值看起来很有希望:
对于所有 y,AA = C 和 Cy = A。也就是说,对于所有 y,(AA)y = A。
对于所有 y,AB = B 和 By = B。也就是说,对于所有 y,(AB)y = B。
应该在空槽(AC)中放置什么值?考虑所有情况:
如果 AC = A,那么对于所有 y,Ay 的值必须是 C,这显然是错误的。因此 A 不能是空槽的正确值。
如果 AC = B,那么对于所有 y,By 的值必须是 C,这显然是错误的。因此 B 不可能是空槽的正确值。
如果 AC = C,那么对于所有 y,Cy 的值必须是 C,这显然是错误的。因此 C 不能是空槽的正确值。
因此,对于每个 y,都不能在空槽中放置任何值来满足条件 (AC)y = C。
据我所知,不可能让任何鸟表现得像 K 组合子。我希望你能证明我错了。