- •Глава 6 представление знаний
- •6.1. Представление знаний при помощи пролога
- •Исчисление предикатов
- •Вычислительные формализмы
- •Пролог как вычислительный формализм
- •Формальный смысл
- •Внешний смысл
- •Обманчивая природа внешнего смысла
- •Представление знаний при помощи языка Си
- •Расширение языка Пролог
- •Другие вычислительные формализмы
- •6.2. Семантические сети Узлы и дуги
- •Семантическая сеть как Пролог-программа
- •6.3. Фреймы Представление знаний о ситуациях
- •Наследование значений слотов
- •Оценка формализма фреймов
- •Реализация фрейм - программы на Прологе
- •Запрет наследования
- •6.4. Объектно-ориентированное программирование Объекты и сообщения
- •Наследование
- •Объектно-ориентированное программирование в терминах абстрактных типов данных
- •Объектно-ориентированное программирование в терминах формализма фреймов
- •6.5. Механизм наследования в прологе Наследование в других формализмах
- •Наследование в Прологе
- •Состояния знаний
- •Обзор механизма наследования
- •Создание дерева состояний
- •Процедура "послать"
- •Опровержение фразы
- •Концепции механизма наследования
- •Пример с собранием
- •Пример с птицами
- •Реализация процедуры "послать"
- •Алгоритм работы процедуры "послать"
- •6.6. Программа, выполняющая запросы к базе данных
- •Состояния как виртуальные базы данных
- •Использование процедуры "з"
- •Опрос базы данных (добавление нового состояния)
- •Процедура "отобразитьсостояния"
- •Полезные свойства программы, выполняющей запросы к базе данных
- •Реализация программы, выполняющей запросы
- •Процедура "отобразить"
- •Процедура "з"
- •Процедура "характер"
- •6.7. Описание изменений базы данных
- •Мир кубиков
- •Картина состояния
- •Внесение изменений в базу данных при помощи процедуры "поместить"
- •Реализация процедуры "поместить"
- •Оценка механизма наследования
- •Процедура "послать" как предикат метаязыка
- •Библиографические заметки
- •Упражнения
Оценка механизма наследования
Механизм наследования - это практическое воплощение концепции наследования. Он пригоден для представления таких ситуаций, в которых имеется множество состояний знаний, иерархически взаимосвязанных друг с другом. Тем самым механизм наследования создает основу для перевода на Пролог знаний, выраженных при помощи формализма фреймов или объектно-ориентированного формализма. Уже существующую фразу Пролог-программы легко можно адаптировать к этому механизму, просто добавив в заголовок этой фразы дополнительный аргумент, содер
жащий имя состояния знаний. Примеры данного раздела показывают, что применение механизма наследования позволяет реализовать удобную для восприятия аксиоматизацию системы, свободную от побочных эффектов
управления.
Недостатком механизма наследования является то, что он работает
неэффективно, если запросу к процедуре "послать" приходится анализировать длинные цепи состояний. В приведенной форме, механизм наследования позволяет порожденному состоянию иметь более одного родителя. В объектно-ориентированном формализме это называется множественным наследованием. К примеру, на рис. 6.9 показана ситуация, при которой состояние Z наследует фразы и от состояния Y, и от состояния X.
Неэффективность процедуры "послать" возрастает, если состояние, к которому обращен запрос, имеет более одного родителя.
Процедура "послать" как предикат метаязыка
В разд. 0.9 отмечалось, что на уровне объектного языка смыслом ответа на Пролог-запрос является либо соблюдение, либо несоблюдение отношения, описанного в запросе. Но на уровне метаязыка смысл ответа на запрос заключается в следующем:
Запрос доказуем или недоказуем
при помощи стратегии решения задач интерпретатора
в соответствии с фразами текущей программы.
Можно сказать, что смысл ответа на запрос определяется метаязыковым предикатом с двумя следующими неявными параметрами: 1) должна использоваться стратегия решения задач интерпретатора Пролога и 2) множество просматриваемых фраз ограничено фразами текущей программы.
Употребление механизма наследования приводит к небольшому изменению метаязыкового смысла ответа на запрос. При выполнении запроса процедурой "послать" смысл ответа состоит в следующем:
Запрос доказуем или недоказуем при помощи стратегии решения задач интерпретатора в соответствии с фразами программы, относящимися к конкретному состоянию знаний.
Имя состояния знаний, являющееся первым аргументом процедуры "послать", служит обозначением множества фраз, относящихся к этому состоянию. Поэтому механизм наследования в явной форме задает множество фраз, которое будет использовано при обработке запроса. Следует рассматривать реализацию процедуры "поспать" (как и реализацию процедуры "findall"') как расширение обрабатывающей структуры интерпретатора Пролога.
Библиографические заметки
На подход к представлению знаний, принятый в данной главе, оказали сильное влияние работы Хейеса [39], [40] и [41]. Хейес подчеркивает важность теории модели для представления знаний.
Работы [9] и [10] являются хорошим введением в семантические сети. Виноград [112] обсуждает ограничения семантических сетей, указывая в то же время на преимущества фреймов. В работах [55), [56], [39], [40] и [79J выдвигается точка зрения о том, что и семантические сети, и фреймы можно рассматривать как различные виды синтаксической формы логики предикатов.
Книга [35] является серьезным введением в язык объектно-ориентированного программирования Смолток-80. Первым языком объектно-ориентированного программирования была СИМУЛА. Захватывающая история разработки этого языка нашла отражение в работе [80]. Хьюитт (Работа Хьюитта отсутствует в списке литературы. — Примеч. пер.) (1977 г.) обсуждает управляющие структуры системы программирования, базирующейся на понятии объекта (действующей силы). Понятие абстрактного типа данных разъясняется в книге [2].
Была проведена большая работа по исследованию того, как на языке логического программирования можно выразить иные концепции представления знаний, В работах [55] и [56] под этим углом зрения рассматриваются семантические сети, в работах [40] и [77] - фреймы, а в работах р81, [106] и [114] - объектно-ориентированное программирование Ко-вальски в работе [58] обсуждает многие другие концепции представления знаний.
Хейес [40] рассматривает вопрос о том, как трактуется в логике концепция наследования формализма фреймов. Механизм наследования, описанный в данной главе, основывается на его идеях.
Аксиома фреймов рассматривается в работе [55, с. 133—138], Вопросы обретения знаний освещаются с позиций логического программирования о работах [55] и [52].