         pre-1      (:pre G-1)]
     (doseq [v base-set-1,
             r R,
-            :when (seq (.get remove [v r]))] ;i.e. (not (empty? (.get remove [v r])))
+            :when (not-empty (.get remove [v r]))]
       (.add non-empty-removes [v r]))
     (while-let [[v r] (first non-empty-removes)]
       (doseq [w (.get remove [v r]),

(defn- HashMap->hash-map
  "Converts a Java HashMap to a Clojure hash-map."
  [^HashMap map]
  (reduce (fn [map, ^java.util.Map$Entry entry]
            (conj map [(.getKey entry) (.getValue entry)]))
          {}
          (.entrySet map)))

(defmacro- while-let
  "Runs body with binding in effect as long as x is non-nil.

        labels      (vertex-labels description-graph),
        neighbours  (neighbours description-graph),

        definitions (map-by-fn (fn [A]
                                 (make-dl-definition
                                  A
                                  (make-dl-expression language
                                                      (list* 'and
                                                             (concat (labels A)
                                                                     (for [[r B] (neighbours A)]
                                                                       (list 'exists r B)))))))
                               (vertices description-graph))]
    (make-tbox language definitions)))

(defn model->description-graph
