     (dotimes [_ 2] (evaluate! root-stub))
     (get-stub-output! root-stub)))
 
-(defn implicit-fah-a*-eval2 [henv]
-  (binding [summaries/*cache-method* :eager
-            *decompose-cache* (when *decompose-cache* (HashMap.))]
+(defn implicit-fah-a*-eval2 [henv & {gather :gather d :d s :s c :cache
+                                     :or {gather true s :eager d true c :eager}}]
+  (assert (contains? #{nil false :eager :deliberate} s))
+  (when s (assert d))
+  (when d (assert gather)) 
+  (assert (contains? #{:lazy :eager} c))
+  (binding [*no-identical-nonterminal-outputs* gather
+            *decompose-cache* (when d (HashMap.))
+            *state-abstraction* s
+            summaries/*cache-method* c]
     (summaries/solve
      (tree-summarizer (apply get-root-subproblem (fs/make-init-pair henv)))
      #(evaluate! (last (filter can-evaluate? %)))


(def *no-identical-nonterminal-outputs* true)
(def *decompose-cache*       true) ;; nil for none, or bind to hashmap
(def *state-abstraction*     :eager #_ :deliberate) ;; Or lazy or nil.

(assert (contains? #{nil :eager :deliberate} *state-abstraction*))
(when *state-abstraction* (assert *decompose-cache*))
(when *decompose-cache* (assert *no-identical-nonterminal-outputs*)) 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;       Utilities      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; TODO: garbage collect dead stuff
;; TODO: improve top-down propagation of bounds
;; TODO: better subusmption.

;; --> TODO: add options to search alg.

;; TODO: why doesn't subsumption help (at all?)
;; Note: subsumption edges don't help AT ALL, under seemingly any settings
