anchor.diff:  (defgeneric substitute-variables (mapping process &optional ignored-vars)
     (:documentation "Replaces all the variables in place.")
     (:method (mapping process &optional ignored-vars)
  +    (declare (ignore mapping process ignored-vars))
       (values))
     (:method (mapping (process cons) &optional ignored-vars)
       (setf (car process) (replace-variables (car process) mapping ignored-vars)
  
positive.code:       (clear-events))))
  
  (defgeneric duplicate-process (process)
    (:method (process)
      process)
    (:method ((process cons))
  
negative.code:     (declare (ignore kell))
      '()))
  
  (defgeneric activate-process (process kell)
    (:method ((process cons) (kell kell))
      (remove-process-from process kell)
      (add-process (eval process) kell))
    (:method ((process process) (kell kell))
      (setf (parent process) kell)
      (mapc #'push-event (collect-channel-names process kell)))
    (:method ((process kell) (kell kell))
      (call-next-method)
      (activate-process (process process) process))
    (:method ((process parallel-composition) (kell kell))
      (map-parallel-composition (lambda (sub-process)
                                  (activate-process sub-process kell))
                                process))
    (:method ((process restriction) (kell kell))
      (let ((global-name (gensym (format nil "~a-" (name process)))))
        (remove-process-from process kell)
        (add-process (apply-restriction (name process)
                                        global-name
                                        (process process))
                     kell))))
  
  (defgeneric add-process (process kell)
    (:documentation "Pushes PROCESS onto the given KELL.")
    (:method (process kell)
      "Handles any other “primitive” processes (strings, numbers, etc.)"
      (declare (ignore process kell))
      (values))
    (:method ((process cons) (kell kell))
      (add-process (eval process) kell))
    (:method ((process restriction) (kell kell))
      (let ((global-name (gensym (format nil "~a-" (name process)))))
        (add-process (apply-restriction (name process) global-name (process process))
                     kell)))
    (:method ((process agent) (kell kell))
      (setf (process kell) (compose-processes process (process kell)))
      (activate-process process kell))
    (:method ((process parallel-composition) (kell kell))
      (map-parallel-composition (lambda (sub-process)
                                  (add-process sub-process kell))
                                process))
    (:method ((process kell) (kell kell))
      (if (gethash (name process) (kells kell))
          (error "Can't have two kells with the same name (~a) in the same kell."
                 (name process))
          (progn
            (call-next-method)
            (activate-process (process process) process)))))
  
  (defun get-cpu-count ()
    (princ "How many CPUs/cores are in your computer? ")
    (read))
  