
- •1.Введение в функциональное и логическое программирование
- •1.1. Основные классы вычислительных моделей
- •1.1.1 Процедурная вычислительная модель
- •1.1.2 Функциональная вычислительная модель
- •1.1.3. Логическая вычислительная модель
- •1.1.4. Объектно-ориентированная вычислительная модель (ооп)
- •1.2.Метод оценки (способ получения результатов)
- •1.3. Обмен информацией в процессе оценки
- •1.4.Понятие искусственного интеллекта
- •1.5.Символьные языки программирования
- •1.6. Основные направления в искусственном интеллекте
- •Для работы в сфере ии надо иметь:
- •1) Языки ии, обеспечивающие простоту модификации
- •3) Важна и структура самой машины, позволяющая с
- •2.Основы логического программирования и язык Пролог.
- •2.1.Основные понятия
- •2.2.Определение отношений на основе фактов и правил
- •2.3 Пример программы на языке Пролог
- •2.4.Использование рекурсии
- •2.5.Декларативная и процедурная трактовка программы
- •2.6. Cтруктура программы
- •2.7.Особенности лп:
- •2.8 Использование предиката not и
- •3.Синтаксис Пролога
- •3.1. Объекты данных
- •3.2. Составные объекты и альтернативные домены. В утверждениях объекты представляют собой данные.
- •3.2.1. Составная структура
- •Листинг3.1. Использование доменной структуры с именем personal_library
- •3.2.2.Доменная структурная диаграмма программы “Библиотека” (дсд)
- •3.2.3.Предикатная структурная диаграмма программы “Библиотека” (псд)
- •3.2.4. Альтернативные домены
- •Выводы:
- •Рассмотрение работы с составными объектами и альтернативными доменами закончено. Посмотрим, как именно строится логический вывод, реализованный на эвм?
- •3.3. Сопоставление структур(matching)
- •3.4.Унификация и подстановки (Unify).
- •3.5.Основные правила поиска с возвратом:
- •Листинг 3.4.Унификация и поиск с возвратом
- •4.Принцип резолюции
- •Метод резолюции в исчислении предикатов – это пра-
- •4.1.Логическое следствие
- •4.2. Логический вывод
- •4.3 Преимущества и недостатки метода резолюции
- •4.4. Пример применения метода резолюций.
- •5. Управление поиском решений
- •5.1.Метод отката после неудачи – опн
- •5.2 Метод отсечения и отката – оо
- •5.2.1.Влияние предиката cut на составную цель
- •5.2.3. Использование зеленых и красных отсечений
- •5.2.4.Использование предиката not как средства управления
- •5.3.Метод повтора, определяемый пользователем (мп)
- •5.4.Методы организации рекурсии
- •Листинг 5.9. Бесконечная рекурсия (хвостовая рекурсия)
- •Пример программы, которая циклически считывает символ, введенный пользователем. Если символ не равен #, то он выводится на экран, иначе процесс заканчивается.
- •Листинг 5.14. Пример рекурсии для генерации ряда чисел в порядке возрастания
- •Определение
- •Список помогает сделать программу компактной, эффектив-
- •Список – это рекурсивный составной объект, поэтому
- •6.1.Операции над структурами данных типа список.
- •6.2.Предикат findall
- •6.3. Операции со структурами данных.
2.6. Cтруктура программы
Итак, на основе первой показательной программы видно, что структура программы в общем случае имеет вид:
domains
/*объявление доменов*/
predicates
/*объявление предикатов*/
clauses
/*предложения-факты и правила*/
goal
/*цель программы*/
Раздел доменов (domain)
В этом разделе объявляются домены всех аргументов, используемых в предикатах. Домены позволяют задать разные имена различным видам данных. По сути в этом разделе задается область интерпретации предметных переменных.
domains
title, author=symbol
year=integer
predicates
book(title, author, year)
Объявление собственных доменов позволяет отследить ошибки. Несмотря на то, что author и title интерпретируются типом symbol ,они не эквивалентны друг другу.
Если вы перепутали местами объекты, то это будет сразу обнаружено.
Интерпретация (задание типов аргументов) при декларации предикатов может происходить напрямую (без их описания в разделе domains),но только в случае, если эти домены – стандартные (смотри таблицу стандартных доменов).
Раздел предикатов ( predicates)
Если в разделе clauses вы описали собственные не cтандартные предикаты, то их необходимо объявить в разделе predicates(иначе Пролог вас не поймет).
В результате объявления предиката вы сообщаете, к каким доменам принадлежат аргументы этого предиката. Только стандартные предикаты объявлять не обязательно.
Все пользовательские предикаты c указанием доменов(типов) их аргументов в этом разделе просто перечисляются.
predicates
summa(integer, integer, integer)
Декларация предиката не завершается точкой.
Имя предиката начинается с буквы, за которой может следовать буква, цифра или знак подчеркивания.
Раздел предложений (сlauses)
Раздел состоит из фактов и правил.
Факты(facts) устанавливают отношения между объектами или описывают свойства объекта:
student(petrov, sp-81,2010).
cup(red).
parent(bob, tom).
Правила(rules)- определяют, когда эти отношения истинны. Правила позволяют выводить одни факты из других.
Голова правила истинна тогда и только тогда, когда являются истинными все утверждения, составляющие тело.
If тело then голова ( голова if тело)
Раздел целей (goal)
запускает программу в работу.
Выводы:
Программа состоит из предложений, определяющих отношения между объектами.
Предложения бывают трех типов: факты, правила и цели.
Факты содержат утверждения, которые всегда истинны. Правила содержат утверждения, истинность которых зависит от выполнения некоторых условий. Правила состоят из головы и тела. Тело поставляет новые подцели, которые требуется доказать.
Цель позволяет пользователю узнать у системы, какие утверждения являются истинными. Цель доказывается самой системой с использованием механизмов упрощения и вывода. В ходе вычислений вместо переменной может быть подставлен другой объект, то есть переменная может быть означена. Переменная может быть либо свободной, либо связанной. Так как Пролог не имеет оператора присваивания, то переменная инициализируется при сопоставлении с константой в фактах или правилах. Переменная используется как часть процесса поиска решения, а не как хранилище информации. Переменная остается связанной только то время, которое необходимо для доказательства цели, потом переменная становится свободной. Цель может быть простой или составной (конъюнкцией или дизъюнкцией нескольких целей).
Последовательность предложений, описывающих предикат, называется процедурой.
Вычисление ЛП – это вывод следствия из программы. В математике такие системы называются дедуктивными.(ДС)
Дедуктивной системой(ДС) называется способ задания множества путем указания исходных элементов (аксиом исчисления) и правил вывода, каждое из которых описывает, как строить новые элементы из исходных.
ДС называют также исчислением (то есть правилами вычисления и оперирования объектами) или формальной системой.
Когда говорят о языках программирования, предложения которых построены на основе строгих правил таким образом, чтобы для любой последовательности символов можно было сказать, является она правильно построенной конструкцией этого языка или нет, то о языке говорят тоже как о формальной системе.
Множество фактов, правил и целей задают логическую программу.
Факты задают отношения между объектами.
Правила определяют одни отношения через другие.
Цель требует доказательства, исходя из множества фактов и правил программы. Процесс доказательства – само выполнение программы.
Логика возложена на программиста, управление – на компьютер. Компьютер строит необходимый для решения логический вывод в соответствии с процессом упрощения (внутренние подпрограммы унификации и поиск с возвратом) и механизмом вывода (принцип резолюции – раздел логики – автоматическое доказательство теорем)
Программист должен быть квалифицирован и в представлении знаний, и в понимании того, как они обрабатываются на компьютере.