Практическая работа № 3
Как вы помните из текста учебника, множества могут быть заданы перечислением элементов, для такого способа фиксации множества достаточно фактов. Иными словами, задав систему фактов, мы тем самым определяем множество. Однако, в большинстве случаев возможно указать некоторые связи и отношения между объектами. Связи и отношения между объектами задаются правилами. Использование правил позволяет сократить число фактов, сделав базу данных более лаконичной. Более того, наличие правил превращает базу данных в базу знаний, поскольку теперь появляется возможность получать сведения, которые изначально в этой базе записаны не были. При построении правил обычно выделяется совокупность отношений, отвечающих на вопрос "Что известно?". Правило можно построить, пользуясь известным принципом разделения исходной задачи на более простые, которые, в свою очередь, тоже могут быть разделены. Этот процесс известен под названием процесса декомпозиции задачи. Процесс декомпозиции заканчивается в тот момент, когда отношения связывают зафиксированные в базе знаний объекты. Например, в задаче o построении родственных отношений можно определить следующие правила:
бабушка(x,y):-мама(x,z),мама(z,y);
бабушка(x,y):-мама(x,z),папа(z,y);
дедушка(x,y):-папа(x,z),папа(z,y);
дедушка(x,y):-папа(x,z),мама(z,y);
Процесс декомпозиции не обязательно однозначен. Даже простой пример о родственниках допускает и иную трактовку. Введем, к примеру, правило, определяющее понятие "родитель":
родитель(x,y):-мама(x,y);
родитель(x,y):-папа(x,y);
Тогда бабушку и дедушку можно определить проще:
бабушка(x,y):-мама(x,z),родитель(z,y);
дедушка(x,y):-папа(x,z),родитель(z,y);
Если к только, что записанным правилам добавить несколько фактов, определяющих мам и пап, то получается база знаний, которая называется "семья":
мама("Саша","Петя");
папа("Сережа","Петя");
мама("Оля","Саша");
папа("Коля","Саша");
мама("Люда","Сережа");
папа("Петя","Сережа");
родитель(x,y):-мама(x,y);
родитель(x,y):-папа(x,y);,
бабушка(x,y):-мама(x,z),родитель(z,y);
дедушка(x,y):-папа(x,z),родитель(z,y);.
В данном примере для определения понятия родитель(x,y) потребовалось более одного правила. По сути дела здесь использовано так называемое недетерминированное ветвление, дающее альтернативное определение этого отношения и используемое системой после того, как было применено первое по порядку отношение. Следует подчеркнуть, что в определении участвуют оба правила.
В общем случае число правил может быть неограниченным. Вообще говоря, могут быть разные способы записи отношений. Предложенный здесь вариант соответствует заданию отношений в системе логического программирования Пролог-Д. Именно этой системой вы будете пользоваться, выполняя следующие задания.
Выполните каждое задание в отдельном файле и отправь на проверку (всего получится 3 файла).
1. Опишите на языке Пролог-Д состав своей семьи или иными словами множество людей принадлежащих вашей семье (можно создать только мужскую или женскую линию). Создай не менее 2-х вопросов к базе знаний.
2. Составьте базу знаний, описывающую множество стран Европы, Количество стран не менее 10. Составьте не менее 2-х вопросов к базе знаний.
3. Попробуйте записать с помощью языка Пролог-Д следующие правила (в отдельном файле!):
- Если животное имеет волосы, то это животное млекопитающее;
- Если животное имеет перья, то это животное птица;
- Если животное может летать и откладывает яйца, то это животное птица;
- Если животное ест мясо, то это животное хищник;
- Если животное имеет острые зубы и животное имеет когти и его глаза смотрят вперед, то это животное хищник;
- Если животное млекопитающее и имеет копыта, то это животное парнокопытное;
- Если животное млекопитающее и жует жвачку, то это животное парнокопытное;
- Если животное млекопитающее и это животное хищник и это животное желто-коричневого цвета и это животное имеет темные пятна, то это животное гепард;
- Если животное млекопитающее и это животное хищник и это животное желто-коричневого цвета и это животное имеет темные полосы, то это животное тигр;
- Если животное является парнокопытным и имеет длинную шею и имеет длинные ноги и имеет черные пятна, то это животное жираф;
- Если животное является парнокопытным и имеет черные полосы, то это животное зебра.
Всего вместе с примером из текста будет дюжина правил. Они нам пригодится позже. Сохраните их на диске, предварительно проверив синтаксическую правильность выражений.