【问题标题】:Prolog - for all implicationProlog - 对于所有含义
【发布时间】:2014-03-04 21:04:42
【问题描述】:

如何在 Prolog 中表示一个 for-all 的含义?

逻辑上:

x is given

For all a, b . [P(a) AND P(b) AND P(x) ---> Q(a,b)]

序言是

pred(X) :- ....

【问题讨论】:

  • q(A,B) :- p(A), p(B), p(x).
  • SWI 也有forall/2,顺便说一句。
  • @mbratch:但不是所有的 A 和 B 都固定了 x?
  • 为什么不是?该子句说,对于任何AB,如果p(A)p(B), and p(x)` 为真,那么q(A,B) 为真。
  • 我需要 x 作为谓词的参数

标签: prolog logic


【解决方案1】:

你可以把你的公式改写成

not exists A,B . not (p(A) and p(B) and p(X) -> q(A,B)).

进一步深入

not exists A,B . (p(A) and p(B) and p(X) and not q(A,B)).

然后在你的 Prolog 子句中使用它

pred(X) :- \+ ( p(A), p(B), p(X), \+q(A,B) ).

正如其他人所提到的,一些Prologs为此定义了一个简写,称为forall/2,所以你应该可以使用

pred(X) :- forall((p(A), p(B), p(X)), q(A,B)).

【讨论】:

  • 啊,这比我想的更准确 (+1)。
  • 您必须承认,最后一行与原始问题的接近程度非常性感。 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
相关资源
最近更新 更多