Я пытаюсь найти способ поместить в Пролог следующее логическое выражение первого порядка:
(p(0) or p(1)) and not (p(0) and p(1))
Это означает, что он должен отвечать на запросы следующим образом:
?- p(0)
Yes.
?- p(1)
Yes.
?- p(0),p(1).
No.
Я попытался перевести логическое выражение:
(p(0) or p(1)) and not (p(0) and p(1)) <=>
(not p(0) -> p(1)) and (p(0) -> not p(1)) <=>
p(0) <-> not p(1)
Используя автодополнение Кларка (которое гласит, что любая дефиниционная теория может быть помещена в логическую программу, указав if-половинки), я могу получить:
p(0) :- not p(1).
К сожалению, полученная в результате теория является только здравой (из нее не будет получена ложная информация), но не полной (например: p (1) не может быть выведен). Это следствие теоремы Кларка.
Кто-нибудь знает, есть ли лучшее решение? Спасибо!
p(0)
, вы спрашиваете об этом у системы или сообщаете системе? Считается ли, что все, что не указано, ложно (как в закрытом мире Пролога), или может принимать какое-либо значение? - person Will Ness   schedule 29.09.2012?- p(0)
эквивалентно вопросу, можно лиp(0)
доказать с помощью теории. - person marczoid   schedule 07.11.2012