функтора сопоставимы, процесс продолжается и сопоставляет соответствующие пары аргументов. Таким образом, можно представить себе, что весь процесс сопоставления состоит из следующей последовательности операций сопоставления:
треугольник= треугольник,
точка(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