在Prolog中,谓词

在Prolog中,谓词,prolog,functor,Prolog,Functor,以下序言目标令人满意吗 croire(X, aime(lila, pizza)) = croire(ali, aime(Y, pizza))? 我发现一个Prolog文档提出了这个问题,答案是:“不,这个目标在语法上不正确”,但当我在SWI Prolog中尝试时,它没有显示任何错误,它给了我一个合理的答案: X = ali, Y = lila. 有什么我错过的吗?或者文档的答案是错误的?最重要的是,查询在GNU Prolog中也是可以满足的(请注意,Prolog查询总是以点结束,而不是问号)

以下序言目标令人满意吗

croire(X, aime(lila, pizza)) = croire(ali, aime(Y, pizza))?
我发现一个Prolog文档提出了这个问题,答案是:“不,这个目标在语法上不正确”,但当我在SWI Prolog中尝试时,它没有显示任何错误,它给了我一个合理的答案:

X = ali,
Y = lila.

有什么我错过的吗?或者文档的答案是错误的?

最重要的是,查询在GNU Prolog中也是可以满足的(请注意,Prolog查询总是以点结束,而不是问号):

那么这意味着什么呢?我们询问变量
X
Y
是否有赋值,使得术语
croire(X,aime(lila,pizza))
croire(ali,aime(Y,pizza))
相等。GNU Prolog返回一个答案,即
X=ali,Y=lila
。让我们看看我们在应用此替代时获得了哪些术语:

croire(ali,aime(lila,pizza))=croire(ali,aime(lila,pizza))

因为一个术语肯定等于它本身,所以这个替换满足相等谓词。另一方面,
X=reine,Y=grenouille
导致

croire(reine, aime(lila, pizza)) = croire(ali, aime(grenouille, pizza))
没有进一步的假设,这是错误的

备注:我认为在这种情况下,“可满足”一词相当令人困惑。尽管我应该更清楚,但我仍在努力描述发生的事情,但我会尝试:

Prolog的推理机制是旨在推导矛盾的解决方案,但矛盾是一个不可满足的公式。在这种特殊情况下,我们解析
Z!=Z
with
croire(X,aime(lila,pizza))=croire(ali,aime(Y,pizza))
以获取(不可满足的)空子句

如果我们以肯定的方式写下子句集,它看起来是这样的:

∀Z (Z=Z) ⊃ ∃X ∃Y (croire(X, aime(lila, pizza)) = croire(ali, aime(Y, pizza)))
将量词拉到前面,我们得到:

∃Z ∃X ∃Y ( Z=Z ⊃  (croire(X, aime(lila, pizza)) = croire(ali, aime(Y, pizza))) )

现在,如果
Z=Z⊃  (croire(X,aime(lila,pizza))=croire(ali,aime(Y,pizza)))
是可满足的,那么它的存在闭包是有效的。我发现用这种方式很难做到精确,通常只说一个问题的答案(替换)。然后,我可以将通过应用答案替换获得的子句集称为unsatifiable,而不会产生混淆。

最重要的是,查询在GNU Prolog中也是可以满足的(请注意,Prolog查询总是以点结束,而不是问号):

那么这意味着什么呢?我们询问变量
X
Y
是否有赋值,使得术语
croire(X,aime(lila,pizza))
croire(ali,aime(Y,pizza))
相等。GNU Prolog返回一个答案,即
X=ali,Y=lila
。让我们看看我们在应用此替代时获得了哪些术语:

croire(ali,aime(lila,pizza))=croire(ali,aime(lila,pizza))

因为一个术语肯定等于它本身,所以这个替换满足相等谓词。另一方面,
X=reine,Y=grenouille
导致

croire(reine, aime(lila, pizza)) = croire(ali, aime(grenouille, pizza))
没有进一步的假设,这是错误的

备注:我认为在这种情况下,“可满足”一词相当令人困惑。尽管我应该更清楚,但我仍在努力描述发生的事情,但我会尝试:

Prolog的推理机制是旨在推导矛盾的解决方案,但矛盾是一个不可满足的公式。在这种特殊情况下,我们解析
Z!=Z
with
croire(X,aime(lila,pizza))=croire(ali,aime(Y,pizza))
以获取(不可满足的)空子句

如果我们以肯定的方式写下子句集,它看起来是这样的:

∀Z (Z=Z) ⊃ ∃X ∃Y (croire(X, aime(lila, pizza)) = croire(ali, aime(Y, pizza)))
将量词拉到前面,我们得到:

∃Z ∃X ∃Y ( Z=Z ⊃  (croire(X, aime(lila, pizza)) = croire(ali, aime(Y, pizza))) )

现在,如果
Z=Z⊃  (croire(X,aime(lila,pizza))=croire(ali,aime(Y,pizza)))
是可满足的,那么它的存在闭包是有效的。我发现用这种方式很难做到精确,通常只说一个问题的答案(替换)。然后,我可以将通过应用答案替换获得的子句集称为“不可满足”,而不会感到困惑。

您可以发布一个链接到声称这一点的文档吗?我认为这似乎涉及认知逻辑。这是一种可以在Prolog中模拟的逻辑形式,但可能需要一些额外的基础设施。它是法语的,你觉得可以吗?问号是什么使它在语法上incorrect@CapelliC由于OP运行了它并得到了结果,我认为这只是问题中的一个符号错误。但是,如果引用(但未显示)的文本确实包含问号作为输入语法的一部分,那么它确实是错误的。你能发布一个链接到声称这一点的文档吗?我认为这似乎涉及认知逻辑。这是一种可以在Prolog中模拟的逻辑形式,但可能需要一些额外的基础设施。它是法语的,你觉得可以吗?问号是什么使它在语法上incorrect@CapelliC由于OP运行了它并得到了结果,我认为这只是问题中的一个符号错误。但是,如果引用(但未显示)的文本确实包含问号作为输入语法的一部分,那么它确实是错误的。反例中有一点混淆:替换
X=reine,Y=grenouille
导致
croire(reine,aime(lila,pizza))=croire(ali,aime(grenouille,pizza))。
;-)你完全正确,谢谢!这个错误现在应该纠正了。还要感谢@false纠正了我的法语拼写。从逻辑上讲,查询首先被否定。如果发现否定查询的反驳,则表示肯定(原始)查询是可满足的!表达得很好。这可以归结为:罗宾逊关于子句集的决议不是很完整,但它是反驳-完整的。你的反例中有一点混乱:替换
X=reine,Y=grenouille
导致
croire(reine,aime(lila,pizza))=croire(ali,aime(grenouille,pizza))。
;-)你是com