Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PROLOG_Labs / Лабораторная работа 2.doc
Скачиваний:
113
Добавлен:
20.03.2015
Размер:
142.34 Кб
Скачать

4. Моделирование рассуждений

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

Пусть программа на Прологе содержит следующие утверждения (факты и правила) (фразы, заключенные в «/*..….*/», воспринимаются Прологом как коментарий):

знает(мария,хор). /* Мария знает хор*/

(1) знает(мария,сольфеджио). /* Мария знает сольфеджио*/

(2) знает(мария,информатика). /* Мария знает информатику*/

(3) знает(мария,алгебра). /* Мария знает алгебру*/

знает(мария,геометрия). /* Мария знает геометрию*/

/*Иван знает те же курсы, что и Мария, при условии, что эти курсы изучаются в университете */

знает(иван,X):- знает(мария,X),университет_курс(X).

университет_курс(информатика). /*информатика изучается в университете*/

университет_курс(алгебра). /*алгебра изучается в университете*/

университет_курс(геометрия). /*геометрия изучается в университете*/

музыка_курс(сольфеджио). /*сольфеджио изучается в музучилище*/

музыка_курс(хор). /*хор изучается в музучилище*/

и цель:

знает(иван,X). /*какие курсы знает Иван?*/

Пролог ищет факты и головы правил, сопоставимые с целью. Два факта сопоставимы (или соответствуют друг другу), если выполняются следующие три условия сопоставления фактов:

  1. имена отношений одинаковы (побуквенное совпадение);

  2. отношения имеют равное количество аргументов;

  3. аргументы, расположенные в одинаковых позициях, сопоставимы.

Правила сопоставления аргументов:

    1. Имена конкретных объектов сопоставимы, если они совпадают;

    2. Переменная сопоставима с именем конкретного объекта;

    3. Переменная сопоставима с другой переменной.

Пролог просматривает утверждения в том порядке, в каком они вводились в БЗ. Поэтому сначала сравниваются цель

знает(иван,Х)

и факт

знает(мария,хор).

Первые аргументы несопоставимы. Следовательно, попытка сопоставить цель и факт неуспешна. Пролог продолжает сопоставлять цель со всеми фактами для отношения «знает». Результаты этих сопоставлений неуспешны, так имя объекта «мария» несопоставимо с именем «иван». Пролог переходит к правилу. Цель и голова правила сопоставимы, так как их переменные свободны (неозначенные переменные называются свободными). Теперь факты правой части правила становятся подцелями. Первой подцелью является

знает(мария,Х).

Это новая подцель, поэтому Пролог снова начинает просмотр БЗ с первого факта для отношения «знает» и находит

знает(мария,хор).

Этот факт сопоставим с подцелью. Значением переменной Х становится «хор». (Переменные, получившие конкретное значение, называются связанными) Однако существуют другие утверждения, которые могли быть использованы для доказательства первой подцели. Поэтому Пролог устанавливает указатель отката (бэктрекинга (backtracking)) в точку (1). С этого указателя Пролог сделает попытку найти другое решение, если вся цель окажется неуспешной.

Вторая подцель есть:

университет_курс(Х),

так как переменная Х имеет значение «хор». Все сопоставления этой подцели с фактами БЗ неуспешны. Поэтому первая попытка доказать цель завершилась неудачей.

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

знает(мария,сольфеджио)

и устанавливает указатель отката (2) на следующий факт для предиката «знает». Переменная Х принимает значение «сольфеджио».

Подцель

университет_курс(солфеджио)

не может быть доказана, следовательно, доказательство цели снова привело к неудаче. Переменная Х освобождается, а для доказательства цели будет сделана следующая попытка. Пролог выполняет откат в точку (2). Теперь первая подцель сопоставляется с фактом

знает(мария,информатика),

Х получает значение «информатика», а указатель отката устанавливается в точку (3). Вторая подцель принимает вид:

университет_курс(информатика).

Успешное сопоставление этой подцели доказывает цель. Следовательно, ответ на поставленный вопрос формулируется так: «Иван знает информатику». Цель успешно доказана, поэтому переменная Х становится свободной и может быть вновь означена при поиске других решений.