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