   (if (> i 1) (replicate-str (str s s) (/ i 2)) s))
 
 (defn draw-ascii
+  "Given coordinates in the form `[[e1 [x1 y1]] [e2 [x2 y2]] ...]`, prints
+  the elements in the console."
   [coords]
   (let [x-step 2
         size (count coords)

                                  ;(println C " <-- C ; new -->" (sat-reduction I))
                                  (union C (map reverse (sat-reduction I))))))
                 (let [C @CAtom
                       <=CNew (compute-conjugate-order (transitive-edge-union P <= C))]
                   ;(println "C: " C)
                   ;(println "C size: " (count C))
                   ;(println "<=CNew: " <=CNew)
                   (reset! <=CAtom
                           <=CNew)))
               @<=CAtom)
         <=1 (map edge->vec (lg/edges (transitive-edge-union P <= <=C)))
         <=2 (map edge->vec (lg/edges (transitive-edge-union P <= (map reverse <=C))))
         elements-less (fn [le elem] (- (count (filter #(some #{[% elem]} le) P)) 1))
         coords (map #(let
                        [x1 (elements-less <=1 %) x2 (elements-less <=2 %)]
                        [% [x1 x2]]) P)]
     coords)))

(defn dim-draw-layout
  "Returns a layout for a given lattice.



(defn is-compatible
  "Checks if two edges are compatible.

  For an ordering given as graph and two edges e1 and e2 this means that the
  transitive closure of the graph with both edges added does not contain a
  (non-trivial) cycle."
  [digraph e1 e2]
  (let [tc (transitive-closure
             (uber/add-directed-edges digraph e1 e2))]
