anchor.diff:    (lower-bound (car (intervals mi))))
   (defmethod upper-bound ((mi multi-interval))
     (upper-bound (car (last (intervals mi)))))
  -(defmethod lower-bound-included-p ((mi multi-interval))
  -  (lower-bound-included-p (car (intervals mi))))
  -(defmethod upper-bound-included-p ((mi multi-interval))
  -  (upper-bound-included-p (car (last (intervals mi)))))
  -
  +
  +(defmethod element-member-p ((mi multi-interval) element)
  +  (some (rcurry #'element-member-p element) (intervals mi)))
  +
  +(defmethod next-element-in-set ((mi multi-interval) element)
  +  (iter (generate interval in (intervals mi))
  +        (when (<= element (upper-bound (next interval)))
  +            (if (< element (upper-bound interval))
  +                (return (next-element-in-set interval element))
  +                (return (lower-bound (next interval)))))))
  +
  +(defmethod previous-element-in-set ((mi multi-interval) element)
  +  (iter (generate interval in (reverse (intervals mi)))
  +        (when (<= (lower-bound (next interval)) element)
  +          (if (= element (lower-bound interval))
  +              (return (upper-bound (next interval)))
  +              (return (previous-element-in-set interval element))))))
   
   
   ;;; ------------------------------------
  
positive.code:                         :initform #'1-)
     (element-member-fn :initform #'(lambda (interval element)
                                      (and (integerp element)
                                           (< (lower-bound interval)
                                              element
                                              (1+ (upper-bound interval))))))))
  
  
  ;;; -------------------------------------
  
negative.code: 
  (defgeneric element-member-p (set element)
    (:documentation "Return T iff the element is in the set.")
    (:method (set element) (funcall (element-member-fn set) set element)))
  
  
  ;;; Interval Class definitions
  