Go backward to Symbols.
Go up to Working memory (syntax).
Go forward to Goal contexts.

Objects and augmentations
-------------------------

 
An augmentation of an object is a list consisting of three symbols: an
{identifier}, an *attribute*, and a *value*, where the attribute is preceded
by an up-arrow (^$).  \cpindex{^}

(identifier ^attribute value)

Within an augmentation, the identifier must be an identifier.  The attribute
and value can be either identifiers or constants.  One restriction is that
neither the attribute nor the value can be the identifier of a goal.  Below
is an example of five augmentations that share the same identifier.

(O43 ^color red)
(O43 ^inside O53)
(O43 ^isa apple)
(O43 ^size small)
(O43 ^X44 200)


An object consists of all the augmentations (and the associated preferences)
that share a common identifier. The augmentations (and preferences) for an
object can also be represented in a single list that consists of an
identifier followed by an un-ordered set of attribute-value pairs, one pair
for each of the augmentations.  To distinguish attributes from values, all
attributes are preceded by an up-arrow (^$). A single attribute may be
followed by multiple values, each of which correspond to a separate
augmentation.  An attribute with multiple values is called a {multi-valued} attribute.
  These two styles of representation, individual
augmentations and an object followed by attribute-value pairs, are
equivalent.  Below is a template of an object as well as four example
objects. The first example object is the same as object O43 shown above.

(identifier ^attribute1 value1 ^attribute2 value2 value3
       ^attribute2 value4...)     

(O43 ^isa apple ^color red ^inside O53 ^size small ^X44 200)
(X44 ^unit grams ^property mass)
(O87 ^isa ball ^color red ^inside O53 ^size big)
(O53 ^isa box ^size large ^color orange ^contains O43 O87)

LINKS IN WORKING MEMORY When the value or attribute of an augmentation is the
identifier of an object, the identifier creates a one-way *link* from the
object with the augmentation, to the object with the identifier. For example,
object {X44} is linked to object O43 through (O43 ^$X44 200), and object O43
is linked to object O53 through (O53 ^$contains O43).  Links are transitive
so that X44 is linked to O53.  However, objects O43 and O87 are not linked
together even though they both have O53 as a value.  Links must involve an
augmentation that shares its identifier with the value on another object. All
elements of working memory must be linked directly (through a single
augmentation) or indirectly (through multiple augmentations) to the context
stack.