Как запретить обоснование ложных фактов в Answer Set Programming/Gringo

Когда я запускаю гринго в своей программе, это приводит к множеству обоснованных утверждений формы

:- foo(a,b).

Затем я также получаю много обоснованных ограничений, таких как:

:- bar(a,x,y), foo(a,b).

Учитывая знания выше, они совершенно бесполезны.

Обратите внимание, что это обе обоснованные версии правила в следующей форме:

:- foo(I, J), bar(I, X, B), quux(J, X, @f(B)).

Почему обоснованные правила вообще присутствуют в выводе? Почему гринго просто не исключит foo(a,b) из набора заземленных атомов? Можно как-то отключить? Вывод гринго моей программы из-за этого раздувается и значительно замедляется.


person user1747134    schedule 26.10.2017    source источник
comment
Если я правильно понимаю гринго, данное вами правило не будет генерировать заданные вами обоснованные ограничения, оно будет генерировать обоснованные ограничения, которые являются конъюнкциями всех трех предикатов, например: :- foo(a,b), bar(a ,c,d), quux(b,c,e). Есть ли у вас другие правила, создающие эти ограничения? Я неправильно понимаю гринго?   -  person Ivan Uemlianin    schedule 27.10.2017
comment
Вы правильно понимаете.   -  person user1747134    schedule 01.11.2017
comment
В этом случае у вас должны быть другие правила, генерирующие эти обоснованные ограничения.   -  person Ivan Uemlianin    schedule 01.11.2017


Ответы (1)


Вы можете использовать директиву #show для отображения только тех результатов, которые вы хотите видеть, например,

#show foo/2.
#show bar/3.
person NTP    schedule 18.05.2021