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

3130

.pdf
Скачиваний:
1
Добавлен:
08.01.2021
Размер:
484.01 Кб
Скачать

3.1.1. Атомы и числа

Атомы и числа представляют собой цепочки следующих символов:

прописные буквы А, В, ..., Z

строчные буквы а, b, ..., z

цифры 0, 1, 2, ..., 9

специальные символы, такие как + - * / = : . & _ ~ Атомы можно создавать тремя способами:

(1)из цепочки букв, цифр и символа подчеркивания _, начиная такую цепочку со строчной буквы

(2)из специальных символов: <--->, ======>, ..., ., ..., : : =

(3)из цепочки символов, заключенной в одинарные кавычки.

'Том', 'Южная_Америка', 'Сара Джонс'

Числа в Прологе бывают целыми и вещественными. Синтаксис целых чисел: 1, 1313, 0, -97, - допускается их диапазон от -16383 до 16383. Синтаксис вещественных чисел: 3.14, -0.0035, 100.2.

3.1.2. Переменные

Переменные - это цепочки, состоящие из букв, цифр и символов подчеркивания:

Х, Результат, Объект2, Список_участников, СписокПокупок, _х23, _23

Если переменная встречается в предложения только один раз, то можно использовать "анонимную" переменную, которая записывается в виде одного символа подчеркивания. Рассмотрим, например, следующее правило:

имеетребенка( X) :- родитель( X, Y).

Это правило гласит: "Для всех X, Х имеет ребенка, если X является родителем некоторого Y". Свойство имеетребенка определяется таким образом, что не зависит от имени ребенка. Следовательно, уместно использовать анонимную переменную. Вышеприведенное правило можно переписать так:

имеетребенка( X) :- родитель( X, _ ).

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

некто_имеет_ребенка :- родитель( _, _ ).

Это предложение эквивалентно следующему:

некто_имеет_ребенка :- родитель( X, Y).

Однако оно имеет совершенно другой смысл, нежели

11

некто_имеет_ребенка :- родитель( X, X).

Если анонимная переменная встречается в вопросе, то ее значение не выводится при ответе системы на этот вопрос. Если нас интересуют люди, имеющие детей, но не имена этих детей, мы можем просто спросить:

?- родитель( X, _ ).

Лексический диапазон имени - одно предложение. Это значит, что если, например, имя Х15 встречается в двух предложениях, то оно обозначает две разные переменные. Однако внутри одного предложения каждое его появлений обозначает одну и ту же переменную. Для констант ситуация другая: один и тот же атом обозначает один и тот же объект в любом предложении.

3.1.3. Структуры

Структурные объекты (или просто структуры) - это объекты, которые состоят из нескольких компонент. Компоненты, в свою очередь, могут быть структурами. Например, дату можно рассматривать как структуру, состоящую из трех компонент: день, месяц, год. Хотя они и составлены из нескольких компонент, структуры в программе ведут себя как единые объекты. Для того, чтобы объединить компоненты в структуру, требуется выбрать функтор. Для нашего примера подойдет функтор дата. Тогда дату 1 мая 1983 г. можно запи-

сать: дата(1, май, 1983).

Все компоненты в данном примере являются константами (две компоненты - целые числа и одна - атом). Компоненты могут быть также переменными или структурами. Произвольный день в мае можно представить структурой: дата(День, май, 1983). Заметим, что День является переменной и ей можно приписать произвольное значение на некотором более позднем этапе вычислений. Такой метод структурирования данных прост и эффективен. Это является одной из причин широкого использования Пролога для обработки символьной информации.

Синтаксически все объекты данных в Прологе представляют собой термы. Например, май и дата( 1, май, 1983) суть термы.

Рис.3.2. Дата - пример структурного объекта: (а) его представление в виде дерева; (б) запись на Прологе.

12

Структурные объекты изображаются в виде деревьев. Корнем дерева служит функтор, ветвями, выходящими из него, - компоненты. Если некоторая компонента тоже является структурой, тогда ей соответствует поддерево в дереве, изображающем весь структурный объ-

ект.

 

Рассмотрим пример

 

представления

геометриче-

 

ских объектов (Рис.3.3).

 

Точка в двумерном про-

 

странстве

определяется

 

двумя координатами; отре-

 

зок определяется двумя точ-

 

ками, а треугольник можно

 

задать тремя точками. Вве-

 

дем функторы: точка (для

 

точек), отрезок (для отрез-

 

ков), треугольник (для

 

Рис.3.3.

Простые

геометрические объекты

треугольников).

 

Тогда объекты, приведенные на Рис.3.3, можно представить следующими термами: Р1 = точка( 1, 1)

P2 = точка(2, 3)

S = отрезок(P1, P2) = отрезок(точка(1, 1), точка(2, 3) ) Т = треугольник(точка(4, 2), точка(6, 4), точка(7, 1) )

Представление этих объектов в виде деревьев приводится на Рис.3.4. Функтор, служащий корнем дерева, называется главным функтором терма.

 

Рис.3.4. Представление объ-

ектов

с Рис.3.3. в виде деревьев

Если бы в такой же программе фигурировали точки трехмерного пространства, то можно было бы

13

для их представления использовать другой функтор, скажем точка3: точка3(X, Y, Z). Можно воспользоваться одним и тем же именем точка одновременно для точек двумерного и трехмерного пространств, например: точка(XI, Y1) и точка (X, Y, Z). Если одно и то же имя появляется в программе в двух различных смыслах, как в вышеупомянутом примере с точкой, то пролог-система будет различать их по числу аргументов и интерпретировать это имя как два функтора: один - двухаргументный; второй - трех. Т.е. каждый функтор определяется двумя параметрами:

(1)именем, синтаксис которого совпадает с синтаксисом атомов;

(2)n-арностью - т. е. числом аргументов.

Все структурные объекты в Прологе - это деревья, представленные в программе термами. Рассмотрим пример: на Рис.3.5 показана древовидная структура, соответствующая порядку вычисления

арифметического выражения (а+в)*(с-5) Рис.3.5. Древовидная структура, соответ-

польской записью *(+(а,в),-(с,5)).

ствующая арифметическому выражению

(а+w)*(s-5)

 

3.2. Сопоставление

 

Наиболее важной операцией над термами является сопоставление. Сопоставление само по себе может производить содержательные вы-

числения. Пусть даны два терма. Они сопоставимы, если: (1) они идентичны или (2) переменным в обоих термах можно приписать в качестве значений объекты (т.е. конкретизировать их) таким образом, чтобы после подстановки этих объектов в термы вместо переменных, последние стали идентичными.

Например, термы дата(Д, М, 1983) и дата(Д1, май, Y1) сопоставимы, так как Д заменяется на Д1, М заменяется на май, Y1 заменяется на 1983. Более компактно такая подстановка записывается в форме, в которой пролог-система выводит результаты: Д=Д1, М=май, Y1=1983. С другой стороны, дата(Д, М, 1983) и дата(Д1, Ml, 1944) не сопоставимы, как и термы дата(X, Y, Z) и точка(X, Y, Z).

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

Рассмотрим еще раз сопоставление двух дат. Запрос на проведение такой операции можно передать системе, используя оператор '=':

14

?- дата(Д, М, 1983)= дата(Д1, май, Y1).

Мы уже упоминали конкретизацию Д=Д1, М=май, Y1=1983, на которой достигается сопоставление. Существуют, однако, и другие конкретизации, делающие оба терма идентичными. Вот две из них:

Д=1, Д1=1, М=май, Y1=1983

Д=третий, Д1=третий, М=май, Y1=1983

Эти конкретизации являются менее общими по сравнению с первой, поскольку они ограничивают значения переменных Д и Д1. Для того, чтобы сделать оба терма нашего примера идентичными, важно лишь, чтобы Д и Д1 имели одно и то же значение. Сопоставление в Прологе всегда дает наиболее общую конкретизацию. Таковой является конкретизация, которая ограничивает переменные в наименьшей степени. В качестве примера рассмотрим следующий вопрос:

?- дата(Д, М, 1983)= дата(Д1, май, Y1). дата(Д, М, 1983)=дата(15, М, Y).

Для достижения первой цели система припишет переменным такие значения: Д=Д1, М=май, Y1=1983. После достижения второй цели, значения переменных станут более конкретными: Д=15, Д1=15, М=май, Y1=1983, Y=1983.

Общие правила выяснения, сопоставимы ли два терма S и Т, таковы:

(1)Если S и Т - константы, то S и Т сопоставимы, только если они являются одним и тем же объектом.

(2)Если S - переменная, а Т - произвольный объект, то они сопоставимы, и S приписывается значение Т. Наоборот, если Т - переменная, а S - произвольный объект, то Т приписывается значение S.

(3)Если S и Т - структуры, то они сопоставимы, только если (а) S и Т имеют одинаковый глав-

ный функтор и (б) все их соответствующие компо-

ненты сопоставимы.

Результирующая конкретизация определяется сопоставлением компонент.

Последнее из этих правил можно наглядно представить себе, рассмотрев древовидное изображение термов, такое, например, как на Рис.3.6. Процесс сопоставления начинается от корня (главных функторов). Поскольку оба

15

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

треугольник= треугольник,

точка(1, 1)=X, А=точка(4, Y),

точка(2, 3)=точка(2, Z).

Рис.3.6. Сопоставление

треугольник((точка(1, 1), А, точка(2, 3))=треугольник(Х, точка(4, Y), точка(2,

Z))

Весь процесс сопоставления успешен, поскольку все сопоставления в этой последовательности успешны. Результирующая конкретизация такова:

Х=точка( 1, 1), А=точка( 4, Y), Z=3

В приведенном ниже примере показано, как сопоставление само по себе можно использовать для содержательных вычислений. Вернемся к простым геометрическим объектам с Рис.3.4 и напишем фрагмент программы для распознавания горизонтальных и вертикальных отрезков. "Вертикальность" - это свойство отрезка, поэтому его можно формализовать в Прологе в виде унарного отношения. Рис.3.7. помогает сформулировать это отношение.

Рис.3.7. Пример вертикальных и горизонтальных отрезков прямых.

Отрезок является вертикальным, если x-координаты его точек-концов совпадают; никаких других ограничений на отрезок не накладывается. Свойство "горизонтальности" формулируется аналогично, нужно только в этой формулировке х и y поменять местами. Следующая программа, содержащая два факта, реализует эти формулировки:

верт(отр(точка(Х, Y), точка(Х, Y1))).

16

гор(отр(точка(Х, Y), точка(Х1, Y))).

С этой программой возможен такой диалог:

?- верт(отр(точка(1, 1), точка(1, 2))). да

?- верт(отр(точка(1, 1), точка(2, Y))). нет

?- гор(отр(точка(1, 1), точка(2, Y))).

Y=1

На первый вопрос система ответила "да", потому. что цель, поставленная в вопросе, сопоставима с одним из фактов программы. Для второго вопроса сопоставимых фактов не нашлось. Во время ответа на третий вопрос при сопоставлении с фактом о горизонтальных отрезках Y получил значение 1.

Сформулируем более общий вопрос к программе: "Существуют ли ка-

кие-либо вертикальные отрезки, начало которых лежит в точке (2,3)?" ?- верт(отр(точка(2, 3), Р)).

Р=точка(2, Y).

Такой ответ означает: "Да, это любой отрезок, с концом в точке (2,Y), т. е. в произвольной точке вертикальной прямой х = 2". Ответ пролог-системы будет выглядеть не так красиво, как описано, а приблизительно следующим образом: Р=точка(2, _136). В данном случае _136 - это неинициализированная переменная. Имя _136 - законное имя прологовской переменной, которое система построила сама во время вычислений.

Другим содержательным вопросом к программe является следующий: "Суще-

ствует ли отрезок, который одновременно и горизонтален в вертикален?"

?- верт(S), гор(S). S=отр(точка(Х, Y), точка(Х, Y) ).

Такой ответ пролог-системы следует, понимать: "да, любой отрезок, выродившийся в точку, обладает как свойством вертикальности, так и свойством горизонталь-

ности одновременно". Этот ответ получен из сопоставления. В ответе вместо Х и Y могут появиться некоторые имена, сгенерированные системой.

3.3. Декларативный смысл пролог-программ

Рассмотрим предложение Р :- Q, R.

где Р, Q и R имеют синтаксис термов. Приведем некоторые способы декларативной интерпретации этого предложения:

Р - истинно, если Q и R истинны,

из Q и R следует Р.

17

Варианты их "процедурного" прочтения:

Чтобы решить задачу Р, сначала решим подзадачу Q, а затем - подзадачу R. Чтобы достичь Р, сначала достигни Q, а затем R.

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

Формализуем теперь декларативный смысл.

Декларативный смысл программы определяет, является ли данная цель истинной (достижимой) и, если да, при каких значениях переменных она достигается. Конкретизацией предложения С называется результат подстановки в него на место каждой переменной некоторого терма. Вариантом предложения С называется такая конкретизация С, при которой каждая переменная заменена на другую переменную. Например:

имеетребенка(X) :- родитель(X, Y).

Два варианта этого предложения:

имеетребенка(А) :- родитель(А, В). имеетребенка(X1) :- родитель(X1, Х2).

Примеры конкретизации:

имеетребенка(питер) :- родитель(питер, Z). имеетребенка(барри) :- родитель(барри, маленькая(каролина)).

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

(1)в программе существует предложение С, такое, что

(2)существует такая его (С) конкретизация I, что

(a) голова I совпадает с G и (б) все цели в теле I истинны.

Это определение можно распространить на вопросы следующим образом. В общем случае вопрос к пролог-системе представляет собой список целей, разделенных запятыми. Список целей называется истинным (достижимым), если все цели в этом списке истинны (достижимы) при одинаковых конкретизациях переменных. Значения переменных получаются из наиболее общей конкретизации.

Таким образом, запятая между целями обозначает конъюнкцию целей: они все должны быть истинными. Однако в Прологе возможна и дизъюнкция целей: должна быть истинной, по крайней мере одна из целей. Дизъюнкция

18

обозначается точкой с запятой. Например, Р :- Q; R. читается так: Р -истинно, если истинно Q или истинно R. Смысл такого предложения тот же, что и смысл следующей пары предложений: Р :- Q., Р :- R. Запятая связывает (цели) сильнее, чем точка с запятой. Предложение Р :- Q, R;S, Т, U. понимается как: Р :- (Q, R); (S, Т, U). и имеет тот же смысл, что и два предложения Р :- Q, R., Р :- S, T, U.

ЛАБОРАТОРНАЯ РАБОТА №3. «Разработка экспертной оболочки» Цель работы:

1.Изучение компонент модели экспертной системы.

2.Создание экспертной оболочки с продукционным логическим выводом на любом языке программирования, содержащей модули, соответствующие всем компонентам модели экспертной системы.

Теоретическое введение.

Принципиальная архитектура (модель) экспертной системы может быть

представлена в виде совокупности следующих компонентов и связей между ними (на Рис.4.1.):

Эксперт

 

Пользова-

 

 

тель

зна-

 

консульта-

ния

 

 

ция

 

 

Подсистема

 

Подсистема

приобрете-

 

организации

ния знаний

 

консульта-

 

 

 

 

Рабочая па-

 

Подсистема

База

мять

 

объяснений

Подсистема

логического

вывода

Рис.4.1. – Принципиальная архитектура экспертной системы

19

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

Данная подсистема реализуется обычно посредством СУБД или электронных таблиц.

б) База знаний в ЭС предназначена для хранения долгосрочных данных (фактов), описывающих рассматриваемую область, и правил, описывающих целесообразные преобразования данных этой области. Часто, база знаний представляет собой базу данных определенной структуры, позволяющей хранить все необходимые атрибуты фактов и правил.

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

По типам (или по способу логического вывода) экспертные системы можно классифицировать следующим образом:

1) продукционные Основаны на представлении предметной области в виде фактов и пра-

вил. Правила состоят из условий срабатывания, связки посылка-заключение

исопутствующего действия. Логический вывод может быть:

Прямым («от фактов к цели»). Каждое правило рассматривается от посылки к заключению. Заключение не принимается во внимание до тех пор, пока не определится, что посылка истинна. Если же посылка истинна, правило запускается, и выполняются действия заключения. Если посылка правила окажется ложной, тогда действия, указанные в заключении, не выполняются, а рассматривается другое правило.

Обратным («от цели к фактам»). В основе – установление значения переменной, являющейся общей целью консультации, она является текущей целью. Начиная консультацию, механизм вывода определяет, заключения каких правил могут установить переменную цели и, затем, выбирая одно из них, рассматривает его посылку. Если посылка истинна, правило запускается и устанавливает значение переменной цели. Точно таким же образом обрабатываются и остальные правила, оказывающие влияние на значение переменной цели. Если посылка ложна, правило не запускается и для рассмотрения выбирается следующее правило. В случае, когда посылка рассматриваемого правила

20

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