【问题标题】:Are PROLOG facts bilateral?PROLOG 事实是双边的吗?
【发布时间】:2018-03-26 11:24:57
【问题描述】:

所以我刚刚开始在 PROLOG(SWI 发行版)中编程。我有很好的逻辑基础,我熟悉事实、规则、量化和所有这些词汇。

据我所知,您可以定义一个事实,例如:

married(a,b).

而且我知道,如果您进行如下查询:

?: married(X,b).

答案将是“a”。我的问题是,如果我想制定一个使用先前声明的事实的规则,它会认为“a 与 b 结婚”,但它会考虑“b 与 a 结婚”还是我必须声明另一个事实喜欢:

married(b,a).

让它工作?任何可以表示为事实的双边关系都是如此。

【问题讨论】:

  • 什么是cuantificators?
  • 也许我写错了(对不起我的英语!)。我的意思是谓词逻辑“cuantificators?”例如 Exists(X) 或 ForAll(X)。
  • 无需为您的英语道歉。我确定我不懂你的语言。 quantification 是正确的词吗?
  • 是的,就是这样。谢谢。

标签: prolog


【解决方案1】:

你的意思是如果关系是自动对称的?然后不-假设您有一个带有edge(a,b) 的有向图,那么您不希望推断出另一个方向edge(b,a)。另外,arity 大于 2 的关系呢?

您始终可以将谓词的对称闭包创建为:

r_sym(X,Y) :-
  r(X,Y).
r_sym(X,Y) :-
  r(Y,X).

使用新的谓词名称可防止无限的派生链r(X,Y) -> r(Y,X) -> r(X,Y) -> ....

【讨论】:

  • 没有考虑图表情况,这很有意义。非常感谢您的回答!
猜你喜欢
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多