Программирование на языке Пролог для искусственного интеллекта - [6]

Шрифт
Интервал

(b)  >?-  родитель( X, джим).

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

(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).

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

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

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

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

• часть вывода (левая половина правила).

Вывод называют также головой предложения, а условную часть — его телом. Например:

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

>голова            тело

Если условие >родитель( X, Y) выполняется (оно истинно), то логическим следствием из него является утверждение >отпрыск( Y, X).

На приведенном ниже примере проследим, как в действительности правила используются Прологом. Спросим нашу программу, является ли Лиз отпрыском Тома:

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

В программе нет фактов об отпрысках, поэтому единственный способ ответить на такой вопрос — это применить правило о них. Правило универсально в том смысле, что оно применимо к любым объектам X и Y, следовательно, его можно применить и к таким конкретным объектам, как >лиз и >том. Чтобы это сделать, нужно вместо >Y подставить в него >лиз, а вместо >X — >том. В этом случае мы будем говорить, что переменные X и Y конкретизируются:

>X = том и >Y = лиз

После конкретизации мы получаем частный случай нашего общего правила. Вот он:

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

Условная часть приняла вид:

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

Теперь пролог-система попытается выяснить, выполняется ли это условие (является ли оно истинным). Для этого исходная цель

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

заменяется подцелью

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

Эта (новая) цель достигается тривиально, поскольку такой факт можно найти в нашей программе. Это означает, что утверждение, содержащееся в выводе правила, также истинно, и система ответит на вопрос >yes (да).

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

Для всех X и Y

  X является матерью Y, если

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

  X — женщина.

На Пролог это переводится в виде такого правила:

>мать( X, Y) :- родитель( X, Y), женщина( X).

Запятая между двумя условиями указывает на конъюнкцию условий. Это означает, что они должны быть выполнены оба одновременно.

Рис. 1.3.  Графы отношений >родительродителя, >мать и >отпрыск, определенных через другие отношения.

Такие отношения как >родитель, >отпрыск и >мать можно изобразить в виде диаграмм, приведенных на рис. 1.3. Они нарисованы с учетом следующих соглашений. Вершины графа соответствуют объектам, т.е. аргументам отношений. Дуги между вершинами соответствуют бинарным (двуместным) отношениям. Дуги направлены от первого аргумента к второму. Унарные отношения на диаграмме изображаются просто пометкой соответствующих объектов именем отношения. Отношения, определяемые через другие отношения, представлены штриховыми дугами. Таким образом, любую диаграмму следует понимать так: если выполнены отношения, изображенные сплошными дугами, тогда и отношение, изображенное штриховой дугой, тоже выполнено. В соответствии с рис. 1.3, отношение


Рекомендуем почитать
Язык PL/SQL

В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.


Пишем драйвер Windows на ассемблере

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Язык программирования С# 2005 и платформа .NET 2.0.

В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML.


Вариации на тему STL. Адаптер обобщенного указателя на функцию-член класса

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Информационная технология. Руководство по управлению документированием программного обеспечения

ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИИнформационная технологияРУКОВОДСТВО ПО УПРАВЛЕНИЮ ДОКУМЕНТИРОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯInformation technology. Guidelines for the management of software documentationИздание официальноеДата введения 1994-07-01ГОССТАНДАРТ РОССИИ Москва© Издательство стандартов, 1994.


Самоучитель UML

Самоучитель UMLПервое издание.В книге рассматриваются основы UML – унифицированного языка моделирования для описания, визуализации и документирования объектно-ориентированных систем и бизнес-процессов в ходе разработки программных приложений. Подробно описываются базовые понятия UML, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы.