Prolog用非地面文字实现否定的语义是什么

时间:2018-06-16 18:08:46

标签: prolog negation first-order-logic

我熟悉Prolog作为NaF的否定实现,甚至它对NaF的实现也是不完整的,尤其是。与非地面否定的文字挣扎。我的问题是关于具体的语义。假设您有一个条款p(X) :- q(Y)。这是 \ A x,y(q(y) - > p(x))的分词形式,其是 \ E y q(y) - > \ a x p(x),这确实是prolog实现的语义。但现在考虑我是否有p(X) :- \+ q(Y)。在FOL中,这将表示为 \ E y~q(y) - > \ a x p(x)即“如果q为某些y失败,则p保持每个x”,但这似乎不是Prolog实现的语义。相反,Prolog将要求q在\+ q(y)成功之前每y有限地失败,并且p对于任何x都为真。所以它的语义看起来非常不同,而不仅仅是不完整的。我错过了什么吗?

感谢

1 个答案:

答案 0 :(得分:1)

在Prolog中,如果p(X) :- \+ q(Y).某些p失败,X本身并未充分表达 q对每个Y都适用的概念Y 1}} 因为Prolog不知道有资格测试q的{​​{1}}值的可能范围。因此,它不知道Y无法证明q(Y)的任何值。

我们假设您有以下内容:

q(a).
q(b).
q(c).

valid_y(Y) :- member(Y, [a,b,c,d,e]).

然后你可以写:

p(_) :- valid_y(Y), \+ q(Y).

然后p(_)成功两次Prolog寻求所有解决方案。您可以使用剪切或once/1来避免这种情况。