We can start to model the knowledge of a domain describing (the models of) the concepts existing in that domain. This is the role of concept descriptions in Noos. The concepts described can be concrete (like a patient) or abstract (like a syndrome, or a prototypic patient). We will introduce concept descriptions syntax from simple to more complex--the syntax used in this chapter is summarized in BNF at the end of the chapter in § 2.7 and the complete syntax in in Appendix A.
A description is a list composed of the define token, a name (identifier), and some slots. A slot is a list with a feature name and a value. The value can be simply a name of a description defined elsewhere. The overall concept we are defining is called the root of the description. A description of root A with feature names X and Y and values V and W looks like this: (define A (X V) ...(Y W)). Since Noos evaluation is lazy (also called non-strict or on-demand) you may (while constructing a description with define) refer by name to a description not yet defined without causing an error. The following Example 2.1 is an example of three concept descriptions.
Names of concept descriptions are symbols, and there is no difference on the case of the letters used. For instance, Nick, nick, NICK and nICK are all valid and equivalent. Descriptions can be defined 1) in a file and then the file is to be loaded into the Noos environment or 2) by directly typing them on the Noos listener. If we type Nick's description on the listener the returned value is <Nick>, which is the ``print-name'' of the description--and not the identifier symbol. See Chapter 8 for more details on the Noos environment.
The feature name is a name for a relation between
concepts. In the example above, father, mother and children
are such relations linking concepts John, Nick, and Mary.
In a sense, descriptions are a way to group together--to
modularize--relations. The common syntax to write relations is with a
predicate name, as in father(x, y) or father(John, Nick). A
description groups together all the relations that have as first parameter
a specific concept. In the case of John the description assembles
father(John, Nick) and mother(John, Mary). The usual way to describe
relations is as tables, as shown below. The predicate representation syntax
mirrors this tabular representation, since for every row of a relation R there
is a corresponding term R(X, Y).
In fact, mother and father are an special kind of relations--binary
relations with unique image (many-to-one mapping). These relations are called
functions and the usual mathematical syntax
for them is . John's description can be more accurately
described as assembling those function names whose domain is John,
i. e.
and
. In the knowledge
representation literature, this kind of relations grouped together in
``frames'' have been called features.
Summarizing, a description
clusters together (as slots) the features
in which
is involved as domain (if we think in terms of functions)
or as first parameter (if we think in terms of relations).
However, there is a small complication clearly in view: children is a
relation but is not a function--children has not a unique image
since there may be more than one concept being the children of somebody.
This issue can be solved by representing binary relations as functions over
sets--i. e. representing R(x, y) by .
Because of this, Noos allows slots where the feature value is a set.
The syntax for feature set values is the enumeration of references--as
in the example that follows where
.
So far for binary relations, but what about representing n-ary relations?
Bluntly put, descriptions are n-ary relations. In relational
representation persons can be defined as relations, for instance
person(father,mother,spouse,children) can be a model of ``person''. The
names of variables are immaterial since only the arity and the position for
each argument is important--thus is exactly
the same relation (it is a syntactic variant). In descriptions,
however, names are important since a description can be seen as a n-ary
relation where arguments are given by name instead of by
position
. The person relation above would be a
description as the following one (where any stands for any value, as
will be explained later).
However, it is not clear how we could represent John in such a
relational representation as . If we try we try
to represent John as
we have problems--it is
not a complete instantiation. This is because an important property of
feature terms and descriptions: they can convey partial
information. In the case of John the description conveys information
about fathers and mothers, but not about spouses, children, or other facts
of persons like profession or birthdate. Certainly, using relational
representation we can represent partial information: we have to crack the
n-ary relation into smaller (maybe binary) relations. For instance using
predicates like person(x), father(x,y), spouse(x,z), etc. However,
this is not the point here, since we were merely interested in justifying
intuitively the capability of having n-ary relations--and the advantage of
representing partial information.