Слоны в логике первого порядка
Я имею в качестве фактов эти (эль означает слон):
el(Sam) el(Clyde) el(Oscar)
pink(Sam)
gray(Clyde) likes(Clyde, Oscar)
pink(Oscar)Vgray(Oscar) likes(Oscar, Sam)
Теперь я хочу доказать (?), Что: Некоторому серому слону нравится розовый слон, что переводится как: (существует x)(el(x) /\ grey(x) /\ (существует y) (el(y) /\ pink(y) /\ likes(x, y)). Итак, нам нужно взять его отрицание и разрешить (?) его в основе, чтобы достичь пустоты (?).
Отрицание есть (буду использовать ~
показать отрицание)
~el(x) V ~gray(x) V ~el(y) V ~pink(y) V ~likes(x, y)
Как я это вижу, я назначу x
а также y
значения (Сэм, Клайд или Оскар) и вставьте более позднее утверждение в базу, чтобы "убить" факты, которые там уже лежат.
Моя попытка:
Я поставил x = Clyde, y = Oscar
, который дал мне:
~el(Clyde) V ~gray(Clyde) V ~el(Oscar) V ~pink(Oscar) V ~likes(Clyde, Oscar)
который, если я положу в базу, "убить" их "пары" и база станет:
el(Sam)
pink(Sam)
gray(Oscar) likes(Oscar, Sam)
и что теперь? У нас кончаются слоны!
В идеале хотелось бы иметь x' = Oscar, y' = Sam
так, чтобы я получил:
~el(Oscar) V ~gray(Oscar) V ~el(Sam) V ~pink(Sam) V ~likes(Oscar, Sam)
который пошел бы в базу и убил бы все, но ~el(Oscar)
все равно был бы жив! Как мне поступить?
Дополнительный вопрос:
База:
a
b
c V d
а потом я положил в базы ~a/\~b/\~c/\~d
, Все в базе исчезнет так же? Я имею в виду не V
оператор влияет на вещи?
1 ответ
Вы могли бы иметь что-то вроде этого:
el(sam).
el(clyde).
el(oscar).
pink(sam).
grey(clyde).
likes(clyde,oscar).
likes(oscar,sam).
canbe(oscar,grey).
canbe(oscar,pink).
gelephant_likes_pelephant(GE,PE):-
grey(GE),el(GE),
pink(PE),el(PE),
likes(GE,PE).
gelephant_likes_pelephant(GE,PE):-
canbe(GE,grey),el(GE),
pink(PE),el(PE),
likes(GE,PE).
gelephant_likes_pelephant(GE,PE):-
grey(GE),el(GE),
canbe(PE,pink),el(PE),
likes(GE,PE).
Qs:
?- gelephant_likes_pelephant(GE,PE).
GE = oscar,
PE = sam ;
GE = clyde,
PE = oscar.
Вы должны быть осторожны, когда используете предикат, такой как canbe/2. Как говорится, Оскар может быть серым или розовым. Тогда мой запрос говорит о том, какие серые слоны похожи на какие розовые слоны, ответ можно интерпретировать как: ЕСЛИ оскар - серый слон, ТО ОСКА любит Сэм ИЛИ ЕСЛИ Клайд любит Оскар, ТО ОСКА - розовый слон.