评估没有足够的参数的SKI组合器



我的任务是证明

S(KK(I = K

现在,由于S采取了三个论点,我只是停留在一开始不知道如何解决这个问题。我看到两个论点,即(KK(,但没有第三个论点我可以"发现"。在这种情况下会发生什么?它已经对我有用了,只需省略S x y z = xz(yz( 中的z,从而产生KK(I(并因此产生K。不过,这对我来说似乎是不对的,所以我想在这里问。这是正确的做法吗?

例如,我也不明白KI会发生什么,因为K也需要两个参数并且只得到I。我的解决方案是正确的还是我必须采取不同的做法?

解决您问题的最简单方法是使用 eta 转换。 也就是说,每个项 M 的行为都像一个项 (λx.M x((当然,x 在 M 中不可能是自由的(。因此,如果要评估的组合器缺少一些参数,则可以对项进行eta转换,然后应用这些组合器。

根据您的示例,您需要两次 eta 转换。下面给出了第一个之后的减少。

S(KK)I -> λx.S(KK)Ix -> λx.KKx(Ix) -> λx.K(Ix) 

现在你有了缺少第二个参数的外部组合子 K。如果你对最外层的项进行eta转换:λy。(λx.K(Ix(( y,你会得到 λy。K(Iy(,这不是很有趣。但是您可以将 eta 转换应用于该术语的子项,例如 lambda 抽象体。因此,您可以转换 λx。K(Ix( 至 λx。(λy.K(Ix( y(。这导致 λx.λy。Ix,简化为 λx.λy.x,该术语是K组合子的定义。瞧!

事实上,你可以在不使用eta转换的情况下证明组合子的等价性,但是你需要使用一些不太友好的公理作为重写规则(有关详细信息,请参阅Henk P. Barendregt (1984(的第7章(。Lambda演算:它的语法和语义(。

我的想法是S(KK(I是一个接受单个参数的函数 - 称之为z。当我们用任意z调用这个函数时会发生什么?

S(KK)Iz -> KKz(Iz) -> Kz

因此,使用z调用S(KK(I与使用z调用K完全相同。因此,S(KK(IK是相同的函数。

最新更新