我使用证明人9进行一阶定理证明,并带有nltk python接口。
对于两个等效公式(没有假设),我得到了不同的结果:
让p1:
-exists x0.(-exists x3 x1.(R0(x3,x0) & R0(x1,x1)) & exists x1 x2.(R0(x1,x2) & R0(x1,x0)))
和p2:
-exists x3.(-exists x0 x2.(R0(x2,x2) & R0(x0,x3)) & exists x1 x0.(R0(x1,x0) & R0(x1,x3)))
使用以下python代码:
import nltk as nk
read_expr = nk.sem.Expression.fromstring
prove_command1 = nk.Prover9Command(goal=read_expr(p1),timeout=20, prover=nk.Prover9())
prove_command2 = nk.Prover9Command(goal=read_expr(p2),timeout=20, prover=nk.Prover9())
print(prove_command1.prove()) # False
print(prove_command2.prove()) # True
现在,奇怪的是,当我为它们中的每一个打印证明时,两者的目标是相等的:
-(exists x (-(exists y exists z (R0(y,x) & R0(z,z))) & (exists z exists u (R0(z,u) & R0(z,x))))).
p1和p2的正确答案是False,我不明白这两个表达式如何可能转换为相同的目标,但是答案却有所不同。
有什么建议吗?