anchor.diff:  
   
   ;;;; Utils --------------------------------------------------------------------
  -(defmacro defclass* (name-and-options direct-superclasses slots &rest options)
  -  (flet ((slot-definition (conc-name slot)
  -           (destructuring-bind (name &key
  -                                     type
  -                                     documentation
  -                                     initform
  -                                     (accessor (symb conc-name name))
  -                                     (initarg (intern (symbol-name name) :keyword)))
  -               (ensure-list slot)
  -             `(,name
  -               :initarg ,initarg
  -               :accessor ,accessor
  -               ,@(when initform `(:initform ,initform))
  -               ,@(when type `(:type ,type))
  -               ,@(when documentation `(:documentation ,documentation))))))
  -    (destructuring-bind (name &key (conc-name (symb name '-)))
  -        (ensure-list name-and-options)
  -      `(defclass ,name ,direct-superclasses
  -        ,(mapcar (curry #'slot-definition conc-name) slots)
  -        ,@options))))
  -
  -
   (defun find-ggp-symbol (atom)
     (if (symbolp atom)
       (values (intern (symbol-name atom)
  
positive.code: 
  
  
  (defparameter *l* (make-zdd-reasoner *rules*))
  (defparameter *i* (initial-iset *l*))
  (defparameter *j* (initial-iset *l*))
  
  (with-zdd
    (-<> *l*
      (make-iset '(
                   (true (control oplayer))
                   (true (cell 1 1 o)) (true (cell 1 2 x)) (true (cell 1 3 o))
                   (true (cell 2 1 x)) (true (cell 2 2 o)) (true (cell 2 3 o))
                   (true (cell 3 1 x)) (true (cell 3 2 x)) (true (cell 3 3 x))
                   ))
      (apply-rule-forest *l* <> (zr-possible-forest *l*))
      (draw-zdd *l* <>)
      ))
  
  (with-zdd
    (-<>
        (zdd-union (make-iset *l* '(
                                    (true (control xplayer))
                                    (true (cell 1 1 o)) (true (cell 1 2 x)) (true (cell 1 3 B))
                                    (true (cell 2 1 x)) (true (cell 2 2 o)) (true (cell 2 3 o))
                                    (true (cell 3 1 x)) (true (cell 3 2 o)) (true (cell 3 3 x))
                                    ))
                   (make-iset *l* '(
                                    (true (control xplayer))
                                    (true (cell 1 1 o)) (true (cell 1 2 B)) (true (cell 1 3 x))
                                    (true (cell 2 1 x)) (true (cell 2 2 o)) (true (cell 2 3 o))
                                    (true (cell 3 1 x)) (true (cell 3 2 o)) (true (cell 3 3 x))
                                    ))
                   (make-iset *l* '(
                                    (true (control xplayer))
                                    (true (cell 1 1 o)) (true (cell 1 2 x)) (true (cell 1 3 x))
                                    (true (cell 2 1 x)) (true (cell 2 2 o)) (true (cell 2 3 o))
                                    (true (cell 3 1 x)) (true (cell 3 2 o)) (true (cell 3 3 B))
                                    )))
      (apply-rule-forest *l* <> (zr-possible-forest *l*))
      (dump-iset *l* <>)
      (no <>)
      ; (draw-zdd *l* <>)
      ))
  
negative.code: 
    "
    (adt:match scully.rule-trees::rule-tree tree
      ((scully.rule-trees::node term% hi lo)
       (if (< term% term)
         (if (member term% heads)
           (advance-tree hi term heads)
           (advance-tree lo term heads))
         (tree-to-result tree)))
      (_ (tree-to-result tree))))
  
  (defun advance-stratum (stratum term &optional heads)
    "Advance the stratum up to (but not beyond) `term`.
  
    Two values will be returned:
  
    1. The new stratum (possibly NIL).
    2. Any new heads to add (possible NIL).
  
    "
    (process-stratum (rcurry #'advance-tree term heads) stratum))
  
  (defun advance-forest (forest term &optional heads)
    "Advance the rule forest up to (but not beyond) `term`.
  
    Two values will be returned:
  