anchor.diff:     goal-zdd
      terminal-zdd
      next-zdd
  +   percept-zdds
      possible-forest
      happens-forest))
   
  
positive.code:          (rule-tree-1 rule-tree-2 ...)
  
    "
    (let ((rules (scully.gdl::normalize-rules rules)))
      (destructuring-bind (term->number number->term possible happens)
          (scully.terms::integerize-rules rules)
        (with-zdd
          (make-instance 'zdd-reasoner
            :rules rules
            :roles (find-roles rules)
            :possible-forest (build-rule-forest possible)
            :happens-forest (build-rule-forest happens)
            :initial-zdd (zdd-set (find-initial-state rules term->number))
            :legal-zdd (make-predicate-zdd 'ggp-rules::legal term->number)
            :goal-zdd (make-predicate-zdd 'ggp-rules::goal term->number)
            :terminal-zdd (make-predicate-zdd 'ggp-rules::terminal term->number)
            :next-zdd (make-predicate-zdd 'ggp-rules::next term->number)
            :term->number term->number
            :number->term number->term)))))
  
  
negative.code: (defparameter *i* (initial-iset *r*))
  (defparameter *j* (initial-iset *r*))
  
  ; (with-zdd
  ;   (-<> *r*
  ;     (make-iset <>
  ;                '(
  ;                  (true (control xplayer))
  ;                  (true (cell 1 1 B)) (true (cell 1 2 x)) (true (cell 1 3 o))
  ;                  (true (cell 2 1 B)) (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 *r* <> (zr-possible-forest *r*))
  ;     (draw-zdd *r* <>)
  ;     (dump-iset *r* <>)
  ;     (no <>)
  ;     ))
  
  
  (defun test ()
  