Пролог - программы как простейшие базы данных и знаний

Автор: Пользователь скрыл имя, 29 Марта 2011 в 05:49, лабораторная работа

Описание работы

Цель работы: - знакомство с организацией баз данных как совокупности фактов;

- получение навыков организации явных и неявных баз данных;

- изучение способов построения универсальных запросов к базам;

- знакомство с представлением знаний в виде правил и процедур.

Работа содержит 1 файл

Самостоятельная работа 2.doc

— 84.00 Кб (Скачать)

Самостоятельная работа 2

«Пролог - программы  как простейшие базы данных и знаний» 

Цель работы:  -     знакомство с организацией баз данных как совокупности фактов;

-  получение  навыков организации явных и  неявных баз данных;

-  изучение  способов построения универсальных запросов к базам;

-  знакомство  с представлением знаний в  виде правил и процедур. 

 

1. Краткие теоретические  сведения 

Система  понятий  для представления знаний несколько  отличается от понятий  для 

представления  данных.  Вместе  с  тем  база  знаний (БЗ) способна  хранить  данные  и  как

простую  разновидность  знаний  в  виде  базы  данных (БД). Запросы,  которые  формирует 

пользователь  к базе, реализуются одним из двух возможных способов:

-  сообщения,  являющиеся  ответом  на  запрос,  хранятся  в  явном  виде  в  БД,  и

процесс  получения  ответа  представляет  собой  выделение  подмножества

значений из БД, удовлетворяющих запросу;

-  ответ не  существует в явном виде в  БД и формируется в процессе  логического 

вывода на основании имеющихся данных.

Последний случай  принципиально  отличается  от  технологий  использования БД  и 

рассматривается  в  рамках  представления  знаний,  то  есть  информации,  необходимой  в 

процессе вывода новых фактов. В Пролог - программах вывод новых фактов возможен на

основании  набора  правил,  включаемых  в  программу  и  представляющих  собой 

упрощенный вариант  БЗ. Представление  знаний  в  виде  набора правил имеет  следующие 

преимущества:

-  простота  создания и понимания отдельных  правил;

-  простота  механизма логического вывода.

К  недостаткам  этого  способа  организации  БЗ  относится  его  отличие  от

человеческой  структуры знаний. 

 

2. Порядок выполнения  работы 

2.1. Запросы к  базе данных 

Простейшая  Пролог-программа  представляет  собой  множество  фактов,  которое

неформально называют базой данных.

Пусть  для  хранения  информации  о  служащих  и  местах  их  работы  необходимо

создать БД со структурой отношения РАБОТАЕТ (ИМЯ, ОТДЕЛ). При  этом атрибут ИМЯ 

описывает домен  данных типа строки символов, а атрибут ОТДЕЛ - домен целочисленных

данных. 

 

/* Программа 1 */ 

domains 

name = string 

office = integer 

predicates 

work( name , office ) 

clauses 

work( "Petrov" , 101 )

work( "Pavlov" , 211 )

work( "Sidorov" , 101) 

 

Для решения  поставленной задачи в Пролог - программе:

-  исходное  отношение описывается предикатом  аналогичной структуры; 

-  в секции domains задаются области изменения  каждого аргумента предиката; -  каждый  кортеж  данного  отношения   представляется  в  секции clauses в  виде

факта.

После  того,  как  программа 1 введена  в  систему  Турбо-Пролога  с  помощью 

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

Вып главного меню системы, активизируется окно диалога (появляется сообщение Goal:)

и  система  готова  к  приему  запросов.  Синонимом  слова  запрос  является  слово  цель.  В 

переводе с  английского goal обозначает цель.

2.1.1. Простые  запросы 

Простой  запрос  состоит  из  имени  предиката,  за  которым  располагается  список

аргументов.

Если  в  запрос  входят  только  константы ( т.е.  атомы  и  числа),  то  такой  запрос

называется запросом с константами и на него система  выдает только один из двух ответов 

- True или False. Ответ  True свидетельствует  о  том,  что  система  доказала  истинность

запроса в соответствии с множеством фактов, загруженных  в нее в данный момент. Ответ 

False - это невозможность  системы доказать истинность  запроса. 

 

 

 

Приведенные в  окне диалога запросы соответствуют вопросам:

- "Работает  ли Петров в 211 отделе?". Ответ  на него можно трактовать так: "Нет, не 

работает Павлов в 211 отделе";

- "Работает  ли Павлов в 211 отделе?". Ответ   на  который: "Да,  работает  Павлов  в 

211 отделе".

Однако применение запросов с константами весьма ограничено, поэтому наиболее

часто применяются  запросы, которые используют переменные - запросы с переменными.

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

содержащем  переменную,  неявно  спрашивается  о  том,  существует  ли  хотя  бы  одно

значение переменной, при котором запрос будет истинным. 

Т.о., переменные в запросах квантифицированы экзистенциально. Если это иметь в 

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

один  человек,  который  работает  в 101-м  отделе?". Запрос  будет  истинным,  если  такое 

лицо будет  найдено в текущей базе.

 

 

 

Система  пытается  унифицировать ( т.е.  согласовать)  аргументы  запроса  с 

аргументами фактов, входящих в базу данных "work". Запрос окажется успешным при его

сопоставлении  с  первым  же  фактом,  поскольку  атом "101" в  запросе  унифицируется  с 

атомом "101" первого  факта,  а  переменная "Who" унифицируется  с  атомом "Петров",

входящим в  этот факт. В результате данного процесса переменная "Who" примет значение

атома "Петров", сообщение о чем и выводится  в окне диалога. Далее происходит сопоставление запроса с другими  фактами БД и о всех успешных

унификациях  и  их  количестве  выдается  сообщение  в  окне  диалога.  Говорят,  что

переменная  конкретизируется,  когда  при  выполнении  запроса  она  унифицируется  с 

некоторым значением.

2.1.2. Составные  запросы 

Составные  запросы  образуются  из простых,  соединенных  между  собой запятыми.

Каждый простой запрос называется подцелью. Для того, чтобы составной запрос оказался

истинным,  необходимо,  чтобы  каждая  из  его  подцелей  была  бы  истинной.  Введем

составной  запрос,  который  будет  соответствовать  вопросу: "Есть  ли  такой  отдел,  где

вместе работают Петров и Сидоров?"

 

Goal: work("Petrov ",X),work("Sidorov",X)

Х=101

1

Goal: 

 

Переменная Х  входит в обе  подцели, т.е. для  истинности всего запроса требуется,

чтобы вторые аргументы  в каждой из подцелей принимали одни и те же значения.

Использование  констант  в  аргументах  запроса  эквивалентно  заданию  входных 

параметров программы. Использование переменных - эквивалентно требованию получить

от программы  выходные данные.

2.1.3. Запросы  с анонимными переменными 

Символ подчеркивания (_) выступает  в  качестве  анонимной переменной, которая

предписывает  системе  проигнорировать  значение  аргумента.  Эта  переменная

унифицируется  с  чем  угодно,  но  не  обеспечивает  выдачу  на  экран  данных.  Каждая

анонимная  переменная,  входящая  в  запрос,  отличается  от  других  переменных  этого

запроса.

Рассмотрим, что  будет, если ввести запрос work(Worker,_). При  выполнении этого 

запроса будут  выданы все возможные значения первого  аргумента предиката work(...), вне 

зависимости  от  того,  какие  значения  будет  принимать второй  аргумент.  Таким  образом

данный запрос соответствует вопросу: 

"Существует  ли  хотя  бы  один  служащий,  который  работает  в  каком-либо  из 

отделов?" 

Сформированный  к  программе  запрос  аналогичен  желанию  получить  данные  о

всех служащих, работающих во всех отделах фирмы. 

 

Goal: work(Worker,_)

Worker="Petrov"

Worker="Pavlov"

Worker="Sidorov"

3

Goal: 

 

2.2. Статические  и динамические базы данных 

Множество фактов Пролог - программы можно рассматривать как базы данных, к

которой могут  формулироваться любые произвольные запросы. Однако, данные такой БД

жестко  связаны  с  самой  Пролог - программой.  Любое  манипулирование  с  БД  требует 

изменения или  добавления того или иного факта в текст программы. В связи с этим такие

базы данных называют статическими БД.

Так,  для  ввода  информации  о  поступлении  на  службу  в 101 отдел  Иванова,

потребуется войти  в режим редактирования программы  и добавить новый факт. 

/* Программа 2 */ 

. . . . 

clauses 

. . . .

work( "Ivanov" , 101 ).

 

 

Goal: work(Worker,_) 

Worker="Petrov"

Worker="Pavlov"

Worker="Sidorov"

Worker="Ivanov"

Goal: 

 

Если  затем  в режиме  выполнения  зададим  запрос  о сотрудниках  всех отделов, то

получим  информацию уже о  четырех служащих. В  ответе на запрос  данные  об Иванове 

будут выводиться в той, по номеру, строке, каким по счету в программе является факт о 

работе Иванова  в 101 отделе.

Войдите  в  режим  редактирования  и  переставьте  факты  местами.  Затем,  войдя  в

режим  выполнения,  сформулируйте  запрос  к  базе.  Система  находит  ответы  в  БД  в  том 

порядке, как  они введены в программе. 

Динамические  базы данных - это БД, в которых  факты могут модифицироваться во

время выполнения программы или выбираться из файла. Для работы с такими БД в тексте

программы  в  секции database должны  быть  декларированы  предикаты  для  описания

структуры динамической БД. 

2.3. Явные и  неявные базы данных. Правила  логического вывода 

Рассмотренная база данных о местах работы служащих является явной БД, так как 

Информация о работе Пролог - программы как простейшие базы данных и знаний