Здавалка
Главная | Обратная связь

Вопрос 51. Рекурсивно-логическое программирование. Пролог. Основные принципы работы с базами знаний.



Язык Пролог является представителем семейства языков логического программирования и обладает существенными особенностями:

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

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

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

Язык Пролог – это logic programming language (язык логического программирования) или programming in logic (программирование в терминах логики). Язык Пролог описывает не процедуру решения задачи, а логическую модель предметной области задачи – некоторые факты (свойства) относительно объектов предметной области (объектов, относительно которых поставлена задача) и отношения между этими объектами (свойствами), а также правила вывода новых свойств и отношений из уже заданных.

Пролог разработан в начале 70-х годов 20-го века во Франции в Марсельском университете группой специалистов во главе с Алэном Колмероэ. Появление языка связано с работами в области создания искусственного интеллекта. Идея использовать понятийную систему математической логики в языках программирования возникла впервые в начале 70-х годов.

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

Программирование на Прологе включает в себя следующие этапы:

1. объявление фактов об объектах и отношениях между ними;

2. определение правил взаимосвязи объектов и отношений между ними;

3. формулирование вопросов об объектах и отношениях между ними.

 

Факт, правило, цель (вопрос) на языке Пролог

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

Рассмотрим факт: «Мария знает английский».

два объекта: Мария и английский;

отношение: знает.

На языке Пролог: знает (мария, английский).

Общая форма записи факта: <имя факта>(арг1, арг2, …, аргN).

При записи факта важно соблюдать следующие требования:

· имена всех объектов и отношений должны начинаться со строчной буквы;

· сначала записывается имя отношения (имя факта), затем, через запятую записываются имена объектов, называемые аргументами, а весь список имен объектов заключается в скобки. В скобках может содержаться произвольное количество аргументов;

· каждый факт должен заканчиваться точкой.

Факт в Прологе указывает на то, что выполнено некоторое отношение между объектами. Некоторый признак единичного объекта можно выразить предикатом с одним аргументом. Например:

«Мария – студентка» студентка(мария).

Факты образуют базу данных. Например:

знает (мария, английский). знает (мария, информатика).

знает (мария, алгебра). знает (иван, английский).

знает (иван, история).

Правило – это хорновские предложения (дизъюнкты) с заголовком или одной или несколькими подцелями (предикатами). Правила имеют форму: А1 :- В1, В2, . . . , Вn

<голова правила> :- <список подцелей>. тело (хвост) правила

Однако из этого правила следует, что каждый мужчина является братом самому себе. Чтобы это исключить, в тело правила нужно добавить еще одно условие: переменные X и Y имеют разные значения. Правило принимает следующий вид:

брат(X,Y) ;- отец (Z,X), отец (Z,Y), X<>Y.

Третьим элементом в теле этого правила является отно­шение неравенства. Правило означает: X является братом для Y, если Z является отцом для X, и Z является отцом для Y, и X не равно Y. или словом, начинающимся с прописной буквы. В данном примере А и В обозначают любое мужское имя. По смыслу переменная может быть заменена на неопре­деленное местоимение: кто-то, что-то, некто, нечто и т.п.

Правила обладают большей общностью, чем факты, и обычно содержат переменные. Попробуем добавить в базу знаний «Родственники» правило, определяющее, кто есть дедушка. Понятно, что Лев является дедушкой Алексею по­тому, что Андрей — отец Алексея, а Лев — отец Андрея. Ис­пользуя понятие переменной, можно сказать иначе: «X яв­ляется дедушкой для Y, если X является отцом для Z и Z является отцом для Y».

Таким образом, тело правила состоит из двух отношений, соединенных связкой «и». На Прологе это запишется так: дедушка (X,Y) :- отец (X,Z) , отец (Z,Y). В этой записи роль связки «и» играет запятая «,».

Запишем теперь в окончательном виде базу знаний «Род­ственники». Кроме рассмотренных, добавим в нее еще пра­вила, определяющие отношения племянник, кузен (двою­родный брат), которые достаточно очевидны.

Факты: отец(«Лев», «Андрей»).отец(«Лев», «Петр»). отец(«Андрей», «Алексей»). отец(« Петр », « Михаил »). отец(« Петр », « Дмитрий »).

Правила: сын(X,Y):- отец(Y,Х). дедушка (X,Y):- отец(Х,Z), отец(Z,Y).

внук(Х,Y):- дедушка(Y,Х). брат(Х,Y):- отец(Z,Х), отец(Z,Y), Х<>Y.

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

кузен(Х,Y):- сын(X,Z), дядя(Z,Y).

Теперь можно сказать, что база знаний «Родственники» построена полностью. В рамках рассмотренной нами семьи учтены все виды родственных связей по мужской линии.

Запросы к базе знаний

В терминологии Пролога запрос к базе знаний называется целью. Может быть сформулировано два типа целей (запро­сов):

1.Подтвердить справедливость факта; в результате по­лучается ответ «да», если факт содержится в базе знаний или выводится (доказывается) с использованием предложе­ний базы знаний; в противном случае получается ответ «нет». 2.Перечислить все значения переменных, указанных в запросе, удовлетворяющих фактам и правилам базы зна­ний.

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

Отношение Х<Y требует, чтобы значения переменных X и Y располагались в алфавитном порядке.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.