Логическое программирование

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


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

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

         

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

Пример процедуры, поведение которой соответствует предположению об открытости мира.

Программа содержит позитивные факты

father(tom,bob).

father(bob,pat).

Явно заданы негативные факты в виде

false(father(pat,_)).

Если нельзя доказать, что утверждение истинно или ложно, то оно считается неизвестным.

prove(P) :-

    P,

    write_ln('=> истино'),!.



prove(P) :-

    false(P),

    write_ln('=>ложно'),!.

prove(P):-

    not(P),

    not(false(P)),

    write_ln('=>неизвестно').

?- prove(father(pat,jim)).

=>ложно

Yes

?- prove(father(jim,X)).

=>неизвестно

X = G836

Yes

?- prove(father(X,bob)).

=> истино

X = tom

Yes



Содержание раздела