Программирование на языке Пролог для искусственного интеллекта | страница 11



(d)  >?-  родитель( пам, X), родитель( X, Y),

>       родитель( Y, джим).

1.2.  Сформулируйте на Прологе следующие вопросы об отношении >родитель:

(a)  Кто родитель Пат?

(b)  Есть ли у Лиз ребенок?

(c)  Кто является родителем родителя Пат? 

1.2. Расширение программы-примера с помощью правил

Нашу программу-пример можно легко расширить многими интересными способами. Давайте сперва добавим информацию о том, каков пол людей, участвующих в отношении >родитель. Это можно сделать, просто добавив в нее следующие факты:

>женщина( пам).

>мужчина( том).

>мужчина( боб).

>женщина( лиз).

>женщина( пат).

>женщина( энн).

>мужчина( джим).

Мы ввели здесь два новых отношения — >мужчина и >женщина. Эти отношения — унарные (или одноместные). Бинарное отношение, такое как >родитель, определяет отношение между двумя объектами; унарные же можно использовать для объявления наличия (отсутствия) простых свойств у объектов. Первое из приведенных выше предложений читается так: Пам — женщина. Можно было бы выразить информацию, представляемую этими двумя унарными отношениями (>мужчина и >женщина), по-другому - с помощью одного бинарного отношения >пол. Тогда новый фрагмент нашей программы выглядел бы так:

>пол( пам, женский).

>пол( том, мужской).

>пол( боб, мужской).

>...

В качестве дальнейшего расширения нашей программы-примера давайте введем отношение >отпрыск, которое обратно отношению >родитель. Можно было бы определить >отпрыск тем же способом, что и >родитель, т.е. представив список простых фактов наличия этого отношения для конкретных пар объектов, таких, что один является отпрыском другого. Например:

>отпрыск( лиз, том).

Однако это отношение можно определить значительно элегантнее, использовав тот факт, что оно обратно отношению >родитель, которое уже определено. Такой альтернативный способ основывается на следующем логическом утверждении:

Для всех X и Y

 Y является отпрыском X, если

 X является родителем Y.

Эта формулировка уже близка к формализму, принятому в Прологе. Вот соответствующее прологовское предложение, имеющее тот же смысл:

>отпрыск( Y, X) :- родитель( X, Y).

Это предложение можно прочитать еще и так:

Для всех X и Y,

  если X — родитель Y, то

  Y — отпрыск X.

Такие предложения Пролога, как

>отпрыск( Y, X) :- родитель( X, Y).

называются правилами. Есть существенное различие между фактами и правилами. Факт, подобный факту

>родитель( том, лиз).

это нечто такое, что всегда, безусловно истинно. Напротив, правила описывают утверждения, которые могут быть истинными, только если выполнено некоторое условие. Поэтому можно сказать, что правила имеют