Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Волченков Логическое программирование язык пролог 2015

.pdf
Скачиваний:
11
Добавлен:
12.11.2022
Размер:
4.14 Mб
Скачать

Министерство образования и науки РФ

НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ «МИФИ»

Н. Г. Волчёнков

ЛОГИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

ЯЗЫК ПРОЛОГ

ТЕКСТЫ ЛЕКЦИЙ

Издание 2-е, исправленное и дополненное

МОСКВА 2015

УДК 681.3.06(075.8)

ББК 32.973-018.2я73 В68

Волчёнков Н.Г. Логическое программирование. Язык Пролог: Тек-

сты лекций. Изд. 2-е, испр. и доп. – М.: НИЯУ МИФИ, 2015. – 160 с.

В данном пособии представлены тексты 10 лекций по курсу «Логическое программирование», целью изучения которого является освоение парадигмы логического программирования, а также основ Пролога – декларативного языка программируемой логики. Кроме того, в лекциях рассматриваются методы использования Пролога для решения таких задач символьной обработки, для которых императивные (операторные) языки программирования не очень удобны, в частности, для задач искусственного интеллекта и синтаксического анализа языков.

Пособие предназначено для студентов заключительного семестра бакалавриата и первого семестра магистратуры кафедры «Кибернетика» НИЯУ МИФИ, а также может быть использовано студентами, аспирантами и специалистами в области информатики и современных информационных технологий.

Рецензент М. А. Короткова

ISBN 978-5-7262-2091-8 © Национальный исследовательский ядерный университет «МИФИ», 2003, 2015

 

Редактор Н.Н. Антонова

Подписано в печать 18.03.2015.

Формат 60 84 1/16

Объем 10,0 п.л.

Уч.-изд.л. 10,0.

Тираж 100 экз.

 

Изд. № 003-1. Заказ № 40.

Национальный исследовательский ядерный университет «МИФИ». Типография НИЯУ МИФИ.

115409, Москва, Каширское шоссе, 31.

Содержание

Об авторе

…………………………………………...................

4

Предисловие

…………………………………….………………

5

Лекция 1.

Парадигма логического программирования……

8

Лекция 2.

Синтаксис и семантика языка Пролог……………

25

Лекция 3.

Основы программирования на Прологе…………

40

Лекция 4.

Основы программирования на Прологе

 

 

(продолжение)……………………………………...

54

Лекция 5.

Синтаксический анализ на Прологе……………..

70

Лекция 6.

Программирование эффективных синтаксических

 

 

анализаторов……………………………………….

82

Лекция 7.

Программирование эффективных синтаксических

 

 

анализаторов (продолжение)…………….……….

95

Лекция 8.

Пролог и базы данных…………………………….

107

Лекция 9.

Пролог и системы искусственного интеллекта…

121

Лекция 10.

Пролог и системы искусственного интеллекта

 

 

(продолжение).......................................................

134

Литература и источники в интернете……………………...……

158

______

3

Об авторе

Волчёнков Николай Геннадьевич, кандидат технических наук, доцент кафедры «Кибернетика» НИЯУ МИФИ с 1982 г. Автор более 50 научных трудов, нескольких учебных пособий, в том числе выпущенных в центральных издательствах. Специализируется в области логического программирования, искусственного интеллекта, информатики и программирования в визуализированных средах. В настоящее время ведет курсы: «Логическое программирование», «Информационные технологии в экономике» на кафедре «Кибернетика» и на других кафедрах НИЯУ МИФИ. Является научным руководителем студентов, выполняющих курсовые и дипломные проекты, руководит подготовкой магистерских диссертаций.

4

Предисловие

Логическое программирование, вместе с функциональным программированием относят к так называемой декларативной парадигме. Это особый подход к компьютерному решению задач, в основе которых лежат, в основном, не вычисления, базирующиеся на алгоритмическом операторном подходе, а символьные преобразования. Можно сказать и так: В основе декларативной парадигмы лежит не традиционная для подавляющего большинства программистов проблема разработки алгоритмов – формального описания того, «как» надо решать задачу, а проблема формального описания того, «что» надо получить, решая задачу.

Короче говоря, «что» – это декларативная (в частности, логическая) парадигма, а «как» – это так называемая императивная парадигма. В значительной степени, декларативный подход реализован в языке программирования Пролог.

Курс, тексты лекций которого представлены в настоящем пособии, носит название «Логическое программирование». Курс предполагает изучение теоретических основ логического программирования (4 лекции), а также прикладных его аспектов: применения языка логического программирования Пролог для синтаксического анализа формальных языков (3 лекции), использования Пролога в дедуктивных базах данных и для решения задач искусственного интеллекта (3 лекции).

Чем продиктована необходимость чтения данного курса студентам кафедры «Кибернетика» – ведущей кафедры факультета «Кибернетика и информационная безопасность» (КиБ) НИЯУ МИФИ?

Вначале 1980-х годов на логическое программирование вообще

ина Пролог в частности в странах с передовыми компьютерными технологиями возлагали большие надежды многие специалисты в области информатики. Большой популярностью пользовался так называемый «японский проект вычислительных систем пятого поколения».

Однако, со временем, по ряду объективных и субъективных

причин произошел «откат» от идеи создания «искусственного интеллекта в кристалле» на базе Пролог-машины – идеи, которая, по

5

мысли ее авторов, должна была совершить настоящую революцию в компьютерных технологиях. Пролог существенно «сбавил обороты», интерес к нему во всем мире поостыл.

Но автор убежден, что с большой степенью вероятности этот интерес может возродиться – разумеется, на новом витке эволюционного развития информационных технологий. А идеи Пролога и методы программирования на Прологе, на взгляд автора, являются настолько красивыми и плодотворными, что предать их забвению было бы неразумно. И студенты кафедры «Кибернетика» НИЯУ МИФИ, которая в 2013 году отметила свое 50-летие, как никто иной, могут служить «носителями» этих идей.

Разумеется, в наше время почти безраздельного господства в информатике персональных компьютеров изучение Пролога было бы немыслимо без современных версий интерпретаторов и компиляторов этого, ко всему прочему, алгоритмически полного и в значительной степени универсального языка программирования. Путешествие по интернету быстро убеждает в том, что в мире сохранился не только интерес к Прологу с его многочисленными диалектами, но и создаются принципиально новые и развиваются многочисленные старые Пролог-системы. Они, в принципе, доступны всем желающим, чтобы поработать с ними.

Для проверки работоспособности представленных в данной книге программ на Прологе, а также для выполнения домашних заданий по данному курсу можно воспользоваться имеющейся на

кафедре «Кибернетика» НИЯУ МИФИ Пролог-системой (интерпретатором) WIN-PROLOG 4.200 Free Trial. Лицензия предостав-

лена автору этой книги Николаю Геннадьевичу Волчёнкову компанией LPA Ltd (Великобритания) для её использования в учебных целях. Файлы этого интерпретатора можно скачать из папки автора в облачном сервисе «Яндекс-диск» в Интернете. Прямой адрес

архива с указанными файлами автор высылает по заявке, направляемой ему по электронной почте: ngvolchenkov@gmail.com или ngvolchenkov@yandex.ru. Более поздние версии данной Пролог-

системы можно также самостоятельно заказать (Submit) и после подписки загрузить (Download) с сайта компании LPA Ltd (URL: http://www.lpa.co.uk/).

Следует, однако, не забывать о том, что время сеанса работы с этой системой ограничено сверху. А время между двумя сеансами

6

ограничено снизу. (В настоящее время, длительность сеанса ограничено 18 минутами, а интервал между сеансами ограничено двумя минутами.)

Но автор считает, что это мягкие ограничения, так как, по его глубокому убеждению, садиться за компьютер следует только после того, как программа на Прологе уже тщательно подготовлена «вручную». А запускать Пролог-систему следует только после тщательного редактирования программы в любом текстовом редакторе. (Кстати, использование кириллицы в исходных текстах нисколько не возбраняется, но требует сохранения этих текстов в Юникоде.) Автор уверяет читателя данного пособия, что когда программирование на Прологе делается в учебных целях и когда объем кода невелик, указанные ограничения не создают никакого дискомфорта.

В заключение автор выражает глубокую признательность коллективу и руководству кафедры «Кибернетика» НИЯУ МИФИ – коллегам, учителям и ученикам автора, которые на протяжении многих лет «терпели» и даже поощряли его «академические забавы» на Прологе, фанатичную преданность этому «бесполезному» делу и упрямые попытки (к сожалению, не всегда достигающие цели) передать свой интерес к Прологу студентам.

7

Лекция 1

Парадигма логического программирования

Вданной лекции освещаются основные понятия, относящиеся к логическому программированию. Затрагиваются теоретические вопросы из курса «Дискретная математика» (раздел «Математическая логика»), связанные с реализацией Пролога – языка высокого уровня, который в наибольшей степени претендует на роль языка логического программирования. В частности, рассматриваются такие разделы математической логики как синтаксис и семантика языка исчисления предикатов первого порядка, автоматическое доказательство теорем, метод резолюций. Приводятся реализованные в Прологе ограничения: на язык исчисления предикатов (утверждения Хорна) и на стратегии логического вывода (линейная резолюция). Сравнивается терминология, которая используется в «чистом» исчислении предикатов первого порядка, и терминология, которая применяется в Прологе.

Прежде всего, дадим определение понятия «логическое программирование».

Логическое программирование (ЛП) – это парадигма обра-

ботки данных, основанная на идее автоматического доказательства теорем (АДТ) в рамках логики предикатов первого порядка. Язык высокого уровня, используемый в ЛП для АДТ – это язык так называемых утверждений Хорна, которые представляют собой

подмножество (частный случай) всех выражений языка исчисления предикатов первого порядка (ЯИП-1П). Из всех методов АДТ в ЛП

применяется так называемый метод резолюций со специфической стратегией – стратегией линейной резолюции.

Взначительной степени языком, обладающим указанными

свойствами, является Пролог, созданный А. Колмероером (Франция) в конце 1960-х гг. и впервые реализованный на компьютерах в начале 1970-х гг. Изучению теоретических основ этого языка посвящены данная лекция и три следующих лекции.

Впредыдущих двух абзацах курсивом выделены термины, каждый из которых требует разъяснения. Это:

1)парадигма;

2)язык исчисления предикатов первого порядка;

8

3)утверждения Хорна;

4)автоматическое доказательство теорем;

5)метод резолюций;

6)стратегия линейной резолюции;

7)язык Пролог.

1.Парадигма

Этот термин означает основополагающую идею, устанавливающую границы для рассматриваемого класса задач.

Пример 1.1. Математика, известного трудами в области теории вероятностей, как-то спросили: «Какова, хотя бы приблизительно, вероятность того, что после ближайшей ночи наступит утро, – взойдёт солнце?» Математик заявил, что на этот вопрос он не может дать никакого ответа, так как тема вопроса выходит за пределы парадигмы его науки, – теории вероятностей.

В данной лекции и в последующих двух лекциях автор не будет выходить за пределы парадигмы логического программирования.

2. Язык исчисления предикатов первого порядка

Для экономии будем обозначать язык исчисления предикатов первого порядка аббревиатурой ЯИП-1П.

Не претендуя на полноту изложения, автор даст краткий обзор связанных с термином ЯИП-1П понятий, которые должны быть хорошо знакомы слушателям и читателям, изучавшим соответствующий раздел курса математической логики. Читателям, не изучавшим математической логики, этот обзор поможет лучше понять последующий за ним материал.

Вматематической логике ЯИП-1П рассматривается как теория:

сточки зрения синтаксиса – как аксиоматическая теория, с точки зрения семантики – как теория моделей. В этой теории (как с первой, так и со второй точки зрения) определяются:

алфавит языка – конечное множество символов данной теории; выражение – произвольная конечная последовательность

(цепочка) символов алфавита; формула – выделенное подмножество выражений, для которых

можно построить процедуру, которая за конечное число шагов определяет, является выражение формулой или нет.

9

Пример 1.2. Рассмотрим язык школьной алгебры.

Алфавит – буквы, цифры, знаки операций, скобки:

a, b, …, 1, 2, …, +, –, …, (, ), [, ].

Выражения – произвольные цепочки символов этого алфавита, например:

1 + (abb), (2 + b)(a)(3 – a), 2a + ) ).

Формулы – выражения «со смыслом», например:

225, 1 + a + 225 * (b – a),

(2 + b) – ((3 – a) – (a – b)).

Алфавит ЯИП-1П составляют:

знаки пунктуации: запятая, точка с запятой, круглые,

 

квадратные, фигурные скобки (, ), [, ], {, };

 

знаки логических связок: , , , ;

знаки кванторов: , ;

символы переменных: заглавные латинские буквы A, B, …, X, Y, Z, … (или символы, перед которыми стоит знак подчёркивания);

функциональные символы, например: f, g, h, …, φ, ψ, …, +, –, *, /, …;

константные символы, например: a, b, c,

…,

Э,

Ю, Я, apple, banana, Вася, Маша,…,

1,

2,

… (русские буквы могут быть и заглавными);

предикатные символы, например: p, q, …, true, false, …, mother, father, мать, отец, number, =, equal, >, больше,

Из указанных символов строятся выражения и формулы трёх типов: термы, атомарные формулы, правильно построенные фор-

мулы (ППФ). Дадим их определения:

Терм

Каждый константный символ и каждый символ переменной есть терм.

Если t – терм, то (t) – терм.

Если t – терм, а f – функциональный символ, то f t – терм, t f – терм.

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]