anchor.diff:  
     "
     (iterate
  -    (for tree :in stratum)
  +    (for tree :in (stratum-rule-trees stratum))
       (for (values new-tree new-head) = (funcall function tree))
  -    (when new-tree (collect new-tree :into new-stratum))
  +    (when new-tree (collect new-tree :into new-trees))
       (when new-head (collect new-head :into new-heads))
  -    (finally (return (values new-stratum new-heads)))))
  +    (finally (return (values (update-stratum-with stratum new-trees)
  +                             new-heads)))))
   
   (defun process-forest (function forest)
     "Process the rule forest with `function`.
  
positive.code:   2. Any new heads to add (possible NIL).
  
    "
    (process-forest (rcurry #'advance-tree term) forest))
  
  
  (defun split-tree-hi (tree term)
  
negative.code:         (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)))))
  
  