Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие Функциональное и логическое программирование.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
309.57 Кб
Скачать
    1. Типы отношений.

Фразы программы применяются для представления отношений между термами. Термы применяются для представления сущностей, входящих в мир. Поэтому для повышения эффективности программы вначале целесообразно проанализировать отношения, встречающиеся в моделируемом мире, а затем принять решение о том, как представить каждый тип отношений при помощи фраз Пролога. Программист может дать директиву интерпретатору о необходимости принять во внимание свойства отношений, чтобы оптимизировать обработку запросов. Будем для простоты рассматривать бинарные отношения.

Ограничения, обеспечивающие целостность отношений.

Для аргументов X, Y бинарного отношения будет справедливо одно из следующих ограничений.

один- к- одному : для заданного значения X существует единственное значение Y, удовлетворяющее этому отношению, а для заданного значения Y существует единственное значение X, удовлетворяющее этому отношению. Например, отношение между человеком и номером его паспорта.

Ограничения, обеспечивающие целостность отношений, вступают в силу либо когда в программу вводятся новые конкретные случаи отношений (т.е. факты), либо когда в базе данных выполняется поиск конкретных случаев отношений.

один- ко- многим: для заданного значения X может существовать много значений Y, удовлетворяющих этому отношению, но для заданного значения Y существует только одно значение X, которое удовлетворяет отношению. Например, предикат «отец». У отца может быть несколько детей, но не наоборот.

многие- к- одному: для заданного значения X существует только одно значение Y, удовлетворяющее данному отношению, но для заданного значения Y может существовать много значений X, удовлетворяющих отношению. Например, предикат «уроженец». В какой-либо стране может родиться много людей, но один человек может быть уроженцем только одной страны.

многие- ко- многим: для заданного значения X может существовать много значений Y, удовлетворяющих этому отношению, и для заданного значения Y может существовать много значений X, удовлетворяющих отношению. Например, база данных типографской компании, содержащая сведения о сортах бумаги. Первый аргумент соответствует цвету бумаги, второй - ее виду. Разрешена любая комбинация цвета и вида бумаги:

бумага (красный, плотная).

бумага (белый, глянцевая).

бумага (кремовый, плотная).

бумага (белый, гладкая).

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

Свойства отношений.

Помимо этого, некоторые отношения можно характеризовать наличием или отсутствием следующих свойств.

1). Симметрия. Отношение между двумя сущностями будет симметричным, если роли, которые играют это сущности, взаимозаменяемы. Если предикат обладает свойством симметрии, то порядок следования аргументов в запросе к этому предикату не будет иметь значения. Например, отношение «брат_или_сестра»:

брат_или_сестра (маша, коля).

брат_или_сестра (миша, оля).

Если написать запрос к этой базе данных, в котором аргументы располагаются также, как и у фактов, входящих в базу, то запрос будет успешным. Но если поменять аргументы местами, то запрос потерпит неудачу. Это говорит о том, что эта база данных несимметрична.

Одним из способов придания симметрии предикату «брат_или_сестра» может служить составление двух правил, ссылающихся на явную базу данных. Пусть есть явная база данных «братсестра», тогда

братсестра (маша, коля).

братсестра (миша, оля).

брат_или_сестра (А, В):- (1)

братсестра (А, В).

брат_или_сестра (А, В):- (2)

братсестра (В, А).

Правило (1) передает аргументы подцели «братсестра» в том же порядке, как они заданы в заголовке, а правило (2) меняет порядок следования аргументов. Запрос

?- брат_или_сестра (миша, оля).

решается в соответствии с правилом (1), а запрос

?- брат_или_сестра (оля, миша).

решается в соответствии с правилом (2).

Таким образом предикат «брат_или_сестра» ведет себя как симметричное отношение.

Асимметрия. Отношение, не обладающее симметрией, называется ассиметричным. Например, отношение между отцом и сыном является асимметричным. Некоторые отношения не являются обязательно симметричными или асимметричными, например, любви одного лица к другому. По умолчанию интерпретатор считает все отношения асимметричными, как это имело место в приведенном ранее примере отношения «брат_или_сестра».

2) Рефлексивность и нерефлексивность. Отношение, которое соблюдается, когда оба аргумента одинаковы, называется рефлексивным. Например, отношения «равно» или «больше или равно». Отношение, которое нарушается, когда оба аргумента одинаковы, называется нерефлексивным. Например, отношение «выше». По умолчанию интерпретатор считает, что предикаты рефлексивны.

Пример.

сестра (А, В):-

родитель(С, А),

родитель(С, В),

женщина(А).

Здесь отсутствует условие, указывающее, что А должно отличаться от В, поэтому по умолчанию принимается, что правило рефлексивно, тем самым при помощи такого правила можно доказать, что некоторая женщина является сестрой самой себе. Это нецелесообразно, поэтому надо переписать правило так, чтобы оно стало нерефлексивным.

3) Транзитивность. Отношение между аргументами называется транзитивным, если оно сохраняется при переходе от прямого отношения к косвенному. «Равно» служит примером транзитивного отношения: если А равно В, а В равно С, то А должно быть равно С. «Выше» - еще один пример транзитивного отношения. В Прологе транзитивные отношения обычно реализуются рекурсивными процедурами, примером может служить процедура «предок».