序言中的 Horn 子句是什么?
What is Horn clause in prolog?
我不明白序言中的 Horn 子句是什么。
• Horn 子句是一个只有一个肯定文字的子句。
root(X) :- \+ left(X,Y), \+ right(X,Y).
所以这个不是喇叭从句,因为它有多个从句?或者有没有办法将其表达为喇叭条款?
由于\+
表示否定为失败(*),所以你举例的子句不具有纯逻辑意义,而是取决于Prolog的评估策略。在经典逻辑中,喇叭子句是一个至多有一个肯定文字的子句。使用逻辑符号,它可以写成 ¬ A1 ∨ ... ∨ ¬ An ∨ B
等价于 A1 ∧ ... ∧ An → B
。用人类的话来说,这意味着:假设 A1 到 An 可以被证明,那么我们可以证明 B。在 Prolog 中,我们将其倒过来写为 b :- a1, ..., an.
有一种特殊的形式称为事实,当我们知道某事是真实的而无需状况。从逻辑上讲,您可以将其写为 true → A
,在 Prolog 中,这将变为 a.
.
(*) 一个公式是错误的,因为它无法被证明是正确的。您可以 google 寻找的另一个密切相关的关键字是封闭世界假设。
我不明白序言中的 Horn 子句是什么。 • Horn 子句是一个只有一个肯定文字的子句。
root(X) :- \+ left(X,Y), \+ right(X,Y).
所以这个不是喇叭从句,因为它有多个从句?或者有没有办法将其表达为喇叭条款?
由于\+
表示否定为失败(*),所以你举例的子句不具有纯逻辑意义,而是取决于Prolog的评估策略。在经典逻辑中,喇叭子句是一个至多有一个肯定文字的子句。使用逻辑符号,它可以写成 ¬ A1 ∨ ... ∨ ¬ An ∨ B
等价于 A1 ∧ ... ∧ An → B
。用人类的话来说,这意味着:假设 A1 到 An 可以被证明,那么我们可以证明 B。在 Prolog 中,我们将其倒过来写为 b :- a1, ..., an.
有一种特殊的形式称为事实,当我们知道某事是真实的而无需状况。从逻辑上讲,您可以将其写为 true → A
,在 Prolog 中,这将变为 a.
.
(*) 一个公式是错误的,因为它无法被证明是正确的。您可以 google 寻找的另一个密切相关的关键字是封闭世界假设。