根据我在uni的硬件需求,我需要将一些Horn子句转换为Prolog,但是我不知道该怎么做。我找到了一些指南,但是他们仅凭一个事实就描述了如何做。那么,您能给我一个简短的例子吗?

例如,约翰美丽而富有

我们可以将其转换为:not(Beautiful(John))^ not(Rich(John)),这是Horn子句对吗?那么如何将其翻译成Prolog?

另一个例子每个人都爱一个人。 Horn子句:∀X∃YLoves(X,Y)如何在Prolog中实现?

提前Thx

最佳答案

对于第一个问题

john :- beautiful, rich.


或者有类似的东西:

beautiful(john).
rich(john).


与查询:

beautiful(X),rich(X).


基本上,序言中的每个规则都是一个号角子句。
根据定义,逻辑程序是由Horn子句组成的程序。
在序言中,当您有一条规则声明为:

a1(X):-a2(X),a3(X),...,an(X)


是horn子句,因为它被翻译为:

a1 or not a2 or not a3 or ... or not an


因此,对于第二个问题:
在序言中,当您定义规则时就暗含了通用量词
不影响序言子句。
因此,您需要否定句子,以便可以转换存在量词
成为通用的
所以你有了:

 ∀X∃YLoves(X,Y)


然后您否定:

 ∀X ∀Y false <- Loves(X,Y))


转换为:

:- loves(X,Y).

关于prolog - 霍恩条款到序言,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22439171/

10-16 14:20