У меня есть эта простая программа DLV, состоящая из нескольких предикатов и правил деривации.Одно из правил не активируется, и я понятия не имею, почему, по-видимому, существуют все предикаты.Я должен признать, что я не эксперт в DLV и немного ржавый, так как в последний раз я использовал его, поэтому, пожалуйста, простите меня, если это слишком очевидно: - /
Среди других, у меня есть это правило:
knows(ps, chunk(v, ps, pd)) :- value(v),
knows(ps, v),
connected(ps, pd).
И здесь вы можете увидеть, что я получаю после выполнения кода:
. / Dlv -nofinitecheck model.edb rules.idb
{участник (p1)участник (p2), участник (p3), значение (v1), значение (r1), значение (v2), значение (r2), значение (v3), значение (r3), подключено (p1, p2), подключено (p1, p3), подключен (p2, p3), знает (p1, v1), знает (p1, r1), знает (p2, v2), знает (p2, r2), знает (p3, v3), знает (p3, r3)}
Поскольку у меня есть «value (v1)» и «знает (p1, v1)» и «подключено (p1, p2)», я ожидал, что вывод программы долженсодержать "знает (p1, кусок (v1, p1, p2))".
Может кто-нибудь объяснить мне, почему этого не происходит?
Редактировать: я удалил все правила и создал только это одно
chunk(v, ps) :- value(v), participant(ps).
Но это правило также не активируется!В чем проблема?Я попробовал самый простой:
chunk(v) :- value(v).
и без активации.Чего мне не хватает?