gpt4 book ai didi

Prolog 暗示否定谓词

转载 作者:行者123 更新时间:2023-12-02 04:27:17 25 4
gpt4 key购买 nike

如何在 PROLOG 中编写以下规则:if P then not Q

我知道您可以轻松地编写 if P then Q 谓词,例如 q(X) :- p(X),但是如何否定 q/1 谓词?我不想使用 non_q/1 等其他语义定义新谓词。

最佳答案

子句“if P then not Q”在逻辑上等价于否定子句“not P OR not Q”。因此它是 Horn clause没有正文字,并且作为 SLD 定理证明和 Horn 子句对应关系的应用,可以在 Prolog 编程中表示为目标子句或“查询”:

?- P, Q.

让我们稍后再回到这个想法。

但是目标条款可能不是您想要的那种表示形式。构成 Prolog“知识库”的事实和规则是确定子句,即每个 Horn 子句都只有一个正文字。 “If P then not Q”没有正字面量,因此在这个意义上它不能被表示(作为定语从句)。

上面显示的目标子句“询问”P 和 Q 是否都可以被证明。 Prolog 提供了“否定即失败”的概念,因此“询问”“not P OR not Q”是否成立的更自然的方式是:

?- not((P,Q)).

那么如果 P 或 Q 失败,我们就会成功,如果两者都成功,我们就会失败。

但是,如果您的目的是断言知识库中的某些内容是否定,Prolog 自然不支持这一点。根据您的应用程序,可能有一种合理的方法来解决 Prolog 语法并完成所需的任务(总是有一种不合理的方法来做到这一点,正如您使用 non_q 谓词所暗示的那样) .

关于Prolog 暗示否定谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6332539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com