Вопрос 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 Все права принадлежат авторам размещенных материалов.
|