A concept in NEOCLASSIC is a named description, possibly with some extra primitiveness information. A concept is part of a knowledge base, and its description must not use concepts, roles, or individuals from other knowledge bases. As descriptions come in both realms, CLASSIC and HOST, so do concepts.
When a concept is defined, a name, such as C, is associated with its defining description. For example, suppose that Vegetarian has been defined as ``something all of whose food is of type Plant'',
All HOST concepts are completely defined by the description associated with them, but CLASSIC concepts can be primitive, in that their definition includes something beyond the description associated with them. Such concepts are called primitive concepts, and other concepts are called defined concepts.
Suppose that a Vegetarian is defined as someone who eats only Plants, and a GreenPlantVegetarian is defined as someone who eats only green Plants. NEOCLASSIC will infer that GreenPlantVegetarian is a more specific concept than (is subsumed by) Vegetarian. Also, if an individual Fred is known to eat only Squash, and Squash is known to be a Plant, NEOCLASSIC will determine that Fred must be a Vegetarian.
Consider on the other hand, primitive concepts. If Mammal is defined as a primitive concept, no other concept will be deduced to be more specific than Mammal unless it directly or indirectly mentions Mammal as a superconcept. No other deductions can determine that a concept C is subsumed by Mammal.
For example, suppose the concepts Mammal and Invertebrate are defined as primitive concepts under Animal, and the concept Dog is defined as a primitive concept under Mammal. It is possible to deduce that Dog is subsumed by both Mammal (this was stated) and Animal (this was inherited), but there is no way to deduce that Dog is subsumed by Invertebrate.
Some primitive concepts have further, disjointness information associated with them in the form of a set of disjoint groupings. A disjoint primitive concept is just like a primitive concept, except that all disjoint primitive concepts that belong to the same disjoint grouping are known to be disjoint from each other. Thus, no individual can satisfy two disjoint primitive concepts in the same disjoint grouping.
The following example is depicted as a hierarchy in Figure 1, where the concepts within a given arc represent members of a disjoint grouping: Suppose the concepts Man and Woman are defined as disjoint primitive concepts under Person, in the gender disjoint grouping, and the concepts OldPerson and YoungPerson are defined as disjoint primitive concepts under Person, in the age disjoint grouping. This says that no individual can be both a Man and a Woman, and no individual can be both an OldPerson and a YoungPerson. However, there could be an individual that is both a Woman and a YoungPerson. Note that no exhaustiveness assumption is made when reasoning with disjoint primitive concepts (i.e., there could be individuals that are described by Person, but which are not described by either OldPerson or YoungPerson).
Concepts are created by means of the various forms of the function createConcept . In all cases the concept is not created if the name of the new concept is already in use as the name of a concept or if the definition of the concept is incoherent.
(createConcept Symbol HostDescription)
To create a defined CLASSIC concept use:
(createConcept Symbol ClassicDescription)
For example, to define a Vegetarian as a Person who eats only Plants use:
(createConcept Vegetarian (and Person (all food Plant)))
(createConcept Symbol Classic Description true)
To define Mammal as a primitive concept under Animal use:
(createConcept Symbol ClassicDescription Symbol+)
The following example defines the disjoint primitive concepts Man and Woman under Person in the gender disjoint grouping, and OldPerson and YoungPerson under Person in the age disjoint grouping:
(createConcept Man Person gender) (createConcept Woman Person gender) (createConcept OldPerson Person age) (createConcept YoungPerson Person age)
Each knowledge base in NEOCLASSIC comes with a number of built-in concepts.
The concept Thing has as its definition a universal description. All descriptions are subsumed by Thing. The concept ClassicThing (also named classic-thing) has as its definition the most-general CLASSIC description. The concept HostThing (also named host-thing) has as its definition the most-general HOST description. All CLASSIC individuals are instances of ClassicThing, and all HOST individuals are instances of HostThing.
There are four built-in concepts under HostThing in NEOCLASSIC. They are Number, Integer, Float, and String. The definitions of these concepts are built-in host test descriptions that recognize numbers, integers, floats, and strings, respectively.