- •Лабораторная работа № 5 Программирование интеллектуальных систем на языке Пролог Пролог-программы как простейшие базы данных и знаний
- •Введение
- •Запросы к базе данных
- •2.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. Знакомство с организацией баз данных как совокупности фактов.
2. Получение навыков организации явных и неявных баз данных.
3. Изучение способов построения универсальных запросов к базам.
4. Знакомство с представлением знаний в виде правил и процедур.
Содержание лабораторной работы:
Изучение предоставленного теоретического минимума.
Выполнение в среде Turbo-Prolog заданий в соответствии с указаниями в лабораторной работе.
Демонстрация работы примеров в среде Turbo-Prolog преподавателю и защита выполненной работы
Защита лабораторной работы
Для защиты лабораторной работы необходимо:
Предоставить работающие в среде Turbo-Prolog примеры и тексты программ, результаты выполнения задач 1 и 2..
Ответить на вопросы преподавателя в рамках предоставленного в лабораторной работе теоретического минимума.