组合逻辑公理

时间:2009-09-03 17:44:26

标签: logic theory combinators theorem-proving

我正在用组合逻辑进行定理验证的一些实验,这看起来很有希望,但是有一个绊脚石:已经指出在组合逻辑中,确实如此。 I = SKK但这不是一个定理,它必须作为公理添加。有没有人知道需要添加的公理的完整列表?

编辑:你当然可以手工证明我= SKK,但除非我遗漏了某些东西,否则它不是具有相等性的组合逻辑系统中的定理。话虽如此,你可以将我扩展到SKK ......但我仍然缺少一些重要的东西。取一组子句p(X)和~p(X),这很容易解决普通一阶逻辑中的矛盾,并将它们转换为SK,执行替换并评估S和K的所有调用,我的程序生成以下(我使用'用于Unlambda的反击):

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'k false'k true'k true

看起来我需要的是一套适当的规则来处理部分调用'k和',我只是没看到这些规则应该是什么,以及我在这个领域可以找到的所有文献是为数学家而非程序员的目标读者而写的。我怀疑一旦你理解了答案,答案可能很简单。

3 个答案:

答案 0 :(得分:7)

答案 1 :(得分:2)

您不需要将I定义为公理。从以下开始:

I.x = x
K.x y = x
S.x y z = x z (y z)

SKanything = anything开始,SKanything就是一个身份函数,就像I一样。

所以,I = SKKI = SKS。不需要将I定义为公理,您可以将其定义为将SKK别名的语法糖。

S和K的定义只是公理。

答案 2 :(得分:0)

对于beta等式,通常的公理是完整的,但是不要给予eta平等。库里发现了一组大约三十个公理,以获得完整的β-eta平等。它们被列入Hindley& Seldin的组合子和lambda演算的介绍

Roger Hindley,Curry's Last Problem,列出了我们可能想要的lambda演算之间的映射以及我们没有满足所有这些映射的映射的额外需求。您可能不会太在意所有标准。