Brave/Cautious clingo 推理

Brave/Cautious reasoning in clingo

在Clingo指南中,介绍了谨慎和勇敢两种模式如下:

brave Compute the brave consequences (union of all answer sets) of a logic program.

cautious Compute the cautious consequences (intersection of all answer sets) of a logic program.

指南中未提供更多信息。我尝试了一些示例,但无法理解问题。

我尝试运行以下简单的ASP程序:

p :- not q.
q :- not p.

运行 没有模式参数的 Clingo 将给出正确的答案集:

answer 1:{p}
answer 2:{q}

如指南所述,如果运行在勇敢模式下,将计算所有答案集的并集,我应该得到结果{p, q}

同样,对于谨慎的情况,预期结果为空。

然而,Clingo勇敢推理的实际结果是:

clingo version 5.3.0

Reading from test/cautious_reasoning.lp

Solving...

Answer: 1

q

Consequences: [1;2]

Answer: 2

q p

Consequences: [2;2]

SATISFIABLE

Models : 2

Brave : yes

Consequences : 2

Calls : 1

Time : 0.006s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)

CPU Time : 0.002s

对于谨慎的情况:

clingo version 5.3.0

Reading from test/cautious_reasoning.lp

Solving...

Answer: 1

q

Consequences: [0;1]

Answer: 2

Consequences: [0;0]

SATISFIABLE

Models : 2

Cautious : yes

Consequences : 0

Calls : 1

Time : 0.001s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)

CPU Time : 0.001s

那么[]中的数字代表什么?如何理解Clingo中谨慎勇敢的推理模式?

当您使用枚举算法 --enum-mode brave--enum-mode cautious 调用 clingo 时,出现在每个枚举模型中的原子 "converge" 分别为勇敢或谨慎的结果集。也就是说,在 brave 模式下,原子将单调增加,而在 cautious 模式下,原子将单调减少。将其视为 "running" 联合或交集,以产生勇敢和谨慎的结果,resp.

方括号[d;p]内的数字含义如下:clingo调用TextOutput::printMeta for each model, which prints a pair of integers [d;p] of definite consequences d and remaining possible consequences p as computed by Output::numCons.

编辑:最后的答案会给你最后的结果,即输入程序的brave/cautious结果。如果您只关心最终结果,您可以像这样调用 clingo 以获得勇敢的结果(例如,程序 a | b | c | d.):

% echo 'a|b|c|d.' | clingo -e brave | grep -A1 '^Answer:' | tail -n -1
b c d a

而对于程序a | b | c | d.的谨慎后果(即空集),你只需要以谨慎枚举模式启动clingo:

% echo 'a|b|c|d.' | clingo -e cautious | grep -A1 '^Answer:' | tail -n -1