Полный листинг программы
;; ЕСЛИ при анализе левого дизъюнкта обнаружено ;; противоречие, ;; ТО проанализировать правый дизъюнкт. (defrule right-disjunct (declare (salience 10)) ?W ← (world (tag?N) (task contra) (context 1)) (claim (content OR?P?X?Q?Y) (reason?N) (scope?V)) › (assert (claim (content?Q?Y) (reason?N) (scope?V) (context 2))) (modify?W (task check) (context 2)) ) ;; ЕСЛИ выполнен откат к анализу правого дизъюнкта, ;; ТО установить соответствующий контекст. (defrule resume-disjunct ?W ← (world (tag?N) (task back) (context 1)) (claim (content OR?P?X?Q?Y) (reason?N) (scope?V)) › (assert (claim (content?Q?Y) (reason?N) (scope?V) (context 2))) (modify?W (task check) (context 2)) ) ;; ЕСЛИ анализ обоих дизъюнктов в предположении о ;; правдивости персонажа привел к противоречию ;; в том же самом "мире", ;; ТО выполнить анализ, предполагая, что персонаж лжет. (defrule false-disjuncts ?W ← (world (tag?M) (scope truth) (task contra) (prior 0) (context 2)) (not (claim (reason?M) (context 2))) › (modify?W (scope falsity) (task check) (context 0)) ) ;; ЕСЛИ анализ в предположении о правдивости персонажа ;; привел к противоречию с другим "миром", ;; ТО выполнить анализ, предполагая, что персонаж лжет. (defrule other-world ?W ← (world (tag?N) (scope truth) (task contra) (prior?M&"0) (context 0)) › (modify?W (scope falsity) (task check)) ) ;;ОБРАБОТКА ПРОТИВОРЕЧИЙ ;;ЕСЛИ обнаруживается противоречие между предположением ;;и производными от него фактами в пределах одного и ;;того же мира и в одном и том же контексте, ;;ТО зафиксировать противоречие и удалить ;;противоречивые утверждения (объекты claim) ;;из базы фактов, (defrule contradiction (declare (salience 100)) ?W ← (world (tag?N) (task check) (scope?V) (context?S))?P < – (claim (content?F?X) (scope?V) (reason?N) (context?S))?Q < – (claim (content?G&:(-not (eq?G?F))?X) (scope?V) (reason?N) (context?S)) › (printout t crlf "CONTRADICTION: "?F?X " versus "?G?X "in world "?N ;; "ПРОТИВОРЕЧИЕ между: "?F?X " и "?G?X "в мире "?N t crlf) (retract?P) (retract?Q) (modify?W (task contra)) ;; ЕСЛИ обнаруживается противоречие между предположением ;; и производными от него фактами в пределах одного и ;; того же мира, но в разных контекстах, ;; ТО зафиксировать противоречие. (defrule transcontext (declare (salience 90)) ?W ← (world (tag?N) (task check) (scope?V) (context?T)) (claim (content?F?X) (scope?V) (reason?N) (context?S&:(<?S?T))) (claim (content?G&:(not (eq?G?F))?x') (scope?V) (reason?N) (context?T)) › (printout t crlf "TRANSCONTEXT CONTRADICTION: "?F?X " versus " ?G?X " in world "?N ;; "ТРАНСКОНТЕКСТНОЕ ПРОТИВОРЕЧИЕ между: " ?F?X;; " и "?G?X "в мире "?N t crlf) (modify?W (task contra)) ) ;; ЕСЛИ обнаруживается противоречие между ;; текущим "миром" в предположении о правдивости ;; и ранее покинутым "миром", ;; ТО зафиксировать противоречие.