我正在寻找用 GNU Prolog 编写的重言式检查器的开源实现(也可以接受 SWI-Prolog 的实现,但首选 GNU Prolog)。
我想为程序输入提供如下查询:
A and (B or C) iff (A or B) and (A or C).
或者
3^2 * (X + 2) == (9 * X) + 18.
当然,符号可以不同,如下所示:
(3 power 2) mul (X plus 2) equals (9 mul X) plus 18.
我期望的结果是布尔答案,例如“是/否”、“等于/不同”、“找到证明/未能找到证明”或类似的。
我在ftp://ftp.cs.yorku.ca/pub/peter/SVT/GNU/上找到了 GNU-Prolog 的重言式检查器,但没有附加许可证,也不知道如何应用Gnu Prolog 算术约束和算术功能为了用算术扩展逻辑模型。
- 还有其他类似的求解器吗?
- 一些示例如何使用算术能力来扩展模型。
谢谢,格雷格。
PS 根据算术,我正在寻找部分支持 - 我只想处理一些基本情况,如果提出的解决方案能够正确处理经典逻辑并打开,我可以使用简单的启发式手动编码(也欢迎 gnu-prolog 整数函数示例) -源代码会很好扩展:)。
PPS 正如@larsmans 所指出的,根据哥德尔的不完备性定理,没有办法证明“所有”公式。这就是为什么我正在寻找可以证明的东西,可以从给定的公理和规则集证明什么,因为我正在寻找 Gnu Prolog 程序,我正在寻找此类公理和规则集的示例;)。当然检查器可能会失败 - 我期待它会在“某些”情况下工作:)。- 另一方面,有哥德尔的完备性定理;)。