Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Spec_Mov_3k_4k_Lect.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.46 Mб
Скачать

Пример выполнения логической программы с пошаговым анализом

Рассмотрим БД-х с условным названием «Отцы-дети». Пусть логическая программа выглядит следующим образом:

мать(катерина, юлия).

мать(катерина, александра).

мать(мария, пётр).

мать(анна, катерина).

отец(пётр, юлия).

отец(пётр, александра).

отец(александр, пётр).

отец(андрей, катерина).

дед(X, Y) :- отец(X, Z), мать(Z, Y).

дед(X, Y) :- отец(X, Z), отец(Z, Y).

бабка(X, Y) :- мать(X, Z), мать(Z, Y).

бабка(X, Y) :- мать(X, Z), отец(Z, Y).

Пусть имеется следующий целевой вопрос:

?- отец(X, Y), мать(катерина, Y).

В вопросе содержатся 2 подцели Q1 = отец(X, Y), Q2 = мать(катерина, Y).

Вопрос можно интерпретировать следующим образом:

«Существует такой отец Х у ребенка Y, что имя матери ребёнка Катерина». Такая интерпретация, конечно, чистая условность и ничуть не лучше и не хуже любой другой. Процесс построения вывода выполняется следующим образом.

Подцель Q1 соответствует 5-му факту в программе - отец(пётр, юлия). Это дает следующий НОУ s1 = {X = пётр, Y = юлия}. Далее алгоритм применяется рекурсивно к подцели:

s1[Q2] = мать(катерина, юлия).

Этой подцели соответствует 1-й факт в программе. В результате вычисления резольвенты имеем пустой дизъюнкт ð. Получаем первый результат построения вывода:

X = пётр, Y = юлия.

Для получения нового решения ищется следующее соответствие для подцели s1[Q2]. Т.к. такового нет, то выполняется бектрекинг на один шаг назад и ищется новое решение для Q1. Ранее был выбран 5-й факт в программе. Теперь поиск продолжается дальше и в качестве возможного варианта решения выбирается факт отец(пётр, александра), что дает НОУ s2 = { X = пётр, Y = александра}. После вычисления резольвенты имеем следующую подцель для продолжения построения вывода:

s2[Q2] = мать(катерина, александра) и в программе имеется соответствующий факт. Таким образом получаем пустой дизъюнкт и следующее решение:

X = пётр, Y = александра.

Попытки применить для вывода факты отец(александр, пётр) и отец(андрей, катерина) не позволяют найти подходящие варианты решений для подцели Q2.

Если выбрать более сложный вопрос, например такой: ?- дед(U, V), отец(пётр, V), где Q1 = дед(U, V) и Q2 = отец(пётр, V), то последовательно имеем следующие шаги построения вывода:

s1 = {X = U, Y = V}.

Вычисление резольвенты дает Q' = s1[отец(X, Z), мать(Z, Y), отец(пётр, V)] = отец(U, Z), мать(Z, V), отец(пётр, V). Выделим в цели Q' следующие подцели:

Q1' = отец(U, Z), Q2' = мать(Z, V), Q3' = отец(пётр, V). Теперь очередной подцелью для продолжения построения вывода является Q1'. Для этой подцели последовательно делаются попытки найти подходящие факты или правила из программы. Например, 5-й факт в программе унифицируется с этой подцелью, что дает НОУ:

s2 = { U = пётр, Z = юлия}.

Далее следующей подцелью будет s2[Q2'] = мать(юлия, V). Для этой подцели найти подходящие объекты для унификации невозможно и делается возврат. Определяется новая подстановка:

s2' = {U = пётр, Z = александра} и т.д.

Вопросы для самоконтроля

  • Что означает высказывание «факт удовлетворяет предикату»?

  • Как определяется наиболее общий унификатор (НОУ) для 2-х термов?

  • Является ли правило, факт или вопрос логической программы дизъюнктом?

  • Какие существуют стратегии доказательств?

  • На каких основных действиях (процедурах) основана работа интерпретатора Пролога?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]