Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IIS / Лекции / ЛР 2 6 - Prolog задание 5.doc
Скачиваний:
33
Добавлен:
31.03.2015
Размер:
62.98 Кб
Скачать
  1. Ограничения и свойства, обеспечивающие целостность отношения

Для простоты рассмотрим только отношения между двумя объектами (бинарные отношения). Для любого бинарного отношения справедливо одно из ограничений: один-к-одному, один-ко-многим, многие-ко-многим. Кроме этого любое отношения можно характеризовать наличием или отсутствием таких свойств, как:

  • симметрия (асимметрия)

  • рефлексивность (нерефлексивность)

  • транзитивность (транзитивность)

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

Бинарное отношение, реализуемое в языке Пролог, по умолчанию обладает свойствами рефлексивности, асимметричности и нетранзитивности.

Отношение между двумя объектами будет симметричным, если роли, которые играют эти объекты, взаимозаменяемы.

Отношение, которое соблюдается, когда оба объекта одинаковы, называется рефлексивным.

Отношение между объектами называется транзитивным, если оно сохраняется при переходе от прямого отношения к косвенному. Транзитивные отношения обычно реализуются рекурсивными процедурами типа "предок" или "маршрут".

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

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

супруги( "Иван", "Марья" ) супруги( tom ,betty ),

то отношение "супруги" можно сделать симметричным путем добавления дополнительных фактов с обратным следованием объектов:

супруги("Марья", 'Иван" ) супруги( belly , torn )

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

супруги_симетр(Супруг1,Супруг2):- супруги(Супруг1,Супруг2), !. супруги_симетр(Супруг1,Супруг2):- супруги(Супруг2,Супруг1).

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

colleague(Manl,Man2) :- work(Manl,X), work(Man2,X), Manl<>Man2.

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

Задание 5.

Доработайте программу 12 так, чтобы используемые в ней отношения были бы симметричными и нерефлексивными и исследуйте се. Попробуйте теперь определить маршрут от Волхова до С-Пб. Какой Вы получили результат? Испытайте еще ряд целей. Попробуйте исключить предикат отсечения из второго правила.

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