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