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

Упражнения к разд. 4.2

1.Постройте протоколы решения цели sort([3,1,2]Xs)?при сортировке перестановкой (3.20),сортировке вставкой (3.21)и быстрой сортировке.

2.Постройте протокол решения цели derivative(3*sin(x) – 4*cos(x, D))при использовании программы 3.29для отношения derivative.

3.Потренируйтесь в разработке протоколов для своих программ.

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

Унификация играет центральную роль при автоматическом поиске вывода иипользовании логического вывода в искусственном интеллекте. Впервые унификация описана основополагающей работе Робинсона (Robinson, 1965). Алгоритм унификации был объектом исследования во многих работах, например: (Martelli, Montanari, 1982), (Paterson Wegman • 1978) и (Dwork et al, 1984). Типичное учебное изложение приводится в книгах (Bundy, 1983) (Nilsson, 1980).

Доказательство произвольности выбора редуцируемой цели в резолюции можно наити в работах (Apt, van Emden, 1982) или (Lloyd, 1984).

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

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

Новое использование унификации без проверки на вхождения приведено в работе (Eggert, Chow, 1983);при этом возникают изящные структуры, подобно рисункам Эшера уводящие в бесконечность.

Глава 5 Теория логических программ

Теория логических программ непрерывно развивается. В этой главе будут затронуты пять тем: семантика, корректность, сложность, деревья поиска и отрицание. Результаты приводятся без доказательств.

5.1. Семантика

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

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

Декларативная семантика логических программ основана на стандартной теоретико-модельной семантике логики первого порядка. Для ее описания потребуется некоторая новая терминология.

Пусть P - логическая программа. Универсуум Эрбрана программы P, обозначаемыйU(P) – это множество всех основных термов, которые могут быгь построены из констант и функциональных символов, входящих в Р. Пусть, например, Р - программа 3.1, определяющая натуральные числа:

natura_number(0).

natural_number (s(X)) natural number (X).

В программе имеется один символ константы - 0 и один унарный функциональный символ – s.Универсум Эрбрана U(Р) данной программы есть {0.s (0),(s(s0)),...}. В общем случае универсуум Эрбрана бесконечен, если в программу входит хотя бы один функциональный символ. Если в программу не входят символы констант, то выбирается произвольным образом одна константа.

Базис Эрбрана, обозначаемый В(Р), есть множество всех основных целей,которые можно построить с помощью предикатов программы Р и термов универсуума Эрбрана. Если универсуум Эрбрана бесконечен, то бесконечен и базис Эрбрана. В нашем примере программа содержит один предикат – natural_numher. Базис Эрбрана - {nalural_number (0), natural_numher (s (0)),...}.

Интерпретация логической программы - это некоторое подмножество базиса Эрбрана. Интерпретация сопоставляет истинность и ложность элементам базиса Эрбрана. Цель, принадлежащая базису Эрбрана, является истинной относительно данной интерпретации, если цель входит в данную интерпретацию, в противном случае цель является ложной.

Интерпретация I является моделью логической программы, если каждый основной пример АВ,...,B правила программы удовлетворяет следующему свойству: если В,...,B принадлежат I, то и А принадлежит I. Интуитивно ясно, что моделями являются интерпретации, согласованные с декларативным пониманием предложений программы.

В нашем примере цель natural_number(0) должна входить в каждую модель; кроме того, если natural_number(X) принадлежит модели, то и natural_numher(s(Х)) принадлежит модели. Таким образом, любая модель программы 3.1 содержит весь базис Эрбрана.

Легко заметить, что пересечение двух моделей логической программы Р также является моделью. Это свойство позволяет определить пересечение всех моделей. Модель, полученная пересечением всех моделей, называется минимальной моделью и обозначается М(Р). Минимальная модель и есть декларативное значение программы.

Декларативное значение программы для natural_number, т.е. ее минимальная модель, совпадает с полным базисом Эрбрана - {natural_number (0),natural_number,(s (0)), natural_number (s (s (0))),...}.

Рассмотрим декларативное значение программы 3.15, определяющей отношение append:

append([X \ Xs], Ys,[_X \ Zs}}- append(Xs, Ys,Zs).

append( [ ],Ys,Ys).

Универсуум Эрбрана-[ ], [[ ]], [[ ], [ ]], иными словами, все списки, которые можно построить, используя константу [ ]. Базис Эрбрана - все комбинации списков с предикатом append. Декларативное значение - все основные примеры цели append([ ],Xs,Xs\ т.е. append{[ ],[ ],[ ]), append([ ],[[ ]],[[ ]]),..., а кроме того, такие цели, как append([[ ]],[ ],[[ ]]), логически следующие ввиду применения (применений) правила. В данном случае значение будет лишь подмножеством базиса Эрбрана. Цель append([ ],[ ],[[ ]]), например, не принадлежит значению программы, хотя и принадлежит базису Эрбрана.

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

Для заданной логической программы Р имеется естественная функция Т. отображающая интерпретации в интерпретации и определенная следующим образом:

T(I) = \ А принадлежит В(Р), АВ, В,...,В

п0.-основной пример предложения в Р, В, В,...,В, принадлежат I}.

Данное отображение монотонно, так как если интерпретация I содержится в интерпретации J, то Т(1) содержится в Т(J).

Это отображение позволяет описать модели иным способом. Интерпретация I является моделью в том и только в том случае, если Т (I ) содержится в /

Данное отношение является не только монотонным, но и непрерывным (понятие непрерывности здесь не определяется). Эти два свойства гарантируют, что для каждой логической программы Р отображение Tимеет наименьшую неподвижнуюточку, которая и является значением, определяемым денотационной семантикой программыР.

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

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