     (cond
       (= input :top) input
       true
-      (let [activity (if (= (get-in input '(:activity))
-                            true)
-                       {:animate false
-                        :artifact false
-                        :consumable false
-                        :part-of-human-body false})
-            animate (if (= (get-in input '(:animate))
-                           true)
-                      {:activity false
-                       :artifact false
-                       :mass false
-                       :furniture false
-                       :physical-object true
-                       :part-of-human-body false
-                       :drinkable false
-                       :speakable false
-                       :place false}{})
-            artifact (if (= (get-in input '(:artifact))
-                            true)
-                       {:animate false
-                        :activity false
-                        :physical-object true}{})
-
-            buyable (if (= (get-in input '(:buyable))
-                           true)
-                      {:human false
-                       :part-of-human-body false})
-
-            city (if (= (get-in input '(:city))
-                        true)
-                   {:place true
-                    :human false
-                    :animate false
-                    :legible false})
+      (let [activity (get-encyc input :activity)
+            animate  (get-encyc input :animate)
+            artifact (get-encyc input :artifact)
+            buyable  (get-encyc input :buyable)
+            city     (get-encyc input :city)
 
             clothing (if (= (get-in input '(:clothing))
                             true)


(def encyc
  {
   {:pred :house} {:artifact true
                   :buyable true
                   :place true}

   {:animate true} {:living true}

   {:human true} {:animate true}


  "null sem-impl: simply return input."
  (log/trace (str "null-sem-impl:" (strip-refs input)))
  input)

(defn get-encyc [input k]
  (get encyc {k (get-in input [k])} {}))

(defn sem-impl [input & [original-input]]
  "expand input feature structures with semantic (really cultural) implicatures, e.g., if human, then not buyable or edible"
  (let [original-input (if original-input original-input
