 ;; 2) called with both a child1 and a child2, but child2's supplied value is nil:
 ;;    should be treated the same as empty list.
 (defn over [parents child1 & [child2]]
+  (log/trace (str "over:" (count parents)))
   (cond (vector? child1)
         (over parents (seq child1) child2)
 

   (fail? (unifyc (get-in parent [:head :synsem :subcat :2] :top)
                  (get-in child [:synsem :subcat :2] :top)))))

(defn comp-pre-checks [parent child]
  (or
   (fail? (unifyc (get-in parent [:comp :synsem :cat] :top)

                               (if (= (:first parent) :head)
                                 child2 child1)))
               (over (rest parents) child1 child2)))))))
