Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Логическое прогаммирование. Курс лекций. М. 200...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
610.82 Кб
Скачать

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

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

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

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

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

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

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

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

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

X - это джордж или

X - это гарри или

X - это нэнси”.

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

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

X - это джордж или

X - это гарри или

X - это нэнси”.

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

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

?- not(отец (питер, X).

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

?- отец (питер, X )

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

Переменные в цели с предикатом not квантифицированы универсальным образом (т. е. используется квантор всеобщности).

Пример.

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

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

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

сельский_ житель(X):-

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

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

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

Yes.

Всякая точная наука основывается на приблизительности.

Бертран Рассел

5.4. Трудности с отсечением и отрицанием

Преимущества отсечения

  1. При помощи отсечения часто можно повысить эффективность программы. Идея состоит в том, чтобы прямо сказать пролог-системе: не пробуй остальные альтернативы, так как они все равно обречены на неудачу.

  2. Применяя отсечение, можно описать взаимоисключающие правила, например, с помощью условной конструкции. Выразительность языка при этом повышается.

Недостатки отсечения

Нарушается соответствие между процедурным и декларативным смыслами программы.

Пример:

p :- a, b.

p :- c.

Декларативный смысл: p <=> (a and b) or c.

p :- a, !, b.

p :- c.

Декларативный смысл: (a and b) or ( not a and c) <=> p

p :- c.

p:- a, b.

Декларативный смысл: p <=> (a and b) or c.

Отрицание определяется через отсечение - поэтому к замкнутому миру добавляются и недостатки отсечения.

not (P) :-

P, !, fail;

true.

r(a).

g(b).

p(X) :- not r(X).

?- g(X), p(X).

X = b

Yes

?- p(X), g(X).

No

Порядок целей повлиял на работу программы. В первом случае, когда вызывается подцель p(X), переменная X уже конкретизована значением b. Во втором случае p(X) вызывается со свободной переменной.

Что касается трудностей Пролога, то подобное возникает и в других языках.