3. 3. Отрицание как неудача запроса Негативная информация

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

Если фраза Р не представлена в текущей программе, то считается, что представлено отрицание Р.

Предположение о замкнутости мира

С практической точки зрения это означает, что интерпретатор не может отличить неизвестную фразу от доказуемо неистинной фразы. Правило, приведенное выше, известно как предположение о замкнутости мира. Множество фраз текущей программы называется миром. Это - замкнутый мир, поскольку интерпретатор ведет себя так, как будто бы в этом мире содержатся все возможные знания. Предположение о замкнутости мира является результатом действия неявного предиката метаязыка, описывающего смысл запроса в языке Пролог (см. разд. 0. 9).

Тогда и только тогда, когда

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

начальник (джордж).

начальник (гарри).

начальник (нэнси).

На уровне объектного языка смысл этих фраз следующий:

Х является начальником, если

Х - это « Джордж» или

Х - это « Гарри» или

Х - это «Нэнси».

Однако из-за предположения о замкнутости мира фактический смысл этих трех фраз на уровне метаязыка будет несколько иным:

Х является начальником тогда и только тогда, когда

Х — это « Джордж» или

Х - это «Гарри» или

Х-это «Нэнси».

Член "только тогда" появляется вследствие предположения о замкнутости мира.

Предположение об открытости мира

При работе с неизвестной информацией альтернативой предположению о замкнутости мира служит предположение об открытости мира:

Если фраза Р отсутствует в текущей программе, то считается, что Р ни истинна, ни ложна.

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

Отрицание в явной форме

Встроенный предикат "not" ("не"), который в некоторых версиях языка Пролог записывается как "\+", имеет один аргумент. Этим аргументом является запрос, значение истинности которого (после обработки данного запроса) заменяется на противоположное. Если запрос успешен, то отрицание этого запроса является неудачей и, наоборот, если запрос терпит неудачу, то его отрицание будет успехом. Запрос:

|? -not (отец (питер, Х)). % (1)

будет истинным тогда и только тогда, когда

|? - отец (питер, X). % (2)

потерпит неудачу.

Квантификация переменных в запросе с предикатом "not"

Как отмечалось в разд. 1. 3, переменная Х в запросе (2), приведенном выше, квалифицирована экзистенциально. Запрос (2) соответствует вопросу:

Существует ли некоторый X, для которого Питер является отцом?

С другой стороны, переменная Х в запросе (1) квантифицирована универсально. Запрос (1) соответствует вопросу:

Является ли Питер не-отцом?

(или: Для любого X, является ли Питер не-отцом X?)

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

Пример использования предиката "not "

Напишем правило, определяющее сельского жителя как человека, который не является ни горожанином, ни жителем пригорода.

горожанин (джейк).

житель_пригорода (сюзан).

сельский_житель (Х):—

not (горожанин (X)),

not (житель_пригорода (X)).

Какой ответ Вы ожидаете получить на запрос:

|?— сельский_житель (билл).?

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие