Слоны в логике первого порядка

Я имею в качестве фактов эти (эль означает слон):

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. Как говорится, Оскар может быть серым или розовым. Тогда мой запрос говорит о том, какие серые слоны похожи на какие розовые слоны, ответ можно интерпретировать как: ЕСЛИ оскар - серый слон, ТО ОСКА любит Сэм ИЛИ ЕСЛИ Клайд любит Оскар, ТО ОСКА - розовый слон.

Другие вопросы по тегам