    :else (if (empty? x)
            [0 0]
            (let [elt (first x)]
-             [(rest x) elt]))))
+             [(remove #(equality-check % elt) (rest x)) elt]))))
 
 (defn is-empty-set [x]
   (cond

  (if (empty? xs) ()
      (let [n (or n 1)
            choices (map choice (take n xs))]
        (concat (map second choices)
                (stagger (concat (remove is-empty-set (map first choices))
                                 (drop n xs))
                         (inc n))))))

(defn staggered-union [xs]
  (lazy-seq

      x
      (if (has-definite-size? x)
        (format "{%s}" (clj-string/join ", " (map #(set-to-string % true) x)))
        (format "{%s, ...}" (clj-string/join "," (map #(set-to-string % true)
                                                      (take 16 (distinct x)))))))
    (let [s (if (number? x) (into #{} (range x)) x)]
      (apply str (concat '("{") (map #(set-to-string % false) s) '("}"))))))

