- •Глава 6 представление знаний
- •6.1. Представление знаний при помощи пролога
- •Исчисление предикатов
- •Вычислительные формализмы
- •Пролог как вычислительный формализм
- •Формальный смысл
- •Внешний смысл
- •Обманчивая природа внешнего смысла
- •Представление знаний при помощи языка Си
- •Расширение языка Пролог
- •Другие вычислительные формализмы
- •6.2. Семантические сети Узлы и дуги
- •Семантическая сеть как Пролог-программа
- •6.3. Фреймы Представление знаний о ситуациях
- •Наследование значений слотов
- •Оценка формализма фреймов
- •Реализация фрейм - программы на Прологе
- •Запрет наследования
- •6.4. Объектно-ориентированное программирование Объекты и сообщения
- •Наследование
- •Объектно-ориентированное программирование в терминах абстрактных типов данных
- •Объектно-ориентированное программирование в терминах формализма фреймов
- •6.5. Механизм наследования в прологе Наследование в других формализмах
- •Наследование в Прологе
- •Состояния знаний
- •Обзор механизма наследования
- •Создание дерева состояний
- •Процедура "послать"
- •Опровержение фразы
- •Концепции механизма наследования
- •Пример с собранием
- •Пример с птицами
- •Реализация процедуры "послать"
- •Алгоритм работы процедуры "послать"
- •6.6. Программа, выполняющая запросы к базе данных
- •Состояния как виртуальные базы данных
- •Использование процедуры "з"
- •Опрос базы данных (добавление нового состояния)
- •Процедура "отобразитьсостояния"
- •Полезные свойства программы, выполняющей запросы к базе данных
- •Реализация программы, выполняющей запросы
- •Процедура "отобразить"
- •Процедура "з"
- •Процедура "характер"
- •6.7. Описание изменений базы данных
- •Мир кубиков
- •Картина состояния
- •Внесение изменений в базу данных при помощи процедуры "поместить"
- •Реализация процедуры "поместить"
- •Оценка механизма наследования
- •Процедура "послать" как предикат метаязыка
- •Библиографические заметки
- •Упражнения
Пролог как вычислительный формализм
Дескриптивный язык Пролога — это логика предикатов, представленная в форме фраз Хорна. Обрабатывающая структура Пролога -состоит из интерпретатора, к которому добавлен ряд встроенных предикатов (таких как "is/2") и, возможно, некоторых процедур общего назначения (таких как "findall/3"). При помощи Пролог - программы можно представить знания о системе почти таким же образом, как при помощи аксиоматической теории логики предикатов можно описать область знаний. (В явном виде это можно выразить так: каждая фраза Пролог - программы эквивалентна аксиоме, а вся программа эквивалентна теории). Формальный смысл Пролог - программы - это множество истинных конкретных реализации отношений, которые могут быть выведены интерпретатором на основании фраз программы.
Процесс представления знаний с помощью Пролог - программы может состоять из следующих этапов:
1. Специалист, знакомый с системой, анализирует ее структуру для того, чтобы выделить все значимые сущности и важные отношения между этими сущностями.
2. Программист выбирает символические обозначения для представления каждой сущности и каждого отношения.
3. Специалист по системе определяет каждое отношение семантически, при этом отмечается, какие конкретные реализации отношения будут истинными, а какие —ложными.
4. Программист аксиоматически определяет каждое отношение при помощи фраз языка Пролог. Аксиоматическое определение будет правильным, если интерпретатор Пролога сможет вывести из этого определения каждую истинную конкретную реализацию данного отношения.
После того как знания о системе будут описаны в Пролог - программе, пользователь сможет обращаться к этим знаниям посредством запросов или при помощи более совершенного интерфейса программы с пользователем.
Пример представления знаний
В качестве примера рассмотрим систему, образованную межличностными отношениями работников завода. Начальник цеха, хорошо разбирающийся в этой системе, проводит ее анализ и разбивает систему на следующие компоненты. Каждый служащий (Мери Кравиц, Боб Джонс, Сэм Финкл и Патриция Хендрикс) — это значимая сущность. Каждая рабочая смена (дневная и вечерняя) это также значимая сущность. Отношение между служащим и сменой, в которую он работает, является важным. Отношение между служащими, которые знают друг друга, также является важным.
Программист выбирает следующие символические обозначения этих сущностей и отношений:
«мери», «боб», « сэм» и «патриция» - это служащие;
«дневная» и «вечерняя» —это смены;
« раб_смена » - это отношение между служащим и сменой, в которой он работает;
« знает » — это отношение между служащими, которые знают друг друга.
Начальник цеха семантически определяет отношение "раб_смена", устанавливая, что истинны следующие конкретные реализации этого отношения:
раб_ смена (мери, дневная)
раб_ смена (сэм, вечерняя)
раб_ смена (боб, вечерняя)
раб_ смена (патриция, вечерняя)
а все остальные конкретные реализации — ложны. Начальник цеха определяет отношение "знает", утверждая, что любые два яйца, работающие в одну и ту же смену, знают друг друга. Из этого следует, что истинными будут такие конкретные реализации отношения "знает":
знает (сэм, боб)
знает (боб, сэм)
знает (сэм, патриция)
знает (патриция, сэм)
знает (боб, патриция)
знает (патриция, боб)
Все остальные конкретные реализации этого отношения будут ложны-Программист, "вооружившись" этими семантическими Определения-1, определяет отношение "раб_смена" аксиоматически, при этом каждая истинная конкретная реализация данного отношения записывается в гиде факта:
% Служащий Смена
раб_смена(мери, дневная).
раб_смена(сэм, вечерняя).
раб_смена (боб, вечерняя).
раб_смена (патриция, вечерняя).
Отношение "знает" можно определить посредством правила (а не как совокупность фактов), обращающегося к отношению "раб_смена":
знает (А, Б) :-
раб_смена (А, Смена),
раб_смена (Б, Смена),
А\= =Б.
Проверка корректности данных аксиоматических определений состоит в необходимости продемонстрировать то, что интерпретатор языка Пролог сможет вывести из них все истинные конкретные реализации каждого отношения (см. разд. 1.4).