3.1. Язык логического программирования Пролог
После почти 20-летнего успешного развития в 1996 г. Пролог стал стандартом логических языков программирования. Главным отличием его от так называемых процедурных языков, таких как Borland С, Delphi, Java и др., является его декларативный характер.
Если в традиционных языках программирования необходимо знать заранее, как решить ту или иную задачу, то в декларативном Прологе, это делает «сам» интерпретатор. Эта особенность языка делает его незаменимым в областях, где сложность задач и объем необходимых знаний превосходят возможности человека. Это свойство наиболее подходит для исследований в области ИИ.
Пролог – это декларативный язык, в среде которого необходимо точно и грамотно на логическом языке описать условие задач, а ее выполнение – это результат работы некоторого рутинного процесса, выполняемого интерпретатором. Фрагменты Пролог-программы иногда называют базами знаний. Далее рассмотрение языка осуществляется для версии Турбо Пролог.
Пролог реализует управляющую структуру в виде обратной цепочки логического вывода, то есть доказательство от противного. Этим частично исключается монотонность.
Составляющие Пролог-программы
В самом общем виде Пролог-программа может быть представлена как совокупность двух основных разделов.
Первый раздел содержит постановку задачи, т.е. описание ее условия в виде набора исходных данных, представленных в форме БД.
Второй раздел описывает алгоритм, т.е. порядок выполнения программы, и представляет собой совокупность утверждений (формул), содержащих факты, правила и вопросы, необходимые для достижения поставленной цели.
Таким образом, в структуре программы выделяются следующие виды утверждений: факты, вопросы (запросы) и правила. В бинарной интерпретации факт включает только «голову» утверждения. В конце факта ставится точка. Вопрос (запрос) представляет собой неосновной терм, всегда содержащий только непустое «тело» утверждения. Правило состоит из подцели и условий ее доказательства, т.е. заполненных «головы» и «тела» утверждения. В конце правила также ставится точка.
Утверждения
Простейший вид утверждений Пролог-программы – это факт. Он констатирует наличие отношений между объектами или переменными. Отношение в программе называется предикатом.
Пример.
нравится ("Лена", "теннис").
играет ("Костя", "футбол").
имеет ("Сергей", ___).
отец ("Катя", "Дмитрий").
плюс (3, 2, 5).
Составляющими отношений или предикатов являются атомы и переменные. Атомы в Пролог-программе записываются строчными буквами. Если атом необходимо записать с прописной буквы, его значение заключается в апострофы (двойные кавычки). В конце факта в базе данных программы ставится точка.
Вопросы в Пролог-программе имеют тот же формат, что и факты. Их можно различить по контексту, расположению на экране в режиме отладки программы или по наличию знака «?» в начале или в конце утверждения (в зависимости от диалекта интерпретатора). Семантически вопрос в Пролог-программе определяет наличие того или иного отношения между объектами.
Пример.
нравится ("Лена", "хоккей").
нравится ("Лена", "теннис").
? нравится ("Лена", X).
X = "теннис".
Правила предназначены для вывода логического следствия на основе имеющейся БД. Правила в Пролог-программе записываются в виде конструкции, называемой резольвентой:
t1 :- а1, а2, ... , аN. , (2.3)
где t1 – подцель (теорема или промежуточная цель программы);
а1, а2, … , аN – аксиомы, посредством которых достигается подцель;
:- – знак определения функции (читается: «определяется, как…»);
, – знак операции конъюнкции (логическое «и»);
. – обязательный знак окончания правила (резольвенты).
Пример.
Дано: «все люди ошибаются», «Сократ – человек».
Первую фразу можно формализовать следующим образом: «для всех X, X ошибается, если X – человек».
Запишем исходные данные в терминах Пролог-программы:
failable (X) :- person (X).
person (socrates).
Сформулируем запрос:
failable (socrates),
в результате получим ответ: yes.
- Содержание
- 1. Базы данных, ориентированные на искусственный интеллект 18
- 2. Формализация знаний о проблемной области 37
- 3. Инструментальные средства логического программирования 67
- 4. Организация принятия решений в экспертных системах 100
- 5. Интеллектуальные технологии обработки информации 115
- 6. Система моделирования эо kappa 158
- 7. Стандартные функции эо kappa 180
- 8. Работа с правилами в эо kappa 193
- 9. Создание интерфейса пользователя в эо kappa 206
- 10. Инструментальная оболочка разработки эс − clips 223
- 10.2.3. Правила 231
- 11. Разработка экспертной системы в ио clips 261
- 12. Создание проекта онтологии с помощью ис Protégé 291
- Предисловие
- Список сокращений
- Введение
- 1. Базы данных, ориентированные на искусственный интеллект
- 1.1. Экспертные системы и их особенности
- 1.2. Основные типы задач, решаемых с помощью экспертных систем
- 1.3. Особенности разработки экспертных систем
- 1.3.1. Приобретение знаний
- 1.3.2. Представление знаний
- 1.3.3. Реализация
- 1.4. Виды экспертных систем
- 1.5. Представление знаний в системах искусственного интеллекта
- 1.5.1. Данные и знания
- 1.5.2. Представление знаний в рабочей памяти эвм
- 1.5.3. Представление знаний в базе знаний
- Контрольные вопросы
- 2. Формализация знаний о проблемной области
- 2.1. Таксономическая классификационная схема
- 2.2. Онтологический подход к представлению проблемной информации
- 2.2.1. Цели разработки онтологий
- 2.2.2. Фундаментальные правила разработки онтологии
- 2.2.3. Определение области и масштаба онтологии
- 2.2.4. Рассмотрение вариантов повторного использования существующих онтологий
- 2.2.5. Перечисление важных терминов в онтологии
- 2.2.6. Определение классов и их иерархии
- 2.2.7. Определение свойств классов – слотов
- 2.2.8. Определение фацетов слотов
- 2.2.9. Домен слота и диапазон значений слота
- 2.2.10. Создание экземпляров
- 2.3. Модели представления знаний
- 2.3.1. Фреймы
- 2.3.2. Семантические сети
- 2.3.3. Исчисление предикатов первого порядка
- 2.3.4. Модель представления знаний в виде правил продукции
- Контрольные вопросы
- 3. Инструментальные средства логического программирования
- 3.1. Язык логического программирования Пролог
- 3.2. Основные разделы программы
- 3.3. Рекурсивные вычисления в Пролог-программе
- 3.4. Процесс реализации вывода
- 3.5. Предикаты
- 3.6. Списковые структуры
- 3.7. Вызов внешних функций из Пролог-программы и интерфейс с программами на других языках программирования
- 3.8. Пример реализации экспертной системы на языке Пролог
- 3.9. Диалекты и языки, используемые для задач искусственного интеллекта
- Контрольные вопросы
- 4. Организация принятия решений в экспертных системах
- 4.1. Организация логического вывода в экспертных системах
- 4.2. Правила
- 4.3. Поиск решений
- 4.4. Управляющая структура
- 4.5. Технологии принятия решений в системах с базами знаний
- 4.6. Методы поиска, реализованные в экспертных системах
- 4.7. Использование процедур
- 4.8. Представление неопределенности в информационных приложениях с базами знаний
- Контрольные вопросы
- 5. Интеллектуальные технологии обработки информации
- 5.1. Интеллектуальные системы, основанные на нечеткой логике
- 5.2. Нейронные сети
- 5.2.1. Биологический и искусственный нейроны
- 5.2.2. Классификация нейронных сетей
- 5.2.3. Задачи, решаемые с помощью нейронных сетей
- 5.3. Эволюционные вычисления
- 5.3.1. Основные определения
- 5.3.2. Процесс работы генетического алгоритма
- 5.3.3. Пример решения задачи с использованием генетического алгоритма
- 5.3.4. Достоинства и недостатки генетических алгоритмов
- 5.4. Комплексный подход к проектированию систем искусственного интеллекта
- 5.5. Инструментальные средства представления знаний
- 5.5.1. Классификация оболочек эс
- 5.5.2. Уровни реализации экспертных систем
- Контрольные вопросы
- 6. Система моделирования эо kappa
- 6.1. Представление знаний в эо kappa
- 6.2. Начало работы с эо kappa
- 6.3. Окно иерархии объектов (Object Browser)
- 6.4. Окно инструментов (Knowledge Tools) и редакторы знаний
- 6.4.1. Редактор классов (Class Editor)
- 6.4.2. Редактор объектов (Instance Editor)
- 6.4.3. Редактор слотов (Slot Editor)
- 6.4.4. Редактор методов (Method Editor)
- 6.4.5. Редактор функций (Function Editor)
- 6.4.6. Редактор правил (Rule Editor)
- 6.4.7. Редактор цели (Goal Editor)
- 6.5. Окно интерпретатора (kal Interpreter)
- 6.6. Окно сеанса (Session)
- 6.7. Окно связи правил (Rule Relations)
- 6.8. Окно трассировки правил (Rule Trace)
- 6.9. Окно просмотра иерархии выводов (Inference Browser)
- 6.10. Средство объяснений эо kappa
- Контрольные вопросы
- 7. Стандартные функции эо kappa
- 7.1. Функции манипулирования знаниями
- 7.1.1. Функции работы с классами
- 7.1.2. Функции работы с объектами
- 7.1.3. Функции работы с иерархией объектов
- 7.1.4. Функции работы со слотами
- 7.1.5. Функции работы с методами
- 7.1.6. Функции работы с правилами
- 7.1.7. Функции работы с целями
- 7.2. Математические функции
- 7.3. Функции работы со строками
- 7.4. Функции работы со списками
- 7.5. Логические функции
- 7.6. Функции работы с файлами
- 7.7. Функции управления
- 7.8. Функции работы с окнами
- 7.9. Функции работы с компонентами
- 7.10. Функции, определенные пользователем
- Контрольные вопросы
- 8. Работа с правилами в эо kappa
- 8.1. Создание и редактирование правил
- 8.2. Формирование списка правил
- 8.3. Создание и редактирование цели
- 8.4. Рассуждения в прямом направлении
- 8.4.1. Стратегии принятия решения
- 8.4.2. Формирование прямой цепи рассуждений
- 8.4.3. Активная трассировка при формировании прямой цепи рассуждений
- 8.5. Рассуждения в обратном направлении
- Контрольные вопросы
- 9. Создание интерфейса пользователя в эо kappa
- 9.1. Стандартные компоненты интерфейса пользователя
- 9.1.1. Компонент Button
- 9.1.2. Компонент Text
- 9.1.3. Компонент Transcript
- 9.1.4. Компонент Edit
- 9.1.5. Компонент BitMap
- 9.1.6. Компонент Drawing
- 9.1.7. Компонент StateBox
- 9.1.8. Компонент Meter
- 9.1.9. Компонент LinePlot
- 9.1.10. Компонент Slider
- 9.1.11. Компонент SingleListBox
- 9.1.12. Компонент MultipleListBox
- 9.1.13. Компонент CheckBox
- 9.1.14. Компонент CheckBoxGroup
- 9.1.15. Компонент RadioButtonGroup
- 9.2. Особенности русификации эо kappa
- Контрольные вопросы
- 10. Инструментальная оболочка разработки эс − clips
- 10.1. Общие сведения об ио clips
- 10.2. Программирование в ио clips
- 10.2.1. Основные элементы программирования
- 10.2.2. Факты
- 10.2.3. Правила
- 10.2.4. Переменные
- 10.2.5. Дополнительные средства
- 10.3 Интерфейс ио clips
- 10.3.1 Интерфейс командной строки
- 10.3.2. Графический интерфейс пользователя
- 10.3.3. Интерфейс встроенного редактора
- 10.4. Организация работы в ио clips
- 10.4.1. Постановка задачи и составление программы
- 10.4.2. Запуск ио clips
- 10.4.3. Ввод программы
- 10.4.4. Загрузка и запуск программы
- 10.4.5. Работа программы
- 10.4.6. Сохранение результатов работы
- Контрольные вопросы
- 11. Разработка экспертной системы в ио clips
- 11.1. Подготовка исходных данных
- 11.2. Выделение сущностей
- 11.3. Сбор информации
- 11.4. Диагностические правила
- 11.5. Листинг программы
- 11.6. Выполнение программы
- Контрольные вопросы
- 12. Создание проекта онтологии с помощью ис Protégé
- 12.1. Создание нового проекта
- 12.2. Структура проекта
- 12.3. Работа с классами
- 12.3.1. Создание нового класса
- 12.3.2. Создание экземпляра класса
- 12.3.3. Инструменты работы с классами
- 12.4. Работа со слотами
- 12.5. Сохранение проекта в формате rdf
- 12.6. Экспорт онтологии в формат эо clips
- Контрольные вопросы
- Заключение
- Глоссарий
- Библиографический список