Я хочу решить следующую проблему, используя вывод пролога пролога.Двоичная логика в прологе
Один день, 3 человека, a, b, c были пойманы полицией на месте преступления. Когда полиция оседлые допрашивать их:
i) a says I am innocent
ii) b says a is criminal
iii) c says I am innocent.
Его известно, что
i) Exactly one person speaks true.
ii) Exactly one criminal is there.
Кто преступник? Для моделирования выше проблемы в логике первого порядка: Рассмотрим с/1 предикат возвращает истину, если аргумент Уголовная мы можем написать:
(not(c(a)),c(c)) ; (c(c),c(a)).
c(a); c(b); c(c).
(not(c(a)),not(c(b))) ; (not(c(a)),not(c(c))) ; (not(c(b)),not(c(c))).
После моделирования выше утверждений в прологе, я запрос:
?-c(X).
it should return:
X=c.
But error I got:
"No permission to modify static procedure `(;)/2'"
Вы пишете произвольные формулы, но Prolog принимает только формулы Хорна, т. Е. Формы '' 'fact'''' или' '' head: - goal1, goal2, goal3.'''. Это также довольно запутанно, что у вас есть человек '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''. –
@ lambda.xy.x Я пытаюсь написать nl1: «ровно один среди а, б, говорит правда» в ВОЛП: «(не (преступник (а)), преступное (с)) (преступный (c), преступник (a)) ». и NL2: «точно один из числа a, b, c является преступным» в FOL: «уголовное преступление (a), уголовное преступление (b), уголовное преступление (c). (не (уголовное преступление (a)), а не (уголовное преступление (б))) (не (уголовное (а)), а не (уголовное (с))) (не (уголовное (б)), а не (уголовное (с))) ». Как мы можем выразить это в формулах рога, чтобы он стал синтаксически правильной пролог-программой, сохраняя при этом семантическую идентичность? – user2976975
Вы пытаетесь напрямую перевести формулу, которая не работает так хорошо (например, чтобы предикат-преступник (X) имел только одно решение, вам нужно было бы написать «преступник (X) -> не существует Y: другое (Y, X), преступный (Y) ")[email protected] уже указывает вам в правильном направлении, делая ваше пространство состояний явным. –