Я делаю разрешение разрешения в формальной логике с использованием таблицы истинности и результатов программы прогона моих экспериментов, и я хочу знать почему.Prolog - resolution
В данном случае проблема в простом английском: 1. Если кто-то смотрит в глаза истребителю, он разозлится. 2. Если истребитель рассердится, он собирается ударить.
Если истребитель ударил, кто-то заглянул в глаза бойца?
«Истребитель ударил» - это заключение, и мы знаем, когда вывод верен, предпосылка может быть ложной или истинной, поэтому мы не можем ответить на вопрос.
Однако после программы пролог SWI возвращает истину:
eyes:-angry.
angry:-punch.
punch.
?-eyes.
True
Также
aggregate_all(count, (eyes), Count)
1
Может кто-нибудь объяснить это?
Спасибо, что объяснили, как работает пролог - это было какое-то время. Однако я думаю, что отвечу на вопрос: «Если истребитель ударил, кто-то заглянул в глаза бойца?» не может быть дан ответ, потому что истина-истребитель ударил все еще в заключение. сердитый (правда): - глаза (правда). удар (правда): - сердитый (правда). удар (правда). ? -Eyes (T) Нет ответа –
На выходе, который я показал, вы знаете, что если бы никто не смотрел на бойца в глаза, то никакого удара не было. Эрго, если истребитель * пробил, то кто-то, должно быть, посмотрел на бойца в глаза. Кстати, вы также должны действительно изучить ограничения CLP (B), доступные, например, в SICStus Prolog, GNU Prolog и т. Д., для моделирования задачи над булевыми переменными, где вы можете легко заявить все требования и искать решения. – mat