我有这个代码,我需要将其翻译成CNF(这是为考试做准备,所以不是作业!):
p,q
r :- q
false :- p , s
s :- t
t
这就是我的所作所为:
p ^ q ^ (r V ~q) ^ (~p V ~s) ^ (s V ~t) ^ t
= r
我的推理是否正确?
这里还有另一个问题:
您想使用r查询数据库。你应该在数据库中添加什么子句?
我根本不明白这一点。简化后,数据库基本上是r。 r是真的,不是吗?
答案 0 :(得分:1)
问题“您想使用r。什么子句查询数据库,是否应该添加到数据库中?”指所谓的refutation proofs。在反驳证明中,不能证明:
Database |- Query
而是一个证据:
Database, ~Query |- f
在经典逻辑中,两者是相同的。所以在你的例子中,你需要证明p ^ q ^(r V~q)^(~p V~s)^(s V~t)^ t ^ ~r导致矛盾。
再见
编辑14.02.2019:
如果有人对Prolog代码感兴趣,可以将propote的公式转换为CNF,请参阅此处https://gist.github.com/jburse/ca8d01e26c7cf176ea65eeb1bf916ea0#file-aspsat-p(第43-87行,需要Prolog Commons列表和ordset),您可以将公式F
转换为CNF {{ 1}},通过调用C
。
已经从普通和包含的条款中清除了所获得的CNF。如果有人对CNF测试用例更感兴趣,请参阅此处http://gist.github.com/jburse/bf99239903847322321fabf6f49a5b84#file-casescls-p,其中包含来自Principia Mathematica的数百个重言式,以及其他十分之一的谬误。