 
 ;; TODO: sa options...
 (defn implicit-dash-a*
-  [henv & {gather :gather d :d   s :s    choice-fn :choice-fn local? :local?  dir :dir :as m
-      :or {gather true   d true s :eager choice-fn last       local? true     dir :right}}]
-  (assert (every? #{:gather :d :s :choice-fn :local? :dir} (keys m)))
+  [henv & {gather :gather d :d   s :s    choice-fn :choice-fn local? :local?  dir :dir   prop :prop :as m
+      :or {gather true   d true s :eager choice-fn last       local? true     dir :right prop true}}]
+  (assert (every? #{:gather :d :s :choice-fn :local? :dir :prop} (keys m)))
   (assert (contains? #{:left :right} dir))
   (assert (contains? #{nil false :eager :deliberate} s))
   (when s (assert d))

   (util/print-debug 2 "AC" sp child-sp)
   (when (canonical? sp)
     (schedule-subsumption! (sp-ts sp) (sp-ts child-sp))
     (publish! all-child-ps child-sp)
     (when *propagate-subusmption* #_ ::TODO) ;; TODO!!
     )   
   (if (and (get-output-set sp) (get-output-set child-sp))
    (publish-sp-child! sp child-sp)
    (do (summaries/connect! sp (sp-ts child-sp)) 

                                  Updates cost if up? and child must be held before publishing.")

  (publish-sp-child!   [s o] "Internal. O is a subproblem with output.  s must have output too.")
  (add-all-child-watcher! [s w] "Internal.  Get children, including unpublished ones.")

  (subsuming-sps       [s] "subproblems with same name, >= inp-set") 
  (add-subsuming-sp!   [s subsuming-sp]) 
