lparse/clingo:怎么说 All Of(a,b,c) :- 条件?

lparse/clingo: How to say AllOf(a,b,c) :- condition?

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

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.

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

你可以写

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

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

你写的约束有一个非常不同的含义,例如第一个约束要求一些其他规则不能定义条件的真实性,除非还有一个规则定义 b 为真。