
- •Введение
- •1. Составление программ
- •1.1. Основные определения
- •1.2. Декларации в программах
- •1.3. Объявление предикатов и типов их аргументов
- •1.4. Другие разделы программы
- •Упражнения
- •2. Механизмы доказательства правил
- •2.1. Сопоставление с откатом
- •2.2. Рекурсия
- •Упражнения
- •3.Операции в Visual Prolog. Ввод-вывод
- •3.1. Операции
- •3.2. Предикаты ввода-вывода
- •4. Управление процессом доказательства правил
- •4.1. Искусственный откат
- •4.2. Отсечение
- •4.3. Повтор, определяемый пользователем
- •5. Списки
- •5.1. Процедуры обработки списков
- •5.2. Организация стеков и очередей
- •6. Внутренняя база фактов
- •7. Иерархическая организация данных
- •8. Работа с деревьями и графами
- •8.1. Двоичные деревья
- •8.2. Графы
- •9. Работа с именами и строками
- •Заключение
- •Библиографический список
- •Оглавление
Введение
Пролог создавался, в первую очередь, как специализированный язык, предназначенный для решения задач, относящихся к области искусственного интеллекта. Именно в этой области в полной мере проявляются все его достоинства и преимущества перед языками широкого назначения.
По своей сути Пролог является декларативным языком. Пролог-программа представляет собой набор логических описаний, определяющих цель, ради достижения которой она написана. Последовательность решения заложена в математической модели языка, которая реализуется в его внутреннем механизме и обеспечивает поиск результата на основе исходного логического описания. Язык имеет строгое математическое обоснование и ориентирован на использование концепций и методов логики предикатов первого порядка.
На сегодняшний день Пролог является живым и активно развивающимся языком, хотя и не имеет такого широкого распространения как C++ , С# и созданные на их основе интегрированные среды разработки.
С начала своего появления в 70-х гг. ХХ-го века система программирования на Прологе существовала как интерпретатор. В 1988 г. появилась система TurboProlog, а затем и Visual Prolog, включающие компилятор и интегрированную среду разработки программ. Появившаяся не так давно 7-я версия Visual Prolog является объектно-ориентированной средой разработки логических программ. Математическая основа и механизм работы Пролога одинаковы для интерпретатора и компилятора; вместе с тем в построении программ есть некоторые существенные различия. Классические труды [1-5], объясняющие механизм работы и области применения Пролога, написаны для интерпретатора. Поэтому, несмотря на то, что компиляторы вытеснили интерпретирующие системы, в пособии разбираются вопросы программирования как для компиляторов, так и для интерпретаторов,. При этом система программирования с интерпретатором называется традиционной системой Пролог, а с компилятором – Visual Prolog (VIP). Если речь идет об общих вопросах, то называется просто Пролог.
1. Составление программ
1.1. Основные определения
В основу работы Пролог-системы положена реализация автоматического доказательства теорем для предикатов первого порядка. Предметная область описывается посылками и правилами вывода заключений, сведенных по форме до так называемых дизъюнктов Хорна утверждений вида
АB1 &
B2 & ……Bn.
Это логическая импликация: если все посылки Bi истинны, то истинно и заключение А.
Запишем, например, в виде логического вывода следующее высказывание:
«если животное ест другое животное, то это животное хищник».
Используя импликацию и кванторы всеобщности и существования, запишем следующую формулу:
X
(хищник (X))
Y
(животное (X) &
животное (Y) &
ест (X,Y)),
(1)
где X, Y– переменные.
Декларируется она следующим образом: для всех объектов X существует объект Y такой, что если Х – животное и Y – животное и Х ест Y, то из этого следует, что Х – хищник. Введем посылки – высказывания о некоторых объектах. На естественном языке они могут быть, например, такими:
волк – это животное;
заяц – это животное;
волк ест зайца;
заяц ест капусту.
Запишем посылки в форме дизъюнктов Хорна без правой части:
животное(волк).
животное(заяц). (2)
ест(волк, заяц).
еcт(заяц, капуста).
Формулу (1) приведем к стандартному виду:
хищник(Х):- животное (Х), животное (Y), ест (X,Y), (3)
который получается из (1) устранением кванторов всеобщности и существования, заменой символа импликации двумя символами «:-», а символа конъюнкции – запятой. Формулируется (3) точно так же, как и исходная формула (1).
Высказывания (2) считаются истинными и называются аксиомами, а (3) – теоремой. В теореме выполняется аксиома замкнутости мира: возможными реализациями отношения являются только те выражения, которые содержатся в описании задачи. Все переменные в (3) связаны квантором всеобщности.
Теорема (3) может быть доказана методом резолюций. Метод резолюций является обобщением метода «доказательства от противного»: вместо того, чтобы пытаться вывести некоторую формулу-гипотезу из имеющегося непротиворечивого множества аксиом, мы добавляем отрицание нашей формулы к этому множеству и пытаемся вывести из него противоречие. Если нам удается это сделать, мы, пользуясь законом исключенного третьего, приходим к выводу, что исходная формула была выводима из множества аксиом [3].
Аксиомы и теоремы, записанные в форме дизъюнктов Хорна, составляют основу Пролог-программы.