Основы логического программирования в среде Турбо Пролог. Учебное пособие по курсу «Экспертные системы»
.pdfФедеральное агентство по культуре и кинематографии Кемеровский государственный университет культуры и искусств Кафедра технологии автоматизированной обработки информации
Е. Н. Прыкина
ОСНОВЫ ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ В СРЕДЕ ТУРБО ПРОЛОГ
Учебное пособие
по курсу «Экспертные системы» для студентов специальностей 080801 «Прикладная информатика (в информационной сфере)», «Прикладная информатика (в социально-культурной сфере)»
Кемерово 2006
УДК 50
ББК 32.973 стд 1–018 П85
Рецензенты:
кандидат физико-математических наук, доцент кафедры теоретической физики Кемеровского государственного университета
М. Л. Золотарев;
кандидат технических наук, доцент, зав. кафедрой технических дисциплин филиала Российского государственного профессионально-педагогического университета в г. Кемерово
А. Н. Садохин
Прыкина Е. Н.
П85 Основы логического программирования в среде Турбо Пролог [Текст]: учебное пособие по курсу «Экспертные системы» / Е. Н. Прыкина. – Кемерово: Кемеров. гос. ун-т культуры и искусств, 2006. – 68 с.
ISBN 5–8154–0130–7
В пособии Е. Н. Прыкиной, канд. физ.-мат. наук, доцента кафедры ТАОИ, рассматриваются основные методы логического программирования. Рекомендуется студентам специальностей «Прикладная информатика (в информационной сфере)», «Прикладная информатика (в социально-культурной сфере)».
УДК 50
ББК 32.973 стд 1–018
ISBN 5–8154–0130–7 |
© Прыкина Е. Н., 2006 |
|
© Кемеровский государственный университет |
|
культуры и искусств, 2006 |
ВВЕДЕНИЕ
Создание экспертных систем с широким спектром возможностей, являющихся помощниками человека при поиске решений в сложных ситуациях, требует привлечения эффективных инструментальных средств разработки. К их числу относятся языки обработки символической логической информации, родоначальником которых является Пролог.
Пролог – язык высокого уровня, ориентированный на использование концепций и методов математической логики. Как следует из названия, Пролог предназначен для ПРОграммирования в терминах ЛОГики. Этот язык был разработан в Марселе в 1972 году. Основной особенностью Пролога, отличающей его от других языков, является декларативный характер написанных на нем программ.
Прологу присущ ряд механизмов, которыми не обладают традиционные языки программирования: сопоставление с образцом, вывод с поиском и возвратом. Еще одно существенное отличие заключается в том, что для хранения данных используются списки, а не массивы. Одним из основных методов программирования является рекурсия.
Пролог – язык программирования, хорошо приспособленный для автоматизации различных форм логических рассуждений. Строительными блоками программы являются множество объектов определенной структуры, а также функции и отношения, связывающие эти объекты. Программа на Прологе не является таковой в традиционном понимании, так как не содержит управляющих конструкций типа условных операторов, операторов цикла или перехода. Она представляет собой модель некоторого фрагмента предметной области, о котором идет речь в решаемой задаче. Таким образом, вместо алгоритма решения задачи составляется ее логическая спецификация.
Возможность создания программы в терминах решаемой задачи является одним из основных преимуществ Пролога перед традиционными языками программирования, так как происходит оперирование не абстрактнымиоператорами,чтоувеличиваетскоростьееразработкииобеспечивает высокую надежность программы.
Область применения языка Пролог: экспертные системы, восприятие текстов на естественном языке, символьные вычисления, разработка компиляторов, создание языков для встроенных систем, архитектурное
проектирование и т. д. Его выразительная мощность и высокий уровень логического программирования позволяют писать программы, которые трудно разрабатывать с помощью обычных языков программирования. Примеры, рассмотренные в учебном пособии, иллюстрируют некоторые достоинства и характерные черты программирования на Прологе.
Данное пособие разработано по курсу «Экспертные системы» для студентов, обучающихся по специальности «Прикладная информатика (в информационной сфере, в социально-культурной сфере)», а также для студентов всех специальностей, связанных с обработкой информации.
Автор выражает искреннюю признательность руководителю Центра информационных технологий Кемеровского государственного университета культуры и искусств В. В. Малышеву за благожелательную критику и консультации по составлению программ, послужившие совершенствованию учебного пособия. Автор благодарит коллег за обсуждение и ценные замечания, позволившие оптимизировать структуру и содержание учебного пособия.
Слова благодарности автор адресует рецензентам – кандидату технических наук, доценту, заведующему кафедрой технических дисциплин филиала Российского государственного профессионально-педагогичес- кого университета в г. Кемерово А. Н. Садохину и кандидату физико-ма- тематических наук, доценту кафедры теоретической физики Кемеровского государственного университета М. Л. Золотареву.
Глава 1. Основные понятия Турбо Пролога
1.1. Понятие логиче ского программирования
На протяжении многих тысячелетий человечество занимается накоплением, обработкой и передачей знаний. Для этих целей непрерывно изобретаются новые средства и совершенствуются старые: речь, письменность, почта, телеграф, телефон и т. д. Большую роль в технологии обработки знаний сыграло появление компьютеров.
В октябре 1981 года Японское министерство международной торговли и промышленности объявило о создании исследовательской организации – Института по разработке методов создания компьютеров нового поколения. Целью данного проекта было создание систем обработки информации, базирующихся на знаниях. Предполагалось, что эти системы будут обеспечивать простоту управления за счет возможности общения с пользователями при помощи естественного языка. Эти системы должны были самообучаться, использовать накапливаемые в памяти знания для решения различного рода задач, предоставлять пользователям экспертные консультации. Вскоре развитие получили американский и европейский проекты.
Появление таких систем могло бы изменить технологии за счет использования баз знаний и экспертных систем. Основная суть такого качественного изменения заключается в переходе от обработки данных к обработке знаний. В 1991 году предполагалось создать первый прототип компьютера пятого поколения, работа которого приближена к тому, как мыслит человек.
Поставленные цели в полной мере так и не были достигнуты, однако подобные проекты послужили импульсом к развитию нового витка исследований в области искусственного интеллекта и обусловили появление интереса к логическому программированию.
Логическим (декларативным) программированием называется метод программирования, предназначенный для решения задач искусственного интеллекта, в соответствии с которым программа описывает логическую структуру решения задачи, указывая преимущественно, что «нужно сделать», не вдаваясь в детали того, «как это делается». Практическим воплощением метода является язык Пролог.
В основу языка Пролог положена математическая модель теории исчисления предикатов, в рамках которой предикат – отношение, существующее между некоторым фиксированным набором аргументов. В Прологе реализован декларативный подход, при котором задача описывается с помощью фактов и правил, затем формулируется утверждение, проверяемое на истинность.
С точки зрения логики предикатов элементарные выражения имеют
вид:
(a1,...an ),,
где p – имя предиката; a1,...an – аргументы. Аргументом предиката может быть константа, переменная или составной объект. Число аргументов предиката называется его арностью.
ВПрологе выражение «Париж – столица Франции» запишется
ввиде:
p (x, y),
где p – предикат, выражающий отношение «являться столицей», x, y –
объекты «Париж, Франция», связанные отношением p . Сначала записывается имя отношения (предикат), затем в круглых скобках через запятую его аргументы.
Выделим основные области применения Пролога:
•экспертные системы и оболочки экспертных систем;
•созданиеестественно-языковыхинтерфейсовдлясуществующих систем;
•быстрая разработка прототипов прикладных программ;
•символьные вычисления для решения уравнений, дифференцирования и интегрирования;
•системы автоматизированного проектирования;
•автоматизированное управление производственными процессами;
•проектирование динамических реляционных баз данных;
•автоматический перевод с одного языка на другой.
Следует отметить, что Пролог не предназначен для областей, где необходимы большие объемы арифметических вычислений.
Вистории возникновения и развития языка Пролог можно выделить следующие этапы.
В1965 году был метод автоматического поиска доказательства теорем в исчислении предикатов первого порядка, получивший название «принцип резолюции».
В1973 году в Марсельском университете под руководством Алана Колмероэ была создана программа, предназначенная для доказательства теорем. Она была написана на Фортране, использовалась при построении систем обработки текстов на естественном языке. Программа доказатель-
ства теорем получила название Prolog (от Programmation en Logique) и
послужила прототипом языка Пролог.
В1976 г. Роберт Ковальский вместе с его коллегой Маартеном ван Эмденом предложил два подхода к прочтению текстов логических программ: процедурный и декларативный.
В1977 году в Эдинбурге был создан компилятор языка Пролог для ЭВМ DEC–10, послуживший прототипом для многих последующих реализаций Пролога.
В1980 году Кларк и Маккейб в Великобритании разработали версию Пролога для персональных ЭВМ.
Существует много версий языка Пролог. Они отличаются синтаксисом, некоторыми особенностями исполнения и удобством программирования. В учебном пособии изложены теоретические основы языка Пролог применительно к одной из распространенных версий Пролога – Турбо Пролог. Его начинала разрабатывать фирма Borland International в содружестве с датской компанией Prolog Develop ment Center (PDC). Первая версия вышла в 1986 году. Последняя совместная версия имела номер
2.0 и была выпущена в 1988 году.
Пролог – это язык, который до сих пор находится в развитии. Область его применения постоянно расширяется, в него вносятся новые дополнительные функциональные возможности, призванные удовлетворить возрастающие потребности пользователей. В частности, одно из перспективных направлений развития языка реализует концепцию интеллектуальных агентов.
1.2. Типы пре дложе ний
Программа на Прологе есть совокупность предложений (утверждений).
Существуют три типа предложений: факты, правила и вопросы. Все предложения языка Пролог заканчиваются точкой.
Множество предложений, имеющих в заголовке предикат с одним и тем же именем и одинаковым количеством аргументов, трактуются как процедура.
Факты
Простейшими видами утверждения являются факты. Факты используются для констатации того, что выполнено некоторое отношение между объектами. Например,
likes (nick, helen).
Здесь устанавливается, что «Нику нравится Елена».
Определяя с помощью фактов отношения между объектами, необходимо учитывать порядок следования аргументов (в каком порядке перечисляются имена объектов внутри круглых скобок). Например, в приведенном выше примере на первом месте в списке аргументов находится «тот, кому нравится», а объект, «который нравится», стоит на второй позиции. Таким образом, факт likes (nick, helen) не одно и то же, что likes (helen, nick). В этом случае первый факт говорит, что Нику нравится Елена, в то время как второй факт – что Елене нравится Ник. Если мы хотим сказать, что Елене нравится Ник, то мы должны сформулировать это утверждение в виде факта likes (helen, nick).
Приведем примеры фактов вместе с возможной их интерпретацией на естественном языке:
women (helen). |
Елена – женщина. |
father (victor, helen). |
Виктор является отцом Елены. |
give (victor, book, helen). |
Виктор дает Елене книгу. |
Если необходимо выразить совокупность многих фактов, то удобно использовать переменные. Пусть всем детям в классе нравятся яблоки. Так, вместо того чтобы записывать факт для каждого объекта
likes (nick, app le). likes (helen, app le). likes (mary, app le).
…
совокупность фактов можно выразить следующим фактом: likes (Х, app le).
В фактах имена аргументов и предикатов начинаются со строчных букв.
СовокупностьфактоввПрологеназываетсябазойданных.Мыбудем пользоваться термином «база данных» при объединении вместе некоторых фактов (в дальнейшем и правил) для совместного их использования при решении конкретной задачи.
Вопросы
Имея некоторую совокупность фактов, мы можем обращаться к Прологу с вопросами о них.
Система рассматривает вопрос как цель, к которой надо стремиться. Ответ на вопрос может оказаться положительным или отрицательным, в зависимости от того, может ли быть достигнута соответствующая цель. В Прологе вопрос записывается почти так же, как и факт, за исключением того, что перед ним ставится специальный символ в виде вопросительного знака и следующего за ним тире («? – »). Вопрос «имеет ли Мэри (данную конкретную) книгу?» запишется в следующем виде:
? – have (mary, book).
Обращение к Прологу с вопросом инициирует процедуру поиска в базе данных, ранее веденной в систему. Пролог ищет факты, сопоставимые с фактом в вопросе. Два факта сопоставимы,если их предикаты одинаковы и их соответствующие аргументы попарно совпадают. Если Пролог находит факт, сопоставимый с вопросом, то он отвечает «да». Если в базе данных такого факта не существует, то Пролог отвечает «нет». Ответ, выдаваемый Прологом, выводится на дисплей непосредственно под запросом. Пусть имеется следующая база данных:
likes (alexander, fish). likes (alexander, mary). likes (mary, book). likes (alexander, book).
После того как факты введены в Пролог-систему, можно было бы формулировать следующие вопросы, ответы на которые Пролог написал бы под текстом вопроса.
?– likes (alexander, car).
нет
?– likes (mary, alexander).
нет
?– likes (mary, book).
да
Пролог отвечает «нет» на вопрос о том, нравится ли Александру машина. Система выдает такой ответ, так как среди фактов в базе данных, представленных отношениями «нравиться», нет фактов, согласующихся с этим вопросом.
Для того чтобы задавать вопросы вида «Какие объекты нравятся Александру?», необходимо использовать переменные.
ВПрологе можно присваивать имена не только конкретным объектам, но и использовать имена для обозначения объектов, которые должны быть определены Пролог-системой. Имена такого типа называются переменными. Переменные принято записывать с прописной буквы.
При поиске ответа на вопрос Пролог организует просмотр всех фактов в базе данных, чтобы обнаружить объект, который эта переменная могла бы обозначать. Так, когда мы спрашиваем «Нравится ли Александру Х?», Пролог просматривает все известные ему факты для обнаружения тех объектов, которые нравятся Александру.
?– likes (alexander, Х).
Вответе Пролог напишет:
Х=fish; Х=mary; Х=book.
Вопрос «Существует ли объект, которому нравится Мэри?» запишется следующим образом:
? – likes (Х, mary).
Ответом будет:
Х= alexander.
В программе на Прологе важен порядок предложений внутри процедуры. От порядка предложений зависит порядок поиска решений и порядок, в котором будут находиться ответы на вопросы.
Конъюнкция
Для получения ответов на вопросы о более сложных отношениях, таких как «Существует ли что-нибудь, что нравится Мэри и Александру?», необходимо использовать конъюнкцию целей. Наш вопрос содержит две цели:
•Существует ли такой объект Х, который нравится Мэри.
•Нравится ли Александру найденное значение Х.
ВПрологе это запишется в следующем виде:
?– likes (mary, Х), likes (alexander, Х).
10
