The built-in knowledge-base sets up the top level of the taxonomy as well as several basic slots. The current built-in knowledge-base is a rather odd collection of sets, slots and rules which we have found useful in our examples, however, we hope to eventually expanded it into a true ontology for common-sense reasoning.
The following conventions have been used in naming frames and slots:
The taxonomy is set up as follows:
(:taxonomy (things (objects (sets things objects sets slots partitions (partitions main-partition set-partition slot-info-partition partition-partition)) (booleans true false) (physical-attributes (colors) (genders male female)) (physical-objects (people)) (contexts global-context)) (slots (order-relations (tc-order-relations (equivalence-relations))))))
Every frame in the knowledge-base is a member of the set things which breaks down into the sets objects and slots, and so on. In the knowledge-base, the taxonomy is represented using isa and superset relations (and their inverses member and subset ). isa links an object to a set of which it is a member, and superset links a set to a superset of it (thus member links a set to one of its members, and subset links a set to one of its subsets).
A basic design decision in building large taxonomies is whether to link an object in the taxonomy to every set it is a member of, to link it to just the `lowest' set in the taxonomy it is a member of (and then link this set up to the sets higher up in the taxonomy using superset links), or to link it to some of the sets it is a member of. We have chosen to take the third course, and link objects to just the ``important'' sets they are a member of. This distinction is represented using the relations superset and imp-superset. Intuitively, imp-superset links a set to an `important' superset. Operationally this means that if Algernon learns that an object, x is a member of a set s, and s has an important superset S, then Algernon immediately adds an isa link between x and S.
The slot declarations for the important slots defined in the built-in knowledge-base are given below:
(:slot isa (things sets) :partition main-partition :comment "(isa ?x ?s) = ?x is a member of the set ?s.") (:slot member (sets things) :partition set-partition :backlink isa :comment "(member ?s ?x) = A member of ?s is ?x.") (:slot subset (sets sets) :partition set-partition :comment "(subset ?s1 ?s2) = A subset of ?s1 is ?s2.") (:slot superset (sets sets) :partition set-partition :inverse subset :comment "(superset ?s1 ?s2) = A superset of ?s1 is ?s2.") (:slot superset (sets sets) :partition set-partition :inverse subset :comment "(superset ?s1 ?s2) = A superset of ?s1 is ?s2.") (:slot selfset (things sets) :cardinality 1 :backlink member :comment "The selfset of x is the set consisting exactly of {x}.") (:slot less (objects objects) :comment "(less ?x ?y) = ?x less than ?y.") (:slot greater (objects objects) :inverse less :comment "(greater ?x ?y) = ?x greater than ?y.") (:slot equal (objects objects) :inverse equal :comment "(equal ?x ?y) = ?x is equal to ?y.") (:slot least (objects sets) :comment "(least ?x ?s) = ?x is the least member of ?s.") (:slot greatest (objects sets) :comment "(greatest ?x ?s) = ?x is the greatest member of ?s.") (:slot color (physical-objects colors) :cardinality 1 :comment "(color x c) = The color of x is c.") (:slot gender (physical-objects genders) :cardinality 1 :comment "(gender x g) = The gender of x is g.") (:slot temperature (physical-objects nil) :cardinality 1 :comment "(temperature x temp) = The temperature of x is temp.") (:slot spouse (people people) :cardinality 1 :backlink spouse :comment "(spouse a b) = The spouse of a is b.") (:slot wife (people people) :cardinality 1 :backlink spouse :comment "(wife a b) = The wife of a is b.") (:slot husband (people people) :cardinality 1 :inverse wife :comment "(husband a b) = The husband of a is b.") (:slot friend (people people) :comment "(friend a b) = A friend of a is b.") (:slot current-context (contexts contexts) :cardinality 1 :backlink super-context :comment "(current-context c1 c2) = The current sub-context of c1 is c2.") (:slot speaker (contexts people) :cardinality 1 :comment "(speaker c s) = The speaker in c is s.") (:slot recent (contexts objects) :comment "(recent c r) = A recently mentioned thing in c is r.")