1

以下使一个或多个文字为真:

a,b,c :- condition.
a;b;c :- condition.

在上面的 a,b,c,condition 是一个有效的模型,但也是 (a,condition), (a,b,condition) 等。我希望所有的 a,b,c 都是真的,总是,如果条件是真的。

我可以编写以下内容来强制 a、b、c 始终为真。

:- condition, a, not b.
:- condition, b, not c.
:- condition, c, not a.

但是对于复杂的规则,这些变得非常冗长且容易出错。

4

1 回答 1

1

你可以写

3 { a ; b ; c } 3 :- condition.

这意味着如果条件为真,则大括号中的至少 3 个和最多 3 个原子被定义为真。

您编写的约束具有非常不同的含义,例如,第一个约束要求某些其他规则不得定义条件和 a 的真实性,除非还有一条规则将 b 定义为真实。

于 2018-07-10T17:49:38.230 回答