首页 > 解决方案 > lparse/cligo:怎么说 AllOf(a,b,c) :- 条件?

问题描述

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

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.

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

标签: answer-set-programmingclingo

解决方案


你可以写

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

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

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


推荐阅读