Практическая работа № 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. Попробуйте записать с помощью языка Пролог-Д следующие правила (в отдельном файле!):

- Если животное имеет волосы, то это животное млекопитающее;

- Если животное имеет перья, то это животное птица;

- Если животное может летать и откладывает яйца, то это животное птица;

- Если животное ест мясо, то это животное хищник;

- Если животное имеет острые зубы и животное имеет когти и его глаза смотрят вперед, то это животное хищник;

- Если животное млекопитающее и имеет копыта, то это животное парнокопытное;

- Если животное млекопитающее и жует жвачку, то это животное парнокопытное;

- Если животное млекопитающее и это животное хищник и это животное желто-коричневого цвета и это животное имеет темные пятна, то это животное гепард;

- Если животное млекопитающее и это животное хищник и это животное желто-коричневого цвета и это животное имеет темные полосы, то это животное тигр;

- Если животное является парнокопытным и имеет длинную шею и имеет длинные ноги и имеет черные пятна, то это животное жираф;

- Если животное является парнокопытным и имеет черные полосы, то это животное зебра.

Всего вместе с примером из текста будет дюжина правил. Они нам пригодится позже. Сохраните их на диске, предварительно проверив синтаксическую правильность выражений.