Программирование на языке Пролог для искусственного интеллекта
Шрифт:
На приведенном ниже примере проследим, как в действительности правила используются Прологом. Спросим нашу программу, является ли Лиз отпрыском Тома:
В программе нет фактов об отпрысках, поэтому единственный способ ответить на такой вопрос — это применить правило о них. Правило универсально в том смысле, что оно применимо к любым объектам X и Y, следовательно, его можно применить и к таким конкретным объектам, как
После конкретизации мы получаем частный случай нашего общего правила. Вот он:
Условная часть приняла вид:
Теперь пролог-система попытается выяснить, выполняется ли это условие (является ли оно истинным). Для этого исходная цель
заменяется подцелью
Эта (новая) цель достигается тривиально, поскольку такой факт можно найти в нашей программе. Это означает, что утверждение, содержащееся в выводе правила, также истинно, и система ответит на вопрос
Добавим теперь в нашу программу-пример еще несколько родственных отношений. Определение отношения
Для всех X и Y
X является матерью Y, если
X является родителем Y и
X — женщина.
На Пролог это переводится в виде такого правила:
Запятая между двумя условиями указывает на конъюнкцию условий. Это означает, что они должны быть выполнены оба одновременно.
Рис. 1.3. Графы отношений
Такие отношения как
Здесь уместно сделать несколько замечаний о внешнем виде нашей программы. Пролог дает почти полную свободу расположения текста на листе. Так что можно вставлять пробелы и переходить к новой строке в любом месте текста по вкусу. Вообще мы хотим сделать так, чтобы наша программа имела красивый и аккуратный вид, а самое главное, легко читалась. Для этого мы часто будем помещать голову предложения и каждую цель на отдельной строке. При этом цели мы будем писать с отступом, чтобы сделать разницу между
головой и целями более заметной. Например, правилоНа рис. 1.4 показано отношение
Для любых X и Y
X является сестрой Y, если
(1) у X и Y есть общий родитель, и
(2) X — женщина.
Рис. 1.4. Определение отношения
Граф на рис. 1.4 можно перевести на Пролог так:
Обратите внимание на способ, с помощью которого выражается требование "у X и Y есть общий родитель". Была использована следующая логическая формулировка: "некоторый Z должен быть родителем X и этот же самый Z должен быть родителем Y". По-другому, менее красиво, можно было бы сказать так: "Z1 - родитель X, Z2 - родитель Y и Z1 равен Z2".
Теперь можно спросить:
Как и ожидается, ответ будет "
Система найдет два ответа, один из которых может показаться неожиданным:
Получается, что Пат — сестра себе самой?! Наверное, когда мы определяли отношение
Чтобы исправить наше правило о сестрах, его нужно дополнить утверждением, что X и Y должны различаться. В следующих главах мы увидим, как это можно сделать, в данный же момент мы предположим, что отношение
достигается тогда и только тогда, когда X и Y не равны. Усовершенствованное правило для отношения
Некоторые важные моменты этого раздела:
• Пролог-программы можно расширять, добавляя в них новые предложения.
• Прологовские предложения бывают трех типов: факты, правила и вопросы.
• Факты содержат утверждения, которые являются всегда, безусловно верными.