(DEFINE-FILE-INFO READTABLE "interlisp" PACKAGE "USER")(IL:FILECREATED "26-Apr-88 09:21:16" IL:{DSK}<LISPFILES>LOGIC>LOGIC.;3 29694        IL:changes IL:to%:  (IL:FUNCTIONS CREATE-BACKGROUND-THEORY)      IL:previous IL:date%: "14-Mar-88 10:19:39" IL:{DSK}<LISPFILES>LOGIC>LOGIC.;2)(IL:* "Copyright (c) 1988 by Roberto Ghislanzoni.  All rights reserved.")(IL:PRETTYCOMPRINT IL:LOGICCOMS)(IL:RPAQQ IL:LOGICCOMS           ((IL:FUNCTIONS ADD-OR-LEVEL ALL ALL-PREDICATES ALL-PREDS ALL-SAS ALL-SEMANTIC-ATTACHMENTS                   AND-LEVEL ANTEC ANY ATOMIC-FORMULAP ATTACH CLAUSES-OR CLEAR-AND-LEVEL CONJ CONSEQ                   CONSEQP CREATE-BACKGROUND-THEORY CREATE-THEORY DELETE-OR-NODE                   DELETE-OR-NODE-WITH-CUT DIRECTLY-IMPLEMENTED FAILEDP FIND-CLAUSES FORMULA-OR                   GET-AND-NODE-THEORIES GET-CUT GET-OR-NODE-THEORIES GET-THEORY IMPLICATIONP                   IS-THERE-CUT LIST-ALL-THEORIES LOAD-THEORY LOGIC-ADD LOGIC-ASSERT LOGIC-DELETE                   LOGIC-PROVE MAKE-AND-NODE MAKE-OR-NODE MAKE-TREE MERGE-INTERNAL MERGE-THEORIES                   NEW-TREE NULL-AND-LEVELP NULL-OR-LEVELP NULL-TREEP OR-LEVELS PREDICATE PROVE                   RENAME-CUT SAVE-THEORY SEMANTIC-ATTACHMENT-P SHOW-DEFINITION SHOW-THEORY SOLVE                   SUBSTITUTE-LEVEL THEORYP UNIF-ENV-OR UNIFICATION-ENV UPDATE-ENV UPDATE-LEVEL                   UPDATE-TREE)           (IL:VARS *PRINT-PRETTY*)           (IL:P (IL:FILESLOAD UNIFIER))))(DEFUN ADD-OR-LEVEL (WFF CLAUSES TREE &OPTIONAL CUTNAME)                     (IL:* IL:;;           "Adds a new or-node to the list of the nodes. The new node is put in front of the old ones") [COND    ((NULL CLAUSES)     TREE)    (T (LET* ((LEVEL (AND-LEVEL TREE))              (NEW-OR-NODE (MAKE-OR-NODE WFF CLAUSES (CONJ LEVEL)                                  (UNIFICATION-ENV LEVEL)                                  (GET-AND-NODE-THEORIES LEVEL)                                  CUTNAME)))             (MAKE-TREE LEVEL (APPEND (LIST NEW-OR-NODE)                                     (OR-LEVELS TREE])(DEFUN ALL (VARS CONJ THS) [PROG (RESULTING-TREE (TREE (MAKE-TREE (MAKE-AND-NODE                                                                   CONJ NIL                                                                   (APPEND (LIST '*BACKGROUND-THEORY*                                                                                 )                                                                          THS))                                                              NIL))                                        COLLECTED-RESULTS NEXT-OR)                             HERE                                 (SETF RESULTING-TREE (LOGIC-PROVE TREE))                                 (COND                                    ((NULL RESULTING-TREE)                                     (RETURN COLLECTED-RESULTS))                                    (T [SETF COLLECTED-RESULTS                                             (APPEND COLLECTED-RESULTS                                                    (LIST (LOOKUP VARS (UNIFICATION-ENV (AND-LEVEL                                                                                                                                                                                RESULTING-TREE                                                                                         ]                                       (SETF NEXT-OR (FIRST (OR-LEVELS RESULTING-TREE)))                                       (SETF TREE (SOLVE (NEW-TREE RESULTING-TREE NEXT-OR)                                                         (FORMULA-OR NEXT-OR)                                                         (CLAUSES-OR NEXT-OR)))                                       (GO HERE])(DEFUN ALL-PREDICATES (THEORY-NAME) (ALL-PREDS (GET-THEORY THEORY-NAME)))(DEFUN ALL-PREDS (THEORY)                     (IL:* IL:;; "The presence of VAL in the AND body is necessary because it is correct to test if the predicates has not  been erased: in such a case its value is NIL") (PROG (PRNAMES)   LABEL       (MAPHASH #'[LAMBDA (KEY VAL)                         (AND (NOT (SEMANTIC-ATTACHMENT-P VAL))                              VAL                              (SETF PRNAMES (APPEND PRNAMES (LIST KEY] THEORY)       (RETURN PRNAMES)))(DEFUN ALL-SAS (THEORY) (PROG (SANAMES)                          LABEL                              (MAPHASH #'[LAMBDA (KEY VAL)                                                (AND (SEMANTIC-ATTACHMENT-P VAL)                                                     VAL                                                     (SETF SANAMES (APPEND SANAMES (LIST KEY] THEORY)                              (RETURN SANAMES)))(DEFUN ALL-SEMANTIC-ATTACHMENTS (THEORY-NAME) (ALL-SAS (GET-THEORY THEORY-NAME)))(DEFMACRO AND-LEVEL (TREE) `(CAR ,TREE))(DEFMACRO ANTEC (WFF) `(CDDR ,WFF))(DEFUN ANY (HOW-MANY VARS CONJ THS) [PROG (RESULTING-TREE                                           (COUNTER 0)                                           (TREE (MAKE-TREE (MAKE-AND-NODE CONJ NIL                                                                   (APPEND (LIST '*BACKGROUND-THEORY*                                                                                 )                                                                          THS))                                                        NIL))                                           COLLECTED-RESULTS NEXT-OR)                                      HERE                                          (SETF RESULTING-TREE (LOGIC-PROVE TREE))                                          (COND                                             ((OR (NULL RESULTING-TREE)                                                  (EQ COUNTER HOW-MANY))                                              (RETURN COLLECTED-RESULTS))                                             (T [SETF COLLECTED-RESULTS                                                      (APPEND COLLECTED-RESULTS                                                             (LIST (LOOKUP VARS (UNIFICATION-ENV                                                                                 (AND-LEVEL                                                                                        RESULTING-TREE                                                                                        ]                                                (SETF NEXT-OR (FIRST (OR-LEVELS RESULTING-TREE)))                                                (SETF TREE (SOLVE (NEW-TREE RESULTING-TREE NEXT-OR)                                                                  (FORMULA-OR NEXT-OR)                                                                  (CLAUSES-OR NEXT-OR)))                                                (INCF COUNTER)                                                (GO HERE])(DEFMACRO ATOMIC-FORMULAP (WFF) `[AND (LISTP ,WFF)                                      (NULL (SECOND ,WFF])(DEFUN ATTACH (SA-NAME DEFINITION THEORY-NAME &OPTIONAL WINDOW) (SETF (GETHASH SA-NAME                                                                             (GET-THEORY THEORY-NAME                                                                                     WINDOW))                                                                      (CONS 'SA DEFINITION))                                                                'ATTACHED)(DEFMACRO CLAUSES-OR (OR-NODE) `(SECOND ,OR-NODE))(DEFUN CLEAR-AND-LEVEL (TREE) (PROGN (SETF (CAR TREE)                                           NIL)                                     TREE))(DEFMACRO CONJ (AND-LEVEL) `(CAR ,AND-LEVEL))(DEFUN CONSEQ (WFF) (CAR WFF))(DEFMACRO CONSEQP (C) `[AND (LISTP ,C)                            (SYMBOLP (CAR ,C])(DEFUN CREATE-BACKGROUND-THEORY NIL [PROGN (IN-PACKAGE 'USER)                                           (CREATE-THEORY '*BACKGROUND-THEORY*)                                           (WITH-OPEN-FILE (FILE (MERGE-PATHNAMES (MAKE-PATHNAME                                                                                   :NAME                                                                                   'MAIN :TYPE                                                                                   'LGC))                                                                 :DIRECTION :INPUT)                                                  (PROG (NAME)                                                    LABEL                                                        (AND (EQ (SETF NAME (READ FILE))                                                                 'THEORY-END)                                                             (RETURN))                                                        (LOGIC-ASSERT NAME (CONS '                                                                                 DIRECTLY-IMPLEMENTED                                                                                 (READ FILE))                                                               '*BACKGROUND-THEORY*)                                                        (GO LABEL])(DEFUN CREATE-THEORY (THEORY-NAME) (SETF (GET 'THEORY THEORY-NAME)                                         (MAKE-HASH-TABLE))                                   THEORY-NAME)(DEFUN DELETE-OR-NODE (TAGNODE NODES) (DELETE TAGNODE NODES :TEST #'EQUAL :COUNT 1))(DEFUN DELETE-OR-NODE-WITH-CUT (CUTNAME OR-LEVELS)                     (IL:* IL:;; "This function is called every time a cut is proven: all the alternatives for that clause MUST be erased. Remember that every cut has a unique identifier") [PROG ((NODES OR-LEVELS))   LABEL       (COND          ((NULL NODES)           OR-LEVELS)          ((EQ (GET-CUT (CAR NODES))               CUTNAME)           (RETURN (DELETE-OR-NODE (CAR NODES)                          OR-LEVELS)))          (T (SETF NODES (CDR NODES))             (GO LABEL])(DEFMACRO DIRECTLY-IMPLEMENTED (CLAUSES) `(EQ (CAR ,CLAUSES)                                              'DIRECTLY-IMPLEMENTED))(DEFMACRO FAILEDP (ENV) `(EQ ,ENV 'FAILED))(DEFUN FIND-CLAUSES (PREDICATE-NAME THEORY-NAMES &OPTIONAL WINDOW)   [PROG NIL     LABEL         (COND            ((NULL THEORY-NAMES)             (RETURN NIL))            (T (LET* ((TH (FIRST THEORY-NAMES))                      (CLAUSES (BINDING PREDICATE-NAME TH WINDOW)))                     (COND                        ((NULL CLAUSES)                         (SETF THEORY-NAMES (CDR THEORY-NAMES))                         (GO LABEL))                        (T (RETURN CLAUSES])(DEFMACRO FORMULA-OR (OR-LEVEL) `(CAR ,OR-LEVEL))(DEFMACRO GET-AND-NODE-THEORIES (AND-NODE) `(THIRD ,AND-NODE))(DEFMACRO GET-CUT (OR-NODE) `(SIXTH ,OR-NODE))(DEFMACRO GET-OR-NODE-THEORIES (OR-NODE) `(FIFTH ,OR-NODE))(DEFMACRO GET-THEORY (THEORY-NAME &OPTIONAL WINDOW) `(OR (AND ,WINDOW (GET-THEORY-INTERNAL                                                                       ,THEORY-NAME                                                                       ,WINDOW))                                                         (GET 'THEORY ,THEORY-NAME)))(DEFMACRO IMPLICATIONP (WFF) `[LET [(SEPARATOR (SECOND ,WFF]                                   (AND (EQ SEPARATOR ':-)                                        (NOT (NULL (CDDR ,WFF])(DEFUN IS-THERE-CUT (CONJS) [OR (MEMBER '! CONJS)                                (PROG ((ELTS CONJS))                                  LABEL                                      (COND                                         ((NULL ELTS)                                          NIL)                                         ((AND (SYMBOLP (CAR ELTS))                                               (EQ (CHAR-CODE (CHAR (SYMBOL-NAME (CAR ELTS))                                                                    0))                                                   33))                                          (RETURN T))                                         (T (SETF ELTS (CDR ELTS))                                            (GO LABEL])(DEFUN LIST-ALL-THEORIES (&OPTIONAL WINDOW) [OR (AND WINDOW (LIST-ALL-THEORIES-INTERNAL WINDOW))                                                (DO ((LL (SYMBOL-PLIST 'THEORY)                                                         (CDDR LL))                                                     (RESULT NIL))                                                    ((NULL LL)                                                     RESULT)                                                    (SETF RESULT (APPEND RESULT (LIST (CAR LL])(DEFUN LOAD-THEORY (THEORY-NAME &OPTIONAL WINDOW)   [LET [(THEORY-FILE (MERGE-PATHNAMES (MAKE-PATHNAME :NAME THEORY-NAME :TYPE 'LGC]        (OR (AND WINDOW (LOAD-DEVEL-THEORY WINDOW THEORY-NAME))            (OR [AND (PROBE-FILE THEORY-FILE)                     (WITH-OPEN-FILE (FILE THEORY-FILE :DIRECTION :INPUT)                            (PROG (THEORY-NAME PRED-NUMBER SAS-NUMBER)                                  (SETF THEORY-NAME (READ FILE))                                  (CREATE-THEORY THEORY-NAME)                                  (SETF SAS-NUMBER (READ FILE))                                  (DO ((SAS SAS-NUMBER (DECF SAS)))                                      ((EQ SAS 0)                                       NIL)                                      (SETF (GETHASH (READ FILE)                                                   (GET 'THEORY THEORY-NAME))                                            (READ FILE)))                                  (SETF PRED-NUMBER (READ FILE))                                  (DO ((PREDS PRED-NUMBER (DECF PREDS)))                                      ((EQ PREDS 0)                                       NIL)                                      (SETF (GETHASH (READ FILE)                                                   (GET 'THEORY THEORY-NAME))                                            (READ FILE)))                                  (RETURN 'LOADED]                (FORMAT T "Theory not found"])(DEFUN LOGIC-ADD (PRED CLAUSES THEORY &OPTIONAL WINDOW) (PROGN (SETF (GETHASH PRED (GET-THEORY THEORY                                                                                           WINDOW))                                                                     (APPEND (GETHASH PRED                                                                                    (GET-THEORY                                                                                     THEORY WINDOW))                                                                            CLAUSES))                                                               'ADDED))(DEFUN LOGIC-ASSERT (PREDICATE-NAME CLAUSES THEORY-NAME &OPTIONAL WINDOW) (SETF (GETHASH                                                                                        PREDICATE-NAME                                                                                       (GET-THEORY                                                                                        THEORY-NAME                                                                                         WINDOW))                                                                                CLAUSES)                                                                          'ASSERTED)(DEFUN LOGIC-DELETE (PRED-OR-SA THEORY-NAME &OPTIONAL WINDOW) (PROGN (SETF (GETHASH PRED-OR-SA                                                                                  (GET-THEORY                                                                                          THEORY-NAME                                                                                          WINDOW))                                                                           NIL)                                                                     'DELETED))(DEFUN LOGIC-PROVE (TREE &OPTIONAL WINDOW)   [PROG NIL     JUMP         (COND            ((NULL-TREEP TREE)             (RETURN NIL))            [(NULL-AND-LEVELP TREE)             (LET [(NEXT-OR (FIRST (OR-LEVELS TREE]                    (IL:* IL:;;           "Gets the next or-node: we have now no strategy for choosing it; maybe later...")                  (COND                     ((NULL NEXT-OR)                      (SETF TREE (LIST NIL NIL))                      (GO JUMP))                     (T (SETF TREE (SOLVE (NEW-TREE TREE NEXT-OR)                                          (FORMULA-OR NEXT-OR)                                          (CLAUSES-OR NEXT-OR)                                          NIL WINDOW))                        (GO JUMP]            (T (LET ((NEXT-LEVEL (AND-LEVEL TREE)))                    (COND                       ((NULL (CONJ NEXT-LEVEL))                        (RETURN TREE))                       (T (LET* [(TO-PROVE (FIRST (CONJ NEXT-LEVEL)))                                 (THS (GET-AND-NODE-THEORIES NEXT-LEVEL))                                 (CLAUSES (FIND-CLAUSES (PREDICATE TO-PROVE)                                                 THS WINDOW))                                 (CUT? (IS-THERE-CUT (REST (CONJ NEXT-LEVEL]                                (SETF TREE (SOLVE (UPDATE-TREE (UPDATE-LEVEL NEXT-LEVEL TO-PROVE)                                                         TREE)                                                  TO-PROVE CLAUSES CUT? WINDOW))                                (GO JUMP])(DEFUN MAKE-AND-NODE (CONJ UNIF-ENV THEORIES) (LIST CONJ UNIF-ENV THEORIES))(DEFUN MAKE-OR-NODE (WFF CLAUSES BORDER UNIF-ENV THEORIES &OPTIONAL CUTNAME) (LIST WFF CLAUSES BORDER                                                                                    UNIF-ENV THEORIES                                                                                    CUTNAME))(DEFUN MAKE-TREE (AND-LEVEL OR-LEVELS) (LIST AND-LEVEL OR-LEVELS))(DEFUN MERGE-INTERNAL (NEW-THEORY-NAME THEORIES &OPTIONAL WINDOW)   [PROGN (IL:* IL:;; "Merges the specified theories in to a new-brand theory")          (LET ((ACTUAL-THEORY (GET-THEORY NEW-THEORY-NAME WINDOW)))               (DO ((THS THEORIES (CDR THS)))                   ((NULL THS)                    'MERGED)                   (AND (THEORYP (CAR THS)                               WINDOW)                        (MAPHASH #'(LAMBDA (KEY VAL)                                          (AND VAL (SETF (GETHASH KEY ACTUAL-THEORY)                                                         VAL))) (GET-THEORY (CAR THS)                                                                       WINDOW])(DEFUN MERGE-THEORIES (NEW-THEORY-NAME &REST LIST-OF-THEORIES) (PROGN (CREATE-THEORY NEW-THEORY-NAME)                                                                      (MERGE-INTERNAL NEW-THEORY-NAME                                                                              LIST-OF-THEORIES)                                                                      'MERGED))(DEFUN NEW-TREE (TREE OR-NODE) (MAKE-TREE (MAKE-AND-NODE (THIRD OR-NODE)                                                 (UNIF-ENV-OR OR-NODE)                                                 (GET-OR-NODE-THEORIES OR-NODE))                                      (DELETE-OR-NODE OR-NODE (OR-LEVELS TREE))))(DEFMACRO NULL-AND-LEVELP (TREE) `(NULL (CAR ,TREE)))(DEFMACRO NULL-OR-LEVELP (TREE) `(NULL (SECOND ,TREE)))(DEFMACRO NULL-TREEP (TREE) `(AND (NULL-AND-LEVELP ,TREE)                                  (NULL-OR-LEVELP ,TREE)))(DEFMACRO OR-LEVELS (TREE) `(SECOND ,TREE))(DEFUN PREDICATE (WFF) (COND                          ((LISTP WFF)                           (CAR WFF))                          (T WFF)))(DEFUN PROVE (CONJ THS) (LET [(RESULT (LOGIC-PROVE (MAKE-TREE (MAKE-AND-NODE                                                               CONJ NIL (APPEND (LIST '                                                                                  *BACKGROUND-THEORY*                                                                                      )                                                                               THS))                                                          NIL]                             (COND                                ((NULL RESULT)                                 NIL)                                (T T))))(DEFUN RENAME-CUT (ANTECS)                     (IL:* IL:;; "This function returns a CONS with CAR as the renamed cut and CDR as the list of antecs with the cut renamed") [DO ((TEMPVAR ANTECS (CDR TEMPVAR))      (RESULTS NIL)      (CUT-RENAMED NIL))     ((NULL TEMPVAR)      (CONS CUT-RENAMED RESULTS))     (COND        [(EQ (CAR TEMPVAR)             '!)         (SETF CUT-RENAMED (GENSYM "!"))         (SETF RESULTS (APPEND RESULTS (LIST CUT-RENAMED]        (T (SETF RESULTS (APPEND RESULTS (LIST (CAR TEMPVAR])(DEFUN SAVE-THEORY (THEORY-NAME &OPTIONAL WINDOW)   [LET ((THEORY (GET-THEORY THEORY-NAME WINDOW)))        (COND           ((NOT (THEORYP THEORY))            'ERROR)           (T (WITH-OPEN-FILE (FILE (MERGE-PATHNAMES (MAKE-PATHNAME :NAME THEORY-NAME :TYPE                                                            'LGC))                                    :DIRECTION :OUTPUT :IF-EXISTS :NEW-VERSION :IF-DOES-NOT-EXIST                                     :CREATE)                     (LET ((PREDS (ALL-PREDS THEORY))                           (SAS (ALL-SAS THEORY)))                          (PROGN (FORMAT FILE "~S~%%" THEORY-NAME)                                 (FORMAT FILE "~D~%%" (LENGTH SAS))                                 (DO ((SA-NAME SAS (CDR SA-NAME)))                                     ((NULL SA-NAME)                                      NIL)                                     (FORMAT FILE "~S ~S ~%%" (CAR SA-NAME)                                            (GETHASH (CAR SA-NAME)                                                   THEORY)))                                 (FORMAT FILE "~D~%%" (LENGTH PREDS))                                 (DO ((PRED-NAME PREDS (CDR PRED-NAME)))                                     ((NULL PRED-NAME)                                      NIL)                                     (FORMAT FILE "~S ~S ~%%" (CAR PRED-NAME)                                            (GETHASH (CAR PRED-NAME)                                                   THEORY)))                                 'SAVED])(DEFMACRO SEMANTIC-ATTACHMENT-P (SA) `(EQ (CAR ,SA)                                          'SA))(DEFUN SHOW-DEFINITION (ELEMENT THEORY-NAME &OPTIONAL WINDOW)   [FORMAT (OR (AND WINDOW *TRACE-OUTPUT*)               T)          "~S~%%"          (PROG [(DEF (GETHASH ELEMENT (GET-THEORY THEORY-NAME WINDOW]                (OR (AND (SEMANTIC-ATTACHMENT-P DEF)                         (RETURN (CDR DEF)))                    (RETURN DEF])(DEFUN SHOW-THEORY (THEORY-NAME &OPTIONAL VERBOSE WINDOW)   [LET* ((THEORY (GET-THEORY THEORY-NAME))          (PREDICATES (ALL-PREDS THEORY))          (SAS (ALL-SAS THEORY))          (STREAM (OR (AND WINDOW *TRACE-OUTPUT*)                      T)))         [OR (AND SAS (PROGN (FORMAT STREAM "Semantic attachments: ~%%")                             [DO ((PP SAS (CDR PP)))                                 ((NULL PP)                                  NIL)                                 (PROGN (FORMAT T "~%%~S ~%% " (CAR PP))                                        (AND VERBOSE (FORMAT T "Definition: ~S ~%%"                                                            (CDR (GETHASH (CAR PP)                                                                        THEORY))                                                            " "]                             (FORMAT STREAM "~%% ~%%"]         (OR (AND PREDICATES (PROGN (FORMAT STREAM "Predicates: ~%%")                                    [DO ((PP PREDICATES (CDR PP)))                                        ((NULL PP)                                         NIL)                                        (PROGN (FORMAT T "~%%~S ~%%" (CAR PP))                                               (AND VERBOSE (FORMAT STREAM "Clauses: ~S ~%%"                                                                   (GETHASH (CAR PP)                                                                          THEORY)                                                                   " "]                                    (FORMAT STREAM "~%% ~%%"])(DEFUN SOLVE (TREE FORMULA CLAUSES &OPTIONAL CUT WINDOW)   [PROG NIL     JUMP         (AND WINDOW (SOLVE-DEBUGGER TREE FORMULA CLAUSES WINDOW))         (COND            ((NULL CLAUSES)                                  (IL:* IL:; "demo is failed")             (RETURN (CLEAR-AND-LEVEL TREE)))            ((DIRECTLY-IMPLEMENTED CLAUSES)                  (IL:* IL:;                                                              "clauses from the main theory")             (RETURN (FUNCALL (CDR CLAUSES)                            TREE FORMULA CLAUSES WINDOW)))            [(SEMANTIC-ATTACHMENT-P CLAUSES)                 (IL:* IL:;                                                             "Semantic attachment defined by the user")             (LET [(EXPANDED-FORMULA (LOOKUP FORMULA (UNIFICATION-ENV (AND-LEVEL TREE]                  (COND                     ((APPLY (CDR CLAUSES)                             (CDR EXPANDED-FORMULA))                      (RETURN TREE))                     (T (RETURN (CLEAR-AND-LEVEL TREE]            (T (LET* ((CANDIDATE (FIRST CLAUSES))                      (ASSERT (RENAME CANDIDATE))                      (NEWENV (UNIFY FORMULA (CONSEQ ASSERT)                                     (UNIFICATION-ENV (AND-LEVEL TREE))                                     WINDOW)))                     (COND                        ((FAILEDP NEWENV)                         (SETF CLAUSES (REST CLAUSES))                         (GO JUMP))                        [(ATOMIC-FORMULAP ASSERT)                    (IL:* IL:;; "If a cut has been discovered in the previous procedure, it is necessary not to instantiate alternatives for the clause in a or-level")                         (RETURN (UPDATE-ENV NEWENV (OR (AND CUT TREE)                                                        (ADD-OR-LEVEL FORMULA (REST CLAUSES)                                                               TREE]                        ((IMPLICATIONP ASSERT)                    (IL:* IL:;; "If there is a cut, it is necessary to mark the alternatives for that clause; if the cut will be proved, then these alternatives will be eliminated  ")                         (RETURN (COND                                    [(IS-THERE-CUT (ANTEC ASSERT))                                     (LET* ((RENAMED-STRUCTURE (RENAME-CUT (ANTEC ASSERT)))                                            (RENAMED-CUT (CAR RENAMED-STRUCTURE))                                            (RENAMED-ASSERT (CDR RENAMED-STRUCTURE)))                                           (SUBSTITUTE-LEVEL NEWENV RENAMED-ASSERT                                                  (ADD-OR-LEVEL FORMULA (REST CLAUSES)                                                         TREE RENAMED-CUT]                                    (T (SUBSTITUTE-LEVEL NEWENV (ANTEC ASSERT)                                              (ADD-OR-LEVEL FORMULA (REST CLAUSES)                                                     TREE])(DEFUN SUBSTITUTE-LEVEL (ENV ANTECS TREE) (PROGN [RPLACA TREE (MAKE-AND-NODE                                                               (APPEND ANTECS (CONJ (AND-LEVEL TREE))                                                                      )                                                               ENV                                                               (GET-AND-NODE-THEORIES (AND-LEVEL                                                                                       TREE]                                                 TREE))(DEFMACRO THEORYP (THEORY &OPTIONAL WINDOW) `(OR (AND (GET-THEORY ,THEORY ,WINDOW)                                                      T)                                                 (HASH-TABLE-P ,THEORY)))(DEFMACRO UNIF-ENV-OR (OR-NODE) `(FOURTH ,OR-NODE))(DEFMACRO UNIFICATION-ENV (AND-NODE) `(SECOND ,AND-NODE))(DEFUN UPDATE-ENV (ENV TREE) (SETF (SECOND (AND-LEVEL TREE))                                   ENV)                             TREE)(DEFUN UPDATE-LEVEL (LEVEL FORMULA) (MAKE-AND-NODE (CDR (CONJ LEVEL))                                           (UNIFICATION-ENV LEVEL)                                           (GET-AND-NODE-THEORIES LEVEL)))(DEFUN UPDATE-TREE (LEVEL TREE) (MAKE-TREE LEVEL (OR-LEVELS TREE)))(IL:RPAQQ *PRINT-PRETTY* T)(IL:FILESLOAD UNIFIER)(IL:PUTPROPS IL:LOGIC IL:COPYRIGHT ("Roberto Ghislanzoni" 1988))(IL:DECLARE%: IL:DONTCOPY  (IL:FILEMAP (NIL)))IL:STOP