У меня есть эта простая программа 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)}
Поскольку у меня есть «значение (v1)» и «знает (p1, v1)» и «подключено (p1, p2)», я ожидал, что вывод программы должен содержать «знает (p1, чанк (v1, p1, p2) ))".
Может ли кто-нибудь объяснить мне, почему этого не происходит?
Изменить: я удалил все правила и создал только это единственное
chunk(v, ps) :- value(v), participant(ps).
Но и это правило не срабатывает! В чем проблема? Я пробовал самый простой:
chunk(v) :- value(v).
и никакой активации. Что мне не хватает?