如何使用否定法在Clingo中选择最大值

问题描述 投票:0回答:1

在序言中,我们可以使用否定来选择元组中的最大值,例如:p(X),而不是(p(Y),Y> X)。 %在Prolog中工作,但在Clingo中不工作

如何使用Clingo表达式获得相似的规则(如果没有比A大的数字,则A为最大值)。谢谢。

prolog answer-set-programming clingo
1个回答
0
投票

以下规则可以表示如果没有比A大的数字,则A为最大值

non_max(X) :- p(X), p(Y), Y > X.
max(X) :- p(X), not non_max(X).

[基本上,您代表的规则是具有通用量词的规则,即

∀b∈p(b),如果a> b,则a为最大值。 (1)

[如果a是最大值,则∀b∈p(b),a> b。 (2)

将(2)转换为对立面,我们有

如果Ifb∈p(b),a

(3)的对应规则是non_max(X) :- p(X), p(Y), Y > X.

由于max和non_max是互斥的,所以我们有max(X) :- p(X), not non_max(X).

© www.soinside.com 2019 - 2024. All rights reserved.