                          (.set-lo solver var (aget new-los i))
                          (if (identical? (aget new-los i) (aget his var))
                            (recur (+ i 1))
-                           (.set-watch solver constraint var true)))))))))
+                           (.set-watch solver var constraint true)))))))))
   (split-left [this solver constraint]
               ;; fix the value of the first non-fixed var
              (let [los (.-los solver)

      _ (.assoc! tree2 #js ["d" "c"] 0)
      _ (.assoc! tree2 #js ["b" "d"] 0)
      s (solver 4
                #js [(contains (iterator tree1))
                     (contains (iterator tree2))
                     (equal)]
                #js [#js [0 1]
                     #js [2 3]
                     #js [1 3]])
      ]
  [(.next s) (.next s) (.next s) (.next s) (.next s)]
  )

 )

      _ (.assoc! tree2 #js ["d" "c"] 0)
      _ (.assoc! tree2 #js ["b" "d"] 0)
      s (solver 4
                #js [(contains (iterator tree1) #js [0 1])
                     (contains (iterator tree2) #js [2 3])
                     (function identity 1 #js [3])])
      ]
    (.reset s)
  (take 100 (take-while identity (repeatedly #(.next s))))
  )

  (let [tree1 (tree 10)
