            truncate-children? true
            take-n 1}}]
   (first (generate-all spec language-model)))
-
-(declare comp-path-to-complements)
 
 (defn lightning-bolts
   "Returns a lazy-sequence of all possible bolts given a spec, where a bolt is a tree


(def ^:const error-if-no-complements false)

(declare candidate-parents)
(declare do-defaults)
(declare find-comp-paths)
(declare get-lexemes)

  [spec model depth max-depth]
  (log/debug  (str "bolts-with-comps:" depth "/" max-depth ":" (strip-refs spec)))
  (map (fn [lb]
          (merge
           (let [comp-paths (find-comp-paths lb)]
             (zipmap comp-paths
                     (map (fn [path]
                            (filter not-fail? (comp-path-to-complements lb path model depth max-depth)))
                          comp-paths)))
           {[]
           (filter not-fail? [lb])}))
        (let [bolts
              (lightning-bolts model spec depth max-depth)]
          (if (empty? bolts)
            (do
              (log/debug (str "bolts-with-comps:" depth "/" max-depth ":" (strip-refs spec) ": no bolts found."))
              nil)
            (do
              (log/debug (str "bolts-with-comps:" depth "/" max-depth ":" (strip-refs spec) ": one or more bolts found."))
              bolts)))))

;; TODO: lightning-bolts should use this.
(defn get-lexemes [model spec]
