Расширение набора правил – работа с составными высказываниями
Следующий шаг – разработка правил, манипулирующих контекстом. Приведенное ниже правило формирует контекст для левого операнда дизъюнкции.
(defrule left-or ?W ← (world (tag?N) (context 0)) (claim (content OR?P?X?Q?Y)(reason?N) (scope?V)) › (modify?W (context 1)) (assert (claim (content?P?X) (reason?N) (scope?V) (context 1))))
Это правило устанавливает значение 1 в поле context объекта world и формирует соответствующий объект claim.
По этому же принципу разработаем правило для формирования контекста правого операнда дизъюнкции.
(defrule right-or ?W ← (world (tag?N) (context 1)) (claim (content OR?P?X?Q?Y) (reason?N) (scope?V)) › (modify?W (context 2)) (assert (claim (content?Q?Y) (reason?N) (scope?V) (context 2)) )
Упражнение 2
Разработайте самостоятельно правило, которое оперировало бы с объектом claim содержим утверждение в конъюнктивной форме, как показано ниже.
(claim (content AND Т A F В) (reason 1) (scope truth))
Это правило должно разделить такое утверждение на два: суть первого – утверждение, что А – правдолюбец, а второго – утверждение, что В – лжец. Новые объекты claim должны существовать в текущем контексте, определенном в объекте world.
Далее разработаем правила, чувствительные к контексту, которые будут выявлять наличие противоречий в анализируемых утверждениях.
;; Выявление противоречия между предположением о ;; правдивости и следующими из него фактами ;; в разных контекстах одного и того же объекта world, (defrule contra-truth-scope (declare (salience 10)) (world (tag?N) (scope truth) (context?T)) (claim (content Т?Х) (reason?N) (scope truth) (context?S&:(<?S?T)))?Q ← (claim (content P?x) (reason?N) (scope truth) (context?T)) › (printout t "Disjunct "?T " is inconsistent with earlier truth context. " ;; "Дизъюнкт "?T ;; " противоречит ранее установленному контексту правдивости. " crlf) (retract?Q) ) ;; Выявление противоречия между предположением о ;; лживости и следующими из него фактами ;; в разных контекстах одного и того же объекта world. (defrule contra-falsity-scope (declare (salience 10)) ?W ← (world (tag?N) (scope falsity) (context?T>> (claim (content F?X) (reason?N) (scope falsity) (context?S&:(<?S?T)))?Q ← (claim (content Т?Х) (reason?N) (scope falsity) (context?T)) › (printout t "Disjunct "?T " is inconsistent with earlier falsity context." ;; "Дизъюнкт "?T ;; " противоречит ранее установленному контексту лживости. " crlf) (retract?Q))