Скачиваний:
53
Добавлен:
01.05.2014
Размер:
565.76 Кб
Скачать

5.5. Отрицание в логическом программировании

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

Определим отношение not G и опишем его значение. Данное отрицание является частным случаем отрицания в логике первого порядка. Отношение not трактует отрицание как отсутствие. Цель not G считается выводимой из программы Р, если G не выводима из Р.

Опишем отрицание как отсутствие в терминах дерева поиска. Дерево поиска цели G относительно программы Р называется конечно-безуспешным, если в дереве нет успешных вершин и нет бесконечных ветвей. Конечно-безуспешным множествам логической программы Р называется множество тех целей, для которых имеется конечно-безуспешное дерево поиска относительно программы Р.

Цель not следует из программы Р при понимании отрицания как отсутствия, если G входит в конечно-безуспешное множество программы Р.

Рассмотрим простой пример. Возьмем программу, состоящую из двух фактов:

любит (авраам, гранаты).

любит (исаак, гранаты).

Цель not любит (сара, гранаты) следует из программы при понимании отрицания как отсутствия. Дерево поиска любит (сара, гранаты) имеет одну безуспешную вершину.

Использование отрицания как отсутствия позволяет легко определять многие отношения. Например, отношение disjoint (Xs.Ys), означающее, что у двух списков Xs и Ys нет общих элементов, может быть декларативно определено следующим образом:

disjoint(Xs,Ys)  not(member(X,Xs),member(Y,Ys));

Это означает: «список Xs не пересекается со списком Ys, если никакой элемент Xs не является членом обоих списков Xs и Ys».

Программа 5.1 является другим примером программы, использующей отрицание. В программе определяется отношение неженатый_студент (Человек), означающее, что Человек является неженатым студентом. Вопрос неженатый_студент (Х)?. имеет решение Х = билл.

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

неженатый_студент (X) not женат (X), студент (X),

студент (билл).

женат (джо).

Программа 5.1. Простая программа, использующая not.

5.6. Дополнительные сведения

Классическая работа в области семантики логических программ - статья (van Emden, Kowalski, 1976). Существенное развитие идей в этой области содержится в работе (Apt, van Emden, 1981). В частности, авторы показали, что число успешных вершин в дереве поиска инвариантно, и, следовательно, порядок выбора редуцируемых целей в резольвенте несуществен.

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

Общепринятым в литературе названием для деревьев поиска являются SLD-деревья. Название SLD возникло в исследованиях по автоматическому доказательству теорем, предшествовавших появлению логического программирования. SLD-резолюция является одним из уточнений принципа резолюции, описанного в (Robinson, 1965). Вычисление логической программы можно рассматривать как последовательность шагов резолюции, точнее, SLD - резолюции, - обычно в литературе вычисление определяется именно таким образом. Аббревиатура SLD связана с выбором (Selecting) литералов посредством линейной (Linear) стратегии и просмотром набора возможных дедукций в глубину (Depth-first).

Первое доказательство корректности и полноты SLD-резолюций, правда под именем LUSH-резолюций, дано Хиллом (Hill, 1974).

Вопрос об отрицании привлекает большое внимание с момента возникновения логического программирования. Фундаментальная работа по семантике отрицания – как - отсутствия статья (Clark, 1978). Исследования Кларка были продолжены в работе (Jaffar et al., 1983), которой доказаны корректность и полнота правила.

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

Соседние файлы в папке 1-13