一阶逻辑中的大象

时间:2015-10-10 15:40:11

标签: prolog artificial-intelligence first-order-logic

我有这些事实(el代表大象):

el(Sam)    el(Clyde)    el(Oscar)
pink(Sam)
gray(Clyde)  likes(Clyde, Oscar)
pink(Oscar)Vgray(Oscar)    likes(Oscar, Sam)

现在,我想证明(?):一些灰色的大象喜欢粉红色的大象,转换为:(存在x)(el(x)/ \ grey(x)/ \ (存在y)(el(y)/ \ pink(y)/ \ likes(x,y))。所以,我们需要将其否定并解决(?)它为基础,以达到无效(? )。

否定是(将使用~来表示否定):

~el(x) V ~gray(x) V ~el(y) V ~pink(y) V ~likes(x, y)

我看到它的方式,我将分配xy值(Sam,Clyde或Oscar)并在后面插入后面的语句,以“杀死”已存在的事实

我的尝试:

我设置x = Clyde, y = Oscar,这给了我:

~el(Clyde) V ~gray(Clyde) V ~el(Oscar) V ~pink(Oscar) V ~likes(Clyde, Oscar)

如果我放入基地,“杀死”他们的“对”,基地变为:

el(Sam)
pink(Sam)
gray(Oscar)    likes(Oscar, Sam)

现在怎么样?我们用尽了大象!

理想情况下,我希望x' = Oscar, y' = Sam,所以我会得到:

~el(Oscar) V ~gray(Oscar) V ~el(Sam) V ~pink(Sam) V ~likes(Oscar, Sam)

会进入基地并杀死所有东西,但~el(Oscar)仍然活着!我该怎么办?

后续问题:

基地:

a
b
c V d

然后我放入基地~a/\~b/\~c/\~d。基地的一切都会以同样的方式消失?我的意思是V运算符不会影响事物吗?

1 个答案:

答案 0 :(得分:2)

你可以这样:

 el(sam).
 el(clyde).
 el(oscar).
 pink(sam).
 grey(clyde).
 likes(clyde,oscar).
 likes(oscar,sam).
 canbe(oscar,grey).
 canbe(oscar,pink).

 gelephant_likes_pelephant(GE,PE):-
   grey(GE),el(GE),
   pink(PE),el(PE),
   likes(GE,PE).


 gelephant_likes_pelephant(GE,PE):-
   canbe(GE,grey),el(GE),
   pink(PE),el(PE),
   likes(GE,PE).

gelephant_likes_pelephant(GE,PE):-
  grey(GE),el(GE),
  canbe(PE,pink),el(PE),
  likes(GE,PE).

Qs的:

?- gelephant_likes_pelephant(GE,PE).
GE = oscar,
PE = sam ;
GE = clyde,
PE = oscar.

你必须小心如何使用像canbe / 2这样的谓词。因为它说奥斯卡可以是灰色或粉红色。然后我的询问是说哪些灰色大象喜欢哪个粉红色的大象,答案可以解释为:如果奥斯卡是灰色的大象那么奥斯卡喜欢山姆或者如果克莱德喜欢奥斯卡那么奥斯卡是一只粉红色的大象。