- •Глава 6 представление знаний
- •6.1. Представление знаний при помощи пролога
- •Исчисление предикатов
- •Вычислительные формализмы
- •Пролог как вычислительный формализм
- •Формальный смысл
- •Внешний смысл
- •Обманчивая природа внешнего смысла
- •Представление знаний при помощи языка Си
- •Расширение языка Пролог
- •Другие вычислительные формализмы
- •6.2. Семантические сети Узлы и дуги
- •Семантическая сеть как Пролог-программа
- •6.3. Фреймы Представление знаний о ситуациях
- •Наследование значений слотов
- •Оценка формализма фреймов
- •Реализация фрейм - программы на Прологе
- •Запрет наследования
- •6.4. Объектно-ориентированное программирование Объекты и сообщения
- •Наследование
- •Объектно-ориентированное программирование в терминах абстрактных типов данных
- •Объектно-ориентированное программирование в терминах формализма фреймов
- •6.5. Механизм наследования в прологе Наследование в других формализмах
- •Наследование в Прологе
- •Состояния знаний
- •Обзор механизма наследования
- •Создание дерева состояний
- •Процедура "послать"
- •Опровержение фразы
- •Концепции механизма наследования
- •Пример с собранием
- •Пример с птицами
- •Реализация процедуры "послать"
- •Алгоритм работы процедуры "послать"
- •6.6. Программа, выполняющая запросы к базе данных
- •Состояния как виртуальные базы данных
- •Использование процедуры "з"
- •Опрос базы данных (добавление нового состояния)
- •Процедура "отобразитьсостояния"
- •Полезные свойства программы, выполняющей запросы к базе данных
- •Реализация программы, выполняющей запросы
- •Процедура "отобразить"
- •Процедура "з"
- •Процедура "характер"
- •6.7. Описание изменений базы данных
- •Мир кубиков
- •Картина состояния
- •Внесение изменений в базу данных при помощи процедуры "поместить"
- •Реализация процедуры "поместить"
- •Оценка механизма наследования
- •Процедура "послать" как предикат метаязыка
- •Библиографические заметки
- •Упражнения
Процедура "характер"
Процедура "характер" показывает все текущие критерии выбора, связанные с заданным состоянием.
характер (Мир) :-
послать (Мир, за (тип. Т)),
write ('тип: '),
(nonvar (Т), write (Т); true), nl,
послать (Мир, за (марка, М)),
write (' марка: '),
(nonvar (М), write (М); true), nl,
послать (Мир, за (вес. В)),
write (' вес: '),
(nonvar (В), write (В); true), nl,
послать (Мир, за (поверхность, П) ),
write (' поверхность: '),
(nonvar (П), write (П); true), nl,
послать (Мир, за (цвет. Ц) ),
write ('цвет: '),
(nonvar (Ц), write (Ц); true), nl, ;
6.7. Описание изменений базы данных
Динамическая база данных — это база данных, в которую время от времени требуется вносить изменения, отражающие изменения структуры описываемой системы. Один из методов реализации динамической базы данных заключается в деструктивном редактировании базы данных при необходимости внесения в нее изменений. К сожалению, при деструктивном редактировании исчезает возможность возврата к состоянию базы данных, существовавшему ранее. Это затрудняв анализ изменений базы данных.
Аксиома фреймов является альтернативной концепцией реализации динамической базы данных. Если необходимо внести изменение, то исходная база данных остается неизменной, а записывается собственно изменение. Текущая форма базы данных получается при использовании ее исходной формы с учетом сделанных изменений. Ниже формулируется аксиома фреймов, в которой U обозначает любое отношение, а состояние S + 1 является результатом выполнения действия А в состоянии S.
Аксиома фреймов
Отношение U будет соблюдаться в состоянии S + 1,
являющемся результатом выполнения действия А б состоянии S,
если U соблюдается в состоянии S,
а А не влияет на U.
Иными словами, состояние базы данных унаследует каждую фразу предыдущего состояния, если только эти фразы не были явно изменены при переходе в данное состояние.
В соответствии с аксиомой фреймов для представления динамической базы данных можно воспользоваться механизмом наследования. Начальное состояние базы данных соответствует самому верхнему узлу дерева состояний. Каждое новое состояние базы данных вводится как состояние-потомок предыдущего состояния. Поэтому изменяющаяся база данных представляется деревом состояний, растущим вниз (рис. 6.8).
После введения нового состояния базы данных, как потомка существующего состояния, каждая фраза, связанная с существующим состоянием, либо будет унаследована состоянием-потомком (т.е. не изменится),

либо будет перекрыта новым значением (т.е. изменится), либо будет опровергнута (т.е. удалена). Помимо этого, в новое состояние могут быть введены новые фразы.
Мир кубиков
Мир кубиков — это пример, часто используемый для того, чтобы проиллюстрировать аксиому фреймов. Для точного описания мира кубиков требуется динамическая база данных, в которой задаются положения кубиков на крышке стола. Метод, употребляемый для представления мира
кубиков, можно с успехом применить и в других задачах, где требуется динамическая база данных.
Описываемая версия мира кубиков основывается на базе данных, состоящей из фактов "на/3", при помощи которых задается положение кубиков. Факт «на(S, А, В)» означает, что в состоянии S кубик А находится на верхней части кубика В. Процедура "поместить" позволяет пользователю перемещать кубики, входящие в мир, на другие места, что соответствует переходам к новым состояниям базы данных "на". Начальное состояние базы данных "на" носит название "I", следующее состояние -"2 "и т.д.
Характеристики отношения "на"
Отношение "на" — это отношение либо между двумя кубиками в некотором состоянии, либо между кубиком и столом. Согласно определению данное отношение несимметрично, нерефлексивно и нетранзитивно. Все кубики имеют одинаковый размер, отношение "на" между двумя кубиками регулируется ограничением вида один-к-одному, обеспечивающим целостность. Иными словами, если кубик А уже находится на кубике В, то на кубике В не может быть никаких других кубиков. На столе может поместиться более одного кубика.
Главной функцией процедуры "поместить" является сбор данных -она собирает у пользователя сведения о необходимых изменениях базы данных. Для защиты базы данных "на" от некорректных изменений в процедуре "поместить" применяются ограничения, обеспечивающие целостность базы данных. К примеру, если кубик А уже находится на кубике В, а пользователь попытается поставить на В кубик С, то процедура "поместить" откажется выполнить предписываемое перемещение и выдаст пользователю предупреждающее сообщение. Тем самым процедура "поместить" следит за тем, чтобы в точке, где пользователь пытается вносить изменения в базу данных, отношение "на" между двумя кубиками имело вид один-к-одному. Процедура "поместить" накладывает и другие ограничения, обеспечивающие целостность, такие как недопущение употребления кубика, отсутствующего в текущем состоянии,
Первоначально база данных, описывающая мир кубиков, состоит из следующих фактов:
на(1, а, стол).
на(1, б, стол).
на(1,в,а).
на(1, г. в).
текущее_состояние (1).
Факт "текущее_состояние" содержит наименование самого последнего состояния базы данных.
