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.")