Иллюстрированный самоучитель по введению в экспертные системы

Обработка метавысказываний

;;Теперь разработаем правило, которое будет
;;"распаковывать" высказывание о высказывании.
;; ЕСЛИ объект world базируется на предположении о
;; правдивости метавысказывания,
;; ТО предположить, что персонаж говорит правду и что
;; высказывание истинно.
(defrule unwrap-true-state
?W ← (world (tag?N) (scope truth) (task check)
(done 0))?S ← (statement (speaker?X) (claim SAY?Z $?Y)
(done 0)) ›
(printout t crlf "Assuming " Т?X " and "?Z " says " $?Y
" in world "?N
;; "Предполагается " Т?X " и "?Z " говорит " $?Y
;; "в мире "?N
t crlf
)
;; Зафиксировать, что высказывание было распаковано
;; в предположении о его правдивости,
(modify?S (tag?N) (done 1))
;; Предположим, что персонаж в текущем "мире" является
;; правдолюбцем.
(assert (claim (content T?X) (reason?N)
(scope truth)))
;; Зафиксировать в объекте world, что высказывание
;; распаковано, (modify?W (done 1))
;; Сформировать новый объект world для внедренного
;; высказывания и зафиксировать, что этот объект
;; является внутренним по отношению к объекту?N.
(assert (world (tag (+?N 1)) (scope truth) (upper?N)))
;; Зафиксировать внедренное высказывание в новом
;; объекте world.
(assert (statement (speaker?Z) (claim $?Y) (reason?N)))
)
;; ЕСЛИ объект world базируется на предположении о
;; лживости метавысказывания,
;; ТО предположить, что персонаж лжет.
;; Каких-либо предположений об истинности
;; утверждения не делается.
(defrule unwrap-false-state
?W ← (world (tag?N) (scope falsity)
(task check))?S ← (statement (speaker?X)
(claim SAY?Z $?Y)
(tag?N) (done 1)) ›
(printout t crlf "Assuming " F " "?X " and
NOT "?Z " says " $?Y
" in .world "?N
;; "Предполагается " F " "?X " и HE "?Z "
говорит " $?Y;; " в мире "?N t crlf
)
;; Изменить значение в поле scope текущего объекта
;; world.
(modify?W (scope falsity) (done 2))
;; Зафиксировать, что высказывание было распаковано
;; в предположении о лживости, (modify?S (scope falsity) (done 2))
;; Предположить, что в текущем "мире" персонаж,
;; произнесший метавысказывание, лжец.
(assert (claim (content F?X)
(reason?N) (scope falsity))))

Чтобы облегчить себе жизнь, будем считать, что в метавысказывании не может быть отрицания, т.е. мы не будем рассматривать метавысказывания вида:

А: "В не говорил, что он правдолюбец".

Более того, если А говорит, что В заявил нечто, то по условиям, принятым в головоломках этого класса, для того чтобы доказать, что А лжец, требуется только показать, что не существует непротиворечивого "мира", в котором В мог бы сделать правдивое утверждение.

Таким образом, нам не придется обрабатывать отрицания в метавысказываниях и анализировать их непротиворечивость. Указанные условия нашли свое отражение в правиле unwrap-false-state. В этом правиле которое активизируется, когда предположение о правдивости персонажа не срабатывает, просто предполагается, что этот персонаж лжет, а более глубокий анализ не проводится.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.