Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IIS / Лекции / ЛР 2 3 - Prolog задание 2.doc
Скачиваний:
42
Добавлен:
31.03.2015
Размер:
92.16 Кб
Скачать
  1. Целостность и непротиворечивость баз данных и знаний

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

При выполнении п.5 задачи 2 мы определили, что у Козлова только один коллега - Сидоров, связанный с ним совместным трудом. Вместе с тем у Сидорова кроме Козлова есть еще два коллеги, которые связаны с ним совместным трудом.

Но из этих двух посылок и наших представлений о понятии коллеги любому человек ясно, что Козлов работает в том же отделе, что и Сидоров. А если это так, то и имеет он более одного коллеги, в отличие от ответа системы. Т.е. у нашей системы не хватает интеллекта на такой вывод.

А на запрос work("Козлов",office) система вообще даст отрицательный ответ. Налицо противоречивость данных. Частично исправить ситуацию можно, если доопределить предикат work в виде

work(Man1,N) :- unite(Man1,Man2,labour), work(Man2,N).

Тогда на запрос о номере отдела у Козлова и его коллегах система будет давать более точные ответы. Но ведь в базе work() отсутствуют данные о Козлове в виде фактов, т.е. в явном виде. Стало быть после нашего доопределения эта база стала не совсем явной, так как часть данных хранится в явном виде, а часть выводима из других на основе правил. В первом приближении - это уже прообраз базы знаний. Текст программы 5 со всеми добавлениями, введенными по ходу работы, имеет вид:

/* программа 6 */

domains

name,firm = symbol office = integer object = labour;hobby(name);project(name,firm)

predicates

work( name , office ) colleague( name , name ) unite( name , name ,object ) all_colleague( name , name , object )

clauses

colleague(Man1,Man2) :- work(Man1,X), work( Man2,Y), Man1<>Man2. all_colleague(X,Y,Z):- colleague(X,Y), Z=labour. all_colleague(X,Y,Z) :- unit(X,Y,Z). all_colleague(X,Y,Z) :- unit(Y,X,Z). unite(tom,bill,labour). unite("Сидоров","Петров",hobby(sport)). unite("Петров",tom, project("New system",ibm) unite("Козлов","Сидоров",labour) work( "Петров" , 101 ). work( "Павлов" , 211 ). work( "Сидоров" , 101 ). work( "Иванов" , 101 ). work(Man1,N) :- unite(Man1,Man2,labour), work( Man2,N).

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

Целью лабораторной работы является:

1. Знакомство с организацией баз данных как совокупности фактов.

2. Получение навыков организации явных и неявных баз данных.

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

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

Содержание лабораторной работы:

  1. Изучение предоставленного теоретического минимума.

  2. Выполнение в среде Turbo-Prolog заданий в соответствии с указаниями в лабораторной работе.

  3. Демонстрация работы примеров в среде Turbo-Prolog преподавателю и защита выполненной работы

Защита лабораторной работы

Для защиты лабораторной работы необходимо:

  1. Предоставить работающие в среде Turbo-Prolog примеры и тексты программ, результаты выполнения задач 1 и 2..

  2. Ответить на вопросы преподавателя в рамках предоставленного в лабораторной работе теоретического минимума.