clingo 中规则主体的析取

Disjunction in the body of a rule in clingo

我认为这是基本的,但是如何在 clingo 中将文字与规则主体进行析取?我试过了

p3 :- p1 ; p2. 但它不起作用,它假设

的答案

p3 :- p1 , p2.

谢谢。

正文中的析取只是“隐含的”。 这意味着您可以通过使用两个规则来实现:

p3 :- p1.
p3 :- p2.

或使用一阶变量

p(3) :- p(1..2).

dom(1..2).
p(3) :- p(X), dom(X).

所有三个版本都基于同一组规则

p(3):-p(2).
p(3):-p(1).

(如果p(1)p(2)实际上是可推导的) 您可以通过添加行

来检查这一点
{p(X) : dom(X)}.

并使用 clingo --text.