next up previous
Next: Roles Up: NeoClassic User's GuideVersion 1.0 Previous: Concepts


Individuals are specific instances of concepts. Just as in the case of concepts, individuals are divided into two realms: CLASSIC and HOST. CLASSIC individuals are used to represent the real-world objects of a domain, while HOST individuals are objects in the C++ language. For example, the CLASSIC individual Fred might be an instance of the primitive CLASSIC concept PERSON, while the HOST individuals 10000 and "Harry" would be instances of the HOST concepts NUMBER and STRING, respectively. HOST individuals cannot be created or modified, but they can be used in fills and oneOf descriptions.

When CLASSIC individuals are created, they are given a description. The language of operators for CLASSIC individual descriptions is identical to that for CLASSIC concept descriptions. In addition, by means of a function call, a role on an individual can be closed. This asserts that the currently known fillers of the role on the individual are provably all the fillers. Just like concepts, CLASSIC individuals are part of a knowledge base, and their description must not use concepts, roles, or individuals from other knowledge bases.

The function createIndividual  is used to create a CLASSIC individual.[*] The syntax is

where the symbol is the name of the individual being created, and the description is the definition of the individual. For example, to create the individual Mary as a PERSON, use:To create the individual Sam as a PERSON, both of whose parents are DOCTORS, and who has a brother Fred and at least 1 sister, say:

  There is one other thing that can be stated about an individual--that a particular role is closed, i.e., it can have no more fillers. For reasons beyond the scope of this guide[*], there is no close operator as part of the language, but instead, there is a function, closeRole , which is used for this purpose. Its syntax is

For example, if Sue is 80 years old, has child Joshua, and has no other children, create Sue as follows:and then call (closeRole  Sue child).

Explicitly closing a role is the only way a role can be closed. A role becomes full on an individual when the atMost restriction is reached by the number of fillers for the role, i.e., the role can hold no more fillers, but this is different from the role being closed. For example, if the age role is an attribute (with an implicit atMost restriction of 1--see Section 5), and Mary's age role is filled with 25, then the age role on Mary is full, because it can have no more fillers, but age is not closed on Mary.

  An open-world assumption is used in NEOCLASSIC. Unless information to the contrary is known or deducible, it is assumed that there may be more values associated with that role for the individual. This affects NEOCLASSIC's deductions in many ways.

If John has children Mary, Fred, and Sam, all of whom are LAWYERS, there is no way of knowing that all of John's children are LAWYERS unless it is possible to independently derive that John satisfies this description, or that John has no more children. For example, if there is a derivable description on John of at most 3 children, then NEOCLASSIC deduces that John has no more children (because he already has 3), and that his child role is full, and thus all restriction is satisfied.

By the same principle, suppose that John has friends Jack and Jill. There is no way of knowing that John has at most 2 friends unless it is possible to independently derive that John satisfies this description (either because the friend role had been closed for John, or because there was such an atMost restriction derivable on John).

next up previous
Next: Roles Up: NeoClassic User's GuideVersion 1.0 Previous: Concepts
Peter F. Patel-Schneider