Определение отношений на основе правил

Рассматриваемый пример программ можно легко дополнить с применением мно­гих интересных способов. Вначале введем информацию о мужском или женском поле людей, участвующих в отношении parent. Эту задачу можно решить, добавив сле­дующие факты к программе:

female ( pam). male! torn].

male( bob). female { Иг). female ( pat) . female ( ann) -male( jim).

В этом случае введены отношения male и female. Эти отношения являются унарными (или одноместными). Бинарные отношения типа parent определяют связь между парами объектов. С другой стороны, унарные отношения могут использовать­ся для объявления простых свойств объектов, которые они могут иметь или не иметь. Первое из приведенных выше унарных предложений можно прочитать таким образом: Пэм - женщина. Вместо этого информацию, объявленную в двух унарных отношениях, можно передать с помощью одного бинарного отношения. В таком слу­чае приведенная выше часть программы примет примерно такой вид:

sext pam, feminine). sex< torn, masculine). sex [ bob, masculine).

В качестве следующего дополнения к программе введем отношение offspring (отпрыск), обратное отношению parent. Отношение offspring можно определить таким же образом, как и parent, предоставив список обычных фактов об отношении offspring, и в качестве каждого факта указать такую пару людей, что один из них является сыном или дочерью другого, например: offspring; lie, torn).



Часть I, Язык Prolog


Но отношение of f spring можно определить гораздо более изящно, используя то, что оно является противоположным parent и что parent уже было определено. Этот альтернативный способ может быть основан на следующем логическом утверждении:

Для всех X v. Y,

Y является сыном или дочерью х, если
х является родителем Y.

Такая формулировка уже более близка к синтаксису языка Prolog. Соответст­вующее предложение Prolog, которое имеет тот же смысл, выглядит таким образом: offspring[Y, X) :- parent: X У» .

Это предложение можно также прочитать так: Для всех X и Y,

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

Y является сыном или дочерью У. •

Предложения Prolog, такие как

offspring: Y, X) :- parent: X, fi .

называются правилами. Между фактами и правилами существует важное различие.

Такие факты, как

patent ( torn, Иг) .

представляют собой логические утверждения, которые всегда и безусловно являются

истинными. С другой стороны, правила представляют собой утверждения, которые

становятся истинными, если удовлетворяются некоторые условия. Поэтому принято

считать, что правила состоят из следующих частей:

• условие (правая часть правила);

• заключение (левая часть правила).

Часть, соответствующая заключению, называется также головой предложения, а часть, соответствующая условию, — телом предложения, как показано ниже. offspring; Y, X) :- parent! x, Y}.

*---------------------- V----------------------- *----------------- V----------------- J

голова тело

Если условие parent [ X, Y] является истинным, то его логическим следствием становится offspring ( У, X).

Применение правил в языке Prolog иллюстрируется в следующем примере. Зада­дим программе вопрос, является ли Лиз дочерью Тома: ?- offspring! liz, torn).

Поскольку в программе отсутствуют факты о дочерях и сыновьях, единственным способом поиска ответа на этот вопрос является использование правила с определе­нием отношения offspring. Данное правило является общим в том смысле, что оно применимо к любым объектам X и Y; но его можно также применить и к таким кон­кретным объектам, как liz и torn. Чтобы применить правило к объектам liz и ton-.,. вместо Y необходимо подставить liz, а вместо X - torn. Это действие называется конкретизацией переменных (в данном случае — X и Y), которое выполняется сле­дующим образом: X <■ torn и Y = liz

После конкретизации будет получен частный случай общего правила, который выглядит следующим образом: offspring! liz, torn) :- parent! torn, liz).

Часть с обозначением условия принимает вид parent; torn, liz)

После этого система Prolog пытается определить, является ли истинной часть с обозначением условия. Поэтому первоначальная цель: offspring: liz, tomi


Глава 1,Введение в Prolog



заменяется подцелью: patent f torn, liz)

Оказалось, что задача достижения этой (новой) цели является тривиальной, по­скольку ее можно найти как факт в рассматриваемой программе. Это означает, что часть данного правила с обозначением заключения также является истинной, и Prolog в качестве ответа на вопрос выводит yes.

Теперь введем в рассматриваемый пример программы еще некоторую информа­цию о семейных отношениях. Определение отношения mother может быть основано на следующем логическом утверждении: