Министерство образования Российской Федерации
Нижегородский государственный технический
университет
Кафедра “Компьютерные технологии в проектировании и производстве ”
ПРЕДСТАВЛЕНИЕ ЗНАНИЙ
В ИНФОРМАЦИОННЫХ СИСТЕМАХ
Методические указания к лабораторным работам
Часть 1
Нижний Новгород
2001
Составитель: М.Б.Волков
УДК 681
Представление знаний в информационных системах:Методические указания к лабораторным работам. Часть1/НГТУ, кафедра КТПП; Сост. М.Б.Волков. Н.Новгород, 2001.14с.
Даны рекомендации к выполнению лабораторных работ по дисциплине ”Представление знаний в информационных системах” для студентов специальностей 071900 “Информационные системы”.
Науч. редактор С. Л.Моругин
Подп. 06.09.01 Формат 210148.Печ. л. 0,4
Нижегородский государственный технический университет
Кафедра “Компьютерные технологии в проектировании и
производстве “.
Адрес предприятия:603600, Н.Новгород, ул. Минина 24.
Лабораторная работа №1
1. Цель работы
Ознакомиться с основами декларативной и процедурной части Prolog-программ.
2. Краткие сведения из теории
ПРОЛОГ -
язык логического программирования (ПРОграммирование в ЛОГике), используемый для представления и манипулирования знаниями в системах ИИ.
Логическое программирование -
программирование, основанное на использовании механизма доказательства теорем в логике, который позволяет выяснить, является ли противоречивым некоторое множество логических формул. При этом программа рассматривается как набор логических формул, описывающих предметную область, совместно с теоремой, которая должна быть доказана. Логическое программирование избавляет программиста от необходимости определения точной последовательности шагов выполнения вычислений.
Программа на языке ПРОЛОГ -
набор утверждений, составляющих базу фактовибазу правил, к которым допустимо обращение сзапросами, касающимися их содержимого. Запросы называются такжецелевыми утверждения.
Утверждение языка ПРОЛОГ -
линейная конструкция из термов, заканчивающаяся точкой.
Терм языка ПРОЛОГ -
это либо константа,либопеременная, либоструктура. Константами являются атомы и числа.
Константы используются для обозначения (именования) конкретных объектов предметной области и конкретных отношений между ними.
Атом языка ПРОЛОГ -
это
последовательность букв, цифр и знака "подчеркивание", обязательно начинающаяся со строчнойбуквы;
последовательности специальных знаков ":-", "?-", "=", ">" и других.
Переменная языка ПРОЛОГ -
последовательность букв, цифр и знака "подчеркивание", обязательно начинающаяся с прописной буквы;
знак "подчеркивание".
Область известности (лексический диапазон) переменных -одно предложение. Поэтому одно и то же имя в двух предложениях обозначает две разные переменные.
Структура языка ПРОЛОГ -
конструкция из функтора и компонент, имеющая следующий вид
<функтор>(<компонент-1>,<компонент-2>, ... ,<компонент-n>),
где в качестве функтора должен выступать атом, а компонентом может быть любойтерм(в том числе и структура).
База фактов в языке ПРОЛОГ -
последовательность утверждений, описывающих факты предметной области в виде структур, функторами которых являются атомы - имена отношений (предикатные буквы), а компонентами - предметные константы.
Каждый факт представляет собой элементарную формулу (предикат) исчисления предикатов первого порядка и является дизъюнктом Хорна, состоящим из одного (положительного) литерата.
При описании фактов переменные не используются.
База правил -
совокупность правил в программе на языке ПРОЛОГ.
Правило представляет собой дизьюнкт Хорна, содержащий один положительный литерал и несколько отрицательных, и записывается следующим образом
<структура-0>:-<структура-1>, ... ,<структура-N>.
Здесь каждая структура представляет собой предикат, областью действия переменных является все правило. Предикат, стоящий слева от атома ":-", называетсязаголовкомправила, все остальные предикаты образуют еготело.
Правило может трактоваться следующим образом: предикат, являющийся заголовком правила доказан (удовлетворен), когда доказан каждый предикат тела правила.
В качестве предиктов, состовляющих тело правила, могут выступать
предикаты, фигурирующие в базе фактов;
предикаты, совпадающие с заголовком других правил;
встроенные предикатысистем программирования ПРОЛОГ.
Примеры правил языка ПРОЛОГ:
Встроенный предикат -
предикат, выводимость (согласованность) которого устанавливается непосредственно системой программирования ПРОЛОГ.
Запрос на языке ПРОЛОГ -
утверждение, рассматриваемое в качестве целевого, имеющее следующий вид
<структура-1>, ...,<структура-N>.
Здесь каждая структура представляет собой предикат, возможно, содержащий переменные. Причем областью действия переменной является все утверждение в целом, т. е. одна и та же переменная в пределах утверждения означает один и тот же объект.
Символ "," между предиктами трактуется как логическая связка "И", т.е. запрос необходимо рассматривать как требование на поиск в базе фактов и правил информации, удовлетворяющий одновременно всем предикатам целевого утверждения. Предикаты, объединенные связкой "И" в таком запросе, называютсяподцелями(имея в виду весь запрос целью).
Конкретизация переменной -
связывание переменной языка ПРОЛОГ с конкретным значением.
Конкретизация переменной обеспечивает возврат искомых значений переменных по запросам.
Операция сопоставление
берет два терма и пытается сделать их идентичными, подбирая соответствующую конкретизацию переменных в обоих термах.
Сопоставление, если оно завершается успешно, в качестве результата выдает наиболее общую конкретизацию переменных.
Декларативная семантика
Пролога определяет, является ли целевое утверждение истинным, исходя из данной программы, и если оно истинно, то для какой конкретизации переменных.
Запятая между целями означает их конъюнкцию. Точка с запятой между целями означает их
дизъюнкцию.
Процедурная семантика
Пролога -это процедура достижения списка целей в контексте данной программы. Процедура выдает истинность или ложность списка целей и соответствующую конкретизацию переменных. Процедура осуществляет автоматический возврат для перебора различных вариантов.
Декларативный смысл программ на «чистом Прологе» не зависит от порядка предложений и от порядка целей в предложениях.
Процедурный смысл существенно зависит от порядка целей и предложений. Поэтому порядок может повлиять на эффективность программы;
неудачный порядок может даже привести к бесконечным рекурсивным вызовам.
Имея декларативно правильную программу, можно улучшить ее эффективность путем изменения
порядка предложений и целей при сохранении ее декларативной правильности. Переупорядочивание -один из методов предотвращения зацикливания.
Выполнение запроса в языке ПРОЛОГ -
процесс доказательства выводимости всех подцелей целевого утверждения методом резолюциис использованиилинейной по входустратегии.
Получив запрос, состоящий из нескольких предикатов, интерпретатор выбирает первый в последовательности запроса предикат и делает попытку (если этот предикат не встроенный) согласовать его с утверждениями, составляющими базы фактов и правил. Для этого выполняется сопоставление этого предиката со всеми фактами и заголовками этих правил в простом линейном порядке до тех пор, пока оно не даст положительного результата. Если этого не происходит, ответом на запрос будет "Нет". В ходе согласования возможнаконкретизацияпеременных значениями.
Если в ходе просмотра произошло сравнение с заголовком правила, то тело правила рекурсивно рассматривается в качестве нового целевого утверждения, доказательство которого реализуется с помощью рассматриваемой здесь процедуры.
Удовлетворив один предикат (подцель) запроса, интерпритатор переходит к соседнему справа, обрабатывая его аналогичным образом.
Запрос считается выполненым после удовлетворения его последней (крайней справа) подцели. Если же какая-либо подцель (но не первая) не может быть удовлетворена (согласована), то в работу включается механизм бэктрекинга, который заставляет интерпретатор, передвигаясь по предикатам целевого утверждения справа налево, вновь согласовывать эти предикаты, но уже на новых утверждениях программы. Если попытка пересогласовать какой-либо предикат (подцель) удается, то интерпритатор продолжает рассмотрение подцелей от данной в обычном порядке (слева направо).
Структура программы на Visual Prolog 5.1
В упрощенном виде:
DOMAINS /*определение типов данных*/
PREDICATES /*определение предикатов*/
CLAUSES /*определение фактов и правил*/
GOAL /*определение целей*/.
В
общем случае
DOMAINS
/* ...
domain declarations
... */
PREDICATES
/* ...
predicate declarations
... */
CLAUSES
/* ...
clauses (rules and facts)
... */
GOAL
/* ...
subgoal_1,
subgoal_2,
etc. */
Раздел предикатов - объявляются предикаты и домены (области) или (типы) параметров предикатов. Название (имя) Предиката должно начать с символа (предпочтительно нижний регистр), сопровождаем ого последовательностью символов, цифр, и символов подчеркивания, длиной до 250 символов. Нельзя использовать пробел, знак "минус", звездочки, или наклоннную вправо черту в названиях (именах) предиката. Объявления Предиката имеют форму
PREDICATES
predicateName(argument_type1, argument_type2, ..., argument_typeN)
Argument_type1, ..., argument_typeN являются или стандартными доменами (областями) или доменами областями), которые вы объявили в разделе доменов (областей). Объявление домена (области) параметра и при определении типа параметра -аналогично.
DOMAINS
argument_type1, ..., argument_typeN = <standard domain>
argument_1, ..., argument_N) = <compound domain 1>;
<compound domain 2>;
< ... >;
<compound domain N>;
Составные домены (области) не приведены в описании языка.
Число операндов предиката - число параметров, которые это берет; два предиката могут иметь то же самое имя, но различное число операндов. Вы должны группировать различное число операндов предиката, версии вместе и в предикатах и разделах предложений, но различных числах операндов обработаны как полностью различные предикаты.
Правила имеют форму
HEAD :- <Subgoal1>, <Subgoal2>, ..., <SubgoalN>.
Для правила, чтобы преуспеть, Пролог должен удовлетворить все подцели, создавая непротиворечивый набор переменных переплетов(связывания). Если одни подцелевые сбои, Пролог поддерживают и ищут варианты к более ранним подцелям, то доходы вперед с различными переменными значениями. Это называется перебором с возвратами.
:- ("если") в Прологе не был спутан с ЕСЛИ используется на других языках; правило Пролога находится в форме затем / если условного выражения, в то время как УСЛОВНЫЕ ОПЕРАТОРЫ IF на других языках находятся в форме если / затем условного выражения
Типы данных:
String –Последовательность символов, чисел и символов подчеркивания, если первый символ - нижний регистр; или Символьная последовательность, окруженная парой двойных кавычек.
Длина до 255 символов
Примеры строк:
Telephone_number " железнодорожный билет " " Dorid Inc "
Symbol - Последовательность символов. Синтаксис - также как для строк.
Char - Синтаксически, это символ, окруженный одиночными кавычками: например, 'a'
Integer –Целое число в диапазоне от –32768 до 32767
Real- Число с плавающей запятой.
Синтаксически REAL включает знак (+ или -), последовательность цифр DDDDDDD, десятичную точку (.) последовательность цифр DDDDDDD, и экспоненциальную часть (e (+ или -) DDD):
< + | - > DDDDD <. > DDDDDDD < e < + | - > DDD >
Примеры вещественных чисел:
42705 9999 86.72
9111. 929437521e238 79. 83e + 21
Здесь 79. 83e + 21 средства 79.83 x 10 ^ 21, точно как на других языках.
Разрешенный диапазон номера 1 ~) от 10-307 до 1 ~) 10308 (1e-307 к 1e + 308). Значения из интегральных доменов(областей) автоматически преобразованы в вещественные числа когда необходимо.
File– Имя файла
Типы переменных |
Примеры |
symbol или string |
"&&", caitlin, "animal lover", b_l_t |
integer |
-1, 3, 5, 0 |
real |
3.45, 0.01, -30.5, 123.4e+5 |
Char |
'a', 'b', 'c' '/', '&' |