         all (:result (add-query! g :all [nil nil nil]))
         num-projects (add-counter! g projects)
         num-types (add-counter! g types)
-        inf1 (add-rule! g :knows [nil 'knows nil] (fn [[s p o]] [[s 'type 'person] [o 'type 'person] [o 'knows s]]))
+        inf1 (add-rule! g :symmetric '[[?a ?prop ?b] [?prop type symmetric-prop]]
+                        (fn [{:syms [?a ?prop ?b]}] [[?b ?prop ?a]]))
+        inf2 (add-rule! g :domain '[[?a ?prop nil] [?prop domain ?d]]
+                        (fn [{:syms [?a ?prop ?d]}] [[?a 'type ?d]]))
         pq (:qvar-result (add-param-query! g :pq '[?s knows ?o]))
         jq (:qvar-result (add-join-query! g '[[?p author ?prj] [?prj type project] [?p type person]]))
         ctx (f/async-context {:graph g :processor f/eager-vertex-processor :timeout nil})]

     #(add-triple! g %)
     '[[toxi author fabric]
       [fabric type project]
       [toxi type person]])
    ;;(debug :inf-vertices (get-in inf1 [:query :result :id]) (get-in inf1 [:inf :id]))
    {:g        g
     :ctx      ctx

    [_ id] (when-let [q (@queries id)] @@(:res q)))
  (add-rule!
    [_ id query production]
    (let [q   (add-join-query! _ query)
          inf (f/add-vertex!
               g {:val #{}
                  ::f/collect-fn (collect-inference _ production)})]
      (f/add-edge! g (:qvar-result q) inf f/signal-forward nil)
      {:query q :inf inf}))
  )

