    :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

        coll' (take limit coll)]
    (map #(normalize (select-by-bits % coll')) (range 0 (bit-shift-left 1 (count coll'))))))

(def large-set-cutoff 100000)

(defn shrink-if-possible [x]
  (cond (number? x) x
        (set?    x) x
        :else (let [z (take (inc large-set-cutoff) x)]

      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) '("}"))))))

