Logic 将一阶逻辑转换为CNF

Logic 将一阶逻辑转换为CNF,logic,artificial-intelligence,constraints,constraint-programming,conjunctive-normal-form,Logic,Artificial Intelligence,Constraints,Constraint Programming,Conjunctive Normal Form,我正在努力用它来解决约束满足问题。在一阶逻辑中,问题很容易用几个离散域变量和一些谓词来表示 然而,MiniSat和其他CSP解算器(我到目前为止见过)都希望他们的输入是CNF格式的。所以我在寻找一种“预处理器”,它可以将一阶逻辑表达式转换成CNF 你想从比利时Leuven的KATOLIEKE大学考虑IDP3:IDP3命题一阶理论(带归纳定义的一阶逻辑,集合,有界算术),应用MiSIST. 另一个选择是Koen Claessen(Chalmers U,瑞典)的悖论。Paradox是一种一阶逻辑的有

我正在努力用它来解决约束满足问题。在一阶逻辑中,问题很容易用几个离散域变量和一些谓词来表示

然而,MiniSat和其他CSP解算器(我到目前为止见过)都希望他们的输入是CNF格式的。所以我在寻找一种“预处理器”,它可以将一阶逻辑表达式转换成CNF


你想从比利时Leuven的KATOLIEKE大学考虑IDP3:IDP3命题一阶理论(带归纳定义的一阶逻辑,集合,有界算术),应用MiSIST.


另一个选择是Koen Claessen(Chalmers U,瑞典)的悖论。Paradox是一种一阶逻辑的有限模型查找器,它也从转换为SAT开始,然后使用MiniSAT求解公式。Paradox的源代码可以从

下载,如果我误解了你的问题,我很抱歉,但我想知道CNF是否有足够的一阶逻辑表达能力。例如,“任何人的父亲的兄弟(X)是他的叔叔(X的)”可以简单地用一阶逻辑翻译。但是(就我对条款的记忆而言),在我看来,这些条款无法表达这种普遍性(更准确地说,是“任何人”)。如果我错了,那我很抱歉!不,@Fezvez,我想你基本上是对的,这就是为什么我指定了一个离散域。对于具有无限域的变量,不可能存在格式良好的CNF,因为需要无限多的变量。对于有限域,我们可以扩展一阶逻辑的anys和exists,在谓词逻辑中生成一个(长的)语句序列。Alexander,这些看起来几乎正是我所需要的,但我早就离开了这个项目。因此,我想知道。。。你是否有自己使用它们的经验?(你是怎么发现悖论的?)亲爱的理查德,我拿到了博士学位。来自鲁汶,所以我知道那里有什么样的话题很活跃。不过,我对这些工具都没有经验。谢谢你的帮助,@Alexander。我会试着在某个时候测试这些,看看它们对我是如何起作用的,但与此同时,我会把这个问题留着,以防它引起更多的思考。