База знаний
Положение в области баз знаний таково, что следует говорить о наступлении периода создания промышленных образцов подобных систем. Эти системы реализуются либо чисто программно, либо программно-аппаратными средствами, получившими название машин баз знаний. В стандартный набор процедур, образующих базу знаний, входят процедуры ввода и кодировки информации, процедуры проверки введенной информации на непротиворечивость с ранее записанной информацией, процедуры корректировки знаний, процедуры пополнения знаний, подобные тем, которые мы упоминали в связи с описанием уровней понимания, процедуры реализации вопросно-ответного отношения. В ближайшем будущем к этим процедурам будут добавлены средства для диалогового взаимодействия инженера по знаниям с экспертом – специалистом в некоторой проблемной области, с помощью которых станет возможным «добывать знания» у эксперта. Способы реализации перечисленных процедур описаны в [36-39].
Представление знаний требует разработки специальных языковых средств, ориентированных на описание знаний и манипулирование ими. Обычные языки программирования, ориентированные на запись и реализацию процедур, плохо подходят для баз знаний. Первые попытки строить языки, специально предназначенные для баз знаний (ФРЛ, КРЛ, ОПС-5 и др.) выявили ряд трудностей, которые стоят на пути созданий эффективных средств для работы со знаниями. Так одной из причин неудач первого этапа японского проекта ЭВМ пятого поколения была плохая совместимость языков представления знаний в базах знаний с языками логического программирования, используемыми в решателях.
В настоящее время можно считать, что спор о достоинствах и недостатках языков декларативного и процедурного типов, основанных на фреймах н продукциях, разрешился полюбовно. Стало ясно, что хорошие языки представления знаний и манипулирования ими должны иметь достаточно богатые возможности как для декларативных описаний, так и дли описания процедур. Примером такого смешанного языка может служить фреймовый язык, у которого в качестве значений слотов могут выступать отдельные продукции или имена присоединенных процедур. Именно по этому пути идут сейчас все разработчики ЭВМ новых поколении.
Решатель
Основная задача решателя — это преобразование исходного описания задачи или задания на выполнение некоторой программы в рабочую программу для ЭВМ. Математически эта задача сводится к переводу исходного описания в некоторое промежуточное формализованное описание (описание на языке спецификаций, в качестве которого чаще всего выступает исчисление предикатов первого порядка или некоторое подмножество формул, допустимых в подобном исчислении). Подобная формализация рассматривается как теорема. Доказательство теоремы можно найти в рамках формальной системы, все компоненты которой хранятся в базе знаний. Средства вывода входят в решатель. Построенный вывод (при положительном результате доказательства) позволяет извлечь из него рабочую программу, нужную пользователю.
Работы по реализации подобных процедур были начаты в СССР довольно давно, раньше, чем в зарубежных странах. Первые системы такого типа ПРИЗ и СПОРА еще не были достаточно эффективными, но заложили основу теории и практики построения подобных систем [40]. В последнее время было показано, что в качестве языка, на котором функционирует решатель, можно использовать языки логического программирования, в частности язык ПРОЛОГ. Переход к языкам такого типа резко повышает эффективность процедур автоматического синтеза программ в решателях [41]. Можно предполагать, 'что подобный подход даст возможность строить вполне приемлемые с практической точки зрения решатели в ЭВМ новых поколений.