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