Вот проблема, которую нужно решить:
Если Джим не покупает игрушки для своих детей, дети Джима не получат игрушки на Рождество.Если дети Джима не пишут свои рождественские письма, Джим не будет покупать им игрушки.Дети Джима получают игрушки на Рождество ». Предположим, что предполагаемая интерпретация этой истории подразумевает, что дети Джима написали свои рождественские письма.
Теперь я хочу закодировать приведенную выше информацию в правила и факты, чтобы придерживатьсяПричина, по которой дети Джима писали письма:
Программа, которую я пишу, выглядит следующим образом:
son(peter,jim).
receive_presents(peter,jim).
-buy_presents(jim,peter) :- son(peter,jim),
not write_letters(peter).
-receive_presents(peter,jim) :- not buy_presents(jim,peter).
Для простоты я просто предположил, что у Джима есть только один ребенок по имени Питер.
В моих собственных мыслях процедура рассуждения для набора ответов будет:
Все факты находятся в наборе ответов, то есть son(peter,jim)
, receive_toys(peter,jim)
определенно быть в наборе ответов.
Поскольку receive_toys(peter,jim)
находится в наборе ответов, -receive_presents(peter,jim)
не будет. Поэтому not buy_presents(jim,peter)
должно быть ложным, а buy_presents(jim,peter)
-в наборе ответов.
Поскольку buy_presents(jim,peter)
находится в наборе ответов, -buy_presents(jim,peter)
имеет значение false.И поскольку son(peter,jim)
находится в наборе ответов, not write_letters(peter)
будет ложным, а write_letters(peter)
будет в наборе ответов.
Так что я думаю, что ответ должен быть {son(peter,jim)
, receive_toys(peter,jim)
, buy_presents(jim,peter)
, write_letters(peter)
}
И, таким образом, мы можем заключить, что Питер написал письмо.
Но при выполнении этого в clingo, я получаю следующую информацию:
clingo version 5.3.0
Reading from jim.lp
jim.lp:4:29-49: info: atom does not occur in any rule head:
write_letters(peter)
jim.lp:5:37-60: info: atom does not occur in any rule head:
buy_presents(jim,peter)
Solving...
UNSATISFIABLE
Models : 0
Calls : 1
Time : 0.001s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time : 0.001s
Я думаю, что клинго требует, чтобы каждая операция с атомом была сначала определена в правиле.Но здесь я просто хочу рассуждать, если Питер написал письмо, поэтому я не могу самостоятельно определить, «если ххх, тогда Питер напишите письмо», потому что это просто сделалось мной самим, делая рассуждения.
Как решить этот видпроблема в программировании набора ответов?