anchor.diff:          (map-lr1-collection
            #'(lambda (item)
                (declare (type lr1-item item))
  -             (unless (item-dot-right-p item)
  +             (unless (or (and propagate-only
  +                              (not (eq 'propagate (item-lookahead item))))
  +                         (item-dot-right-p item))
                  (push (cons i (lr1-item-shift item)) res)))
            j)))
       res))
  
positive.code:   "Compute the LR(1) lookaheads for all the collections in KERNELS."
    (declare (list kernels) (type grammar grammar))
    (setf (item-lookaheads (kernel-item (car kernels))) (list 'eof))
    (let ((previously-changed kernels)
          (changed '()))
      (declare (optimize (speed 3) (space 0)))
      (loop
       (dolist (kernel kernels)
         (when (memq kernel previously-changed)
           (let ((lookaheads (compute-lookaheads kernel grammar)))
             (declare (list lookaheads))
             (dolist (goto (kernel-gotos kernel))
               (declare (type goto goto))
  
negative.code:                (when new
                   (pushnew target changed)))))))
       (unless changed (return))
       (psetq previously-changed changed changed '()
              propagate-only t)))
    kernels)
  
  (defun print-states (kernels lookaheads &optional (stream *standard-output*))
  