- •Интеллектуальные информационные системы
- •Введение
- •1. Логика предикатов первого порядка
- •1.1. Основы логики предикатов первого порядка
- •1.2. Основы Пролога
- •Примеры использования дизъюнкции в Прологе
- •1.3. Назначение и основные возможности swi-Prolog
- •Некоторые операции и предикаты swi-Prolog
- •1.4. Лабораторная работа № 1 Представление фактов и правил в Прологе
- •1.5. Лабораторная работа № 2. Рекурсия в Прологе
- •1.6. Лабораторная работа № 3. Обработка списков в Прологе
- •Списки и их составные части
- •2. Онтологии
- •2.1. Онтологии и семантическая паутина
- •2.2. Краткие сведения о спецификациях семантической паутины
- •Стандартные пространства имен
- •Классы rdf/rdfs
- •Свойства rdf/rdfs
- •2.3. Лабораторная работа № 4 Построение онтологической модели в Protégé. Создание классов
- •2.4. Лабораторная работа № 5 Построение онтологической модели в Protégé. Создание экземпляров классов
- •2.5. Лабораторная работа № 6 Выполнение sparql-запросов в Protégé
- •Модификаторы
- •3. Эвристические алгоритмы
- •3.1. Методы поиска решений с использованием графов
- •Сравнительная характеристика методов
- •3.2. Лабораторная работа № 7 Решение оптимизационной задачи с использованием эвристического алгоритма
- •Характеристика дополнительных ограничений скорости и мероприятий по их устранению
- •Варианты заданий на выполнение лабораторной работы
- •4. Нечеткие множества
- •4.1. Основы теории нечетких множеств и нечеткой логики
- •4.2. Лабораторная работа № 8. Решение прикладной задачи с использованием нечетких множеств
- •5. Генетические алгоритмы
- •5.1. Эволюционные вычисления
- •5.2. Лабораторная работа № 9. Решение оптимизационной задачи с использованием генетического алгоритма
- •Исходная популяция
- •Популяция после скрещивания
- •Расчет значений целевой функции
- •Популяция после редукции
- •Варианты заданий
- •6. Искусственные нейронные сети
- •6.1. Распознавание образов
- •6.2. Лабораторная работа № 10. Распознавание образов с использованием искусственной нейронной сети
- •Варианты заданий на выполнение лабораторной работы
- •Заключение
- •Библиографический список
- •Оглавление
- •Интеллектуальные информационные системы
- •6 80021, Г. Хабаровск, ул. Серышева, 47
- •Интеллектуальные информационные системы
1.2. Основы Пролога
Наиболее известным языком логического программирования, реализующим модифицированную логику предикатов первого порядка, является Пролог (Prolog – PROgramming LOGig, логическое программирование). В нем отсутствует возможность использования кванторов, а составные формулы записываются в виде фраз Хорна.
Программа на Прологе состоит из предложений (формул), каждое из которых должно заканчиваться точкой. В общем случае предложение имеет вид:
B :- A1, ... , An.
B – заголовок или голова предложения, A1, ..., An – тело. В предложении ключевой логической операцией является перевернутая импликация (B :- A эквивалентно B A). Символ «:-» означает «следует из», символ «,» – конъюнкция (логическое И, ).
При необходимости применения дизъюнкции (логическое ИЛИ, ) используется символ «;», действующий до следующей дизъюнкции, окончания правила или закрывающей круглой скобки.
Таблица 1
Примеры использования дизъюнкции в Прологе
Логика предикатов |
Пролог |
(A1 ... An) (B1 ... Bm) C |
C :- A1, ... , An; B1, ... , Bm. |
A (B C) D |
D :- A, (B ; C). |
Предложения в Прологе бывают трех видов:
факт – предложение, у которого нет тела. В терминах логики предикатов, факт – это и есть предикат. Например, факт, что Наташа является мамой Даши, может быть записан в виде2:
mama('Наташа', 'Даша').
правило – предложение, истинность заголовка которого в виде предиката зависит от истинности одной или нескольких формул, указанных в теле. Например, бабушка человека – мама его мамы или мама его папы. Соответствующие правила будут иметь вид:
grandmama(X, Y):-
mama(X, Z), mama(Z, Y).
grandmama(X, Y):-
mama(X, Z), papa(Z, Y).
или
grandmama(X, Y):-
mama(X, Z), mama(Z, Y);
mama(X, Z), papa(Z, Y).
или
grandmama(X, Y):-
mama(X, Z), (mama(Z, Y); papa(Z, Y)).
вопрос (запрос, цель) – предложение, состоящее только из тела. Автоматическая система логического вывода Пролога рассматривает вопрос как цель, к которой надо стремиться. Если цель будет достигнута, Пролог выдает положительный ответ (true), иначе – отрицательный (false). Обычно в интерпретаторах Пролога вопросы задаются в отдельном командном окне и перед каждым новым вопросом ставится «?-». Например, вопросы с ответами «Наташа является мамой Даши?» и «Кто является мамой Даши?» выглядят:
?- mama('Наташа', 'Даша').
true.
и
?- mama(X, 'Даша').
X='Наташа'.
Предложения, записанные с использованием перевернутой импликации, называются фразами Хорна. Разновидности предложений Пролога, записанные в виде фраз Хорна (B A), можно интерпретировать следующим образом:
факт: B true;
правило: B A;
вопрос: true A.
Во всех предложениях можно использовать переменные. Считается, что переменные в теле одного правила неявно связаны квантором всеобщности.
Переменные могут быть свободными или связанными.
Свободная переменная – переменная, которая еще не получила значения. Она не равняется ни нулю, ни пробелу; у нее вообще нет никакого значения. Такие переменные называют также неконкретизированными.
Переменная, которая получила какое-то значение, называется связанной. Такой переменной не может быть присвоено новое значение, т. е., по сути, переменная становится константой.
Областью действия переменной в Прологе является одно предложение. В разных предложениях может использоваться одно и то же имя переменной для обозначения разных сущностей. Исключением из правила определения области действия является анонимная переменная, которая обозначается символом подчеркивания «_». Анонимная переменная предписывает интерпретатору (компилятору) проигнорировать значение аргумента (терма). Если в правиле несколько анонимных переменных, то все они отличаются друг от друга, несмотря на то, что записаны с использованием одного и того же символа «_». Анонимные переменные могут записываться только в качестве терма предиката. Использовать их в выражениях (например, арифметических) нельзя. Пример использования анонимной переменной в вопросе «Есть ли у Даши мама?»:
?- mama(_, 'Даша').
true.
Таким образом, программа на Прологе состоит из фактов и правил, выражающих некоторые знания о предметной области. Вопросы – предложения, истинность которых нас интересует. Если запрос не содержит переменных, то вычисление его значения дает ответ «true» при его истинности, либо ответ «false» при его ложности. Если же в вопросе есть переменные, то ищутся их значения (интерпретация), при которых это предложение и другие необходимые предложения программы становятся истинными.
Для поиска ответа на вопрос (доказательства целевого утверждения) в Прологе используется метод перебора с возвратами3 (поиск в глубину). В то же время, за счет структуры и порядка формул можно добиться реализации поиска в ширину.
