我尝试用否定的请求询问知识库。所以在解决之前,补码(这里是positif)被添加到算法使用的子句集中。
有了这些事实:
Spouse(Sarah,Andrew)
Spouse(Sophie,Edward)
和论文公理:
(∀ [a , b , c ] ( ( ( Spouse(a,c) ∧ Spouse(b,c) ) ⇒ Egal(a,b) ) ))
this axiom mean onely two people can be spouse
(∀ [a , b ] ( ( Spouse(a,b) ⇔ Spouse(b,a) ) ))
(∀ [x ] ( Egal(x,x) ))
(∀ [x , y ] ( ( Egal(x,y) ⇒ Egal(y,x) ) ))
reverse
(∀ [x , y , z ] ( ( ( Egal(x,y) ∧ Egal(y,z) ) ⇒ Egal(x,z) ) ))
transitive
(∀ [x ] ( ( Egal(x,x) ⇒ Egal(x,x) ) ))
子句变成 CNF
( ( ¬ Spouse(a0,c0) ∨ ¬ Spouse(b0,c0) ) ∨ Egal(a0,b0) )
( ¬ Spouse(a1,b1) ∨ Spouse(b1,a1) )
( ¬ Spouse(b2,a2) ∨ Spouse(a2,b2) )
Egal(x0,x0)
( ¬ Egal(x1,y0) ∨ Egal(y0,x1) )
( ( ¬ Egal(x2,y1) ∨ ¬ Egal(y1,z0) ) ∨ Egal(x2,z0) )
( ¬ Egal(x3,x3) ∨ Egal(x3,x3) )
我可以要求
配偶(莎拉,安德鲁)或配偶(苏菲,爱德华)
这个请求 ¬Spouse(Sarah,Edward) : Sarah 不是 Edward 的配偶,不工作。
当然,我可以问配偶(莎拉,爱德华)是否是莎拉与爱德华的配偶,没有答案,认为这是错误的。
这种请求有什么问题,因为我不知道我的实现是否存在错误,或者是否不可能这样做(假设是......)。
谢谢你的帮助 !