You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Prover9测试失败:将假设设为目标验证出现报错求助

Prover9: "denials share constants"警告与搜索失败的解决办法

我来帮你捋清楚这个问题——你遇到的"denials share constants"警告和"search failed"其实是用Prover9测试时的典型小坑,尤其是当你直接把假设里的具体事实当成目标来证明的时候。

先搞懂警告的本质

Prover9是靠反证法工作的:它会先否定你的目标,把否定后的语句加入到假设集合里,然后尝试推导出矛盾。当你把一个已经在假设里存在的带具体常量的事实(比如parent(adam, jill))设为目标时,它会生成否定语句-parent(adam, jill),这就和原假设里的事实直接矛盾了。但"denials share constants"警告是在提醒你:否定后的目标和现有假设共享所有的常量(比如adam、jill这些),这会让Prover9的搜索策略陷入低效循环,甚至直接终止搜索,因为它找不到有意义的推导路径。

具体的解决步骤

1. 调整假设与目标的划分

如果你就是要验证某条已知事实,正确的做法是把这条事实从assumptions里移到goals里,剩下的作为前提。比如修改你的输入文件:

formulas(assumptions).
parent(eve, jill).
parent(adam, bill).
parent(eve, bill).
parent(ed, mary).
% 把要证明的那条从假设中移除
end_of_list.

formulas(goals).
parent(adam, jill). % 这是你要验证的目标
end_of_list.

这样Prover9就会用剩下的假设(如果有逻辑关联的话)来推导目标,而不是带着矛盾的前提去做无意义的搜索。

2. 修复输入文件的语法问题

你提供的输入最后有pare...,这明显是内容截断了。一定要确保所有公式完整,每个公式块(assumptions和goals)都以end_of_list.结尾,语法错误也会直接导致Prover9搜索失败。

3. 换个更适合测试的场景

如果只是想测试Prover9是否正常工作,建议用需要推导的目标,而不是直接验证已知事实。比如:

formulas(assumptions).
parent(adam, jill).
parent(eve, jill).
female(eve).
mother(X,Y) <-> parent(X,Y) & female(X).
end_of_list.

formulas(goals).
mother(eve, jill).
end_of_list.

这个场景下Prover9需要通过组合前提来推导目标,能更直观地看到它的工作效果。

内容的提问来源于stack exchange,提问作者callum perks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:42:22