在 Prolog 中的全称量词和存在量词

10

我该如何在Prolog中实现以下规则。

我将“No spiders are mammals”这句话写成存在和全称量词:

¬∃x(mammals(X) ∧ spider(X) ) //It is not the case that mammals are spider

∀X(mammals(X) ⇒ ¬spider(X)) //All mammals are non-spider.
1个回答

7
假设您有一个具备以下事实的数据库:
mammals(cat).
mammals(dog).
 ...

spider(blackwidow).
 ...

现在,您可以将您的句子重写为Prolog查询,方法非常简单:

¬∃x(哺乳动物(X)∧ 蜘蛛(X))//不是所有哺乳动物都是蜘蛛

?- \+((mammals(X), spider(X))).
true.

∀X(哺乳动物(X) ⇒ 非蜘蛛(X)) //所有的哺乳动物都不是蜘蛛。

?- forall(mammals(X), \+spider(X)).
true.

有没有办法在“x.pl”环境中实现这些规则?我的意思是将规则添加到数据库中? - user2064809
3
当条件成立时,您可以添加一个成功的过程,只需将查询添加到程序的主体中。例如:no_mammal_is_spider:- \+((mammals(X), spider(X))) - gusbro
谢谢您的回答。您能告诉我如何将以下语句作为规则添加到Prolog中吗?∀X(q(X) OR b(X) ⇒ Mammal(X)) %所有哺乳动物要么是“q”要么“B”。我写了但不知道问题在哪里:C(cat). Mammal(X) :- forall(q(X) V b(X)) 最终,我应该回答这个问题:‘cat’是哺乳动物吗??-mammal(cat) - user2064809
2
所有哺乳动物都是“q”或“b”,可以写成forall(mammals(X), ( q(X) ; b(X) ) )。 - gusbro
哺乳动物(b). 哺乳动物(q). forall(哺乳动物(X), ( q(X) ; b(X) ) ). q(猫). 猫(皮什). 然后我写 ?- 哺乳动物(皮什) 但是我得到的是 false 而不是 true - user2064809
我认为你理解错了。mammal(pishi)返回false是因为你的程序规定只有两个哺乳动物,即b和q,而且它们都是原子。程序中写的forall(...)应该是一个事实,而不是你想要的结果。 - gusbro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接