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

Preferences
-----------

Preferences determine the contents of working memory.  Preferences are
created by productions and assert the relative or absolute worth of a
specific value for an augmentation. The preferences for a given identifier
and attribute are analyzed to determine the value (or values) for the
augmentation in working memory.  The details of the semantics of preferences
and how they are processed are described in Section See Preference memory
on page See Preference memory.

A preference is a list, where the first three elements correspond to the
identifier, attribute and value of an augmentation.  In a preference, the
value is followed by a fourth symbol which is called the *preference type.*
It provides a relative or absolute rating of the worth of the value for that
augmentation.  If the preference type is a relative rating comparing the
value to some other object, the identifier of that object is the fifth symbol
in the preference.  Below is an example preference that object O5 is better
than O4 as the operator for goal G1.

(G1 ^operator O5 > O4)

Below are the 13 possible types of preferences as they would appear for an
augmentation with identifier G1, attribute operator, and value O33 (and O34).

(G1 ^operator O33 +)      acceptable 

(G1 ^operator O33 !)      require
(G1 ^operator O33 ~)      prohibit
(G1 ^operator O33 -)      reject
(G1 ^operator O33 > O34)  better
(G1 ^operator O33 < O34)  worse
(G1 ^operator O33 >)      best 
(G1 ^operator O33 <)      worst
(G1 ^operator O33 =)      unary indifferent 
(G1 ^operator O33 = O34)  binary indifferent
(G1 ^operator O33 &)      unary parallel
(G1 ^operator O33 & O34)  binary parallel 
(G1 ^operator O33 @)      reconsider

For non-context augmentations, the preferences that will be used most often
are acceptable, reject, and parallel.  An acceptable preference is used to
suggest and create an augmentation (assuming no other preferences); a
parallel preference is used to specify that multiple values for an attribute
are allowed; and a reject preference is used to remove existing values.

{syntax} In the action-side of a production, more than one value and
associated preference for an attribute at a time.  Ambiguity can arise when
using a preference that can be either binary or unary: > < = &.  The default
assumption is that if a value follows the preference, then it is binary.  It
will be unary if an up-arrow, a closing parenthesis, or a comma follows it.
To allow for more concise actions, multiple preferences types that are for
the same value can be listed following the value, separated by commas. Below
are four examples of legal, although unrealistic, actions that have the same
effect.

(<s> ^ontop <on1> <on2> + &, <on2> < <on1> <on3> =, <on4>)
(<s> ^ontop <on1> + <on2> + <on2> &, 
            <on2> < <on1> <on3> =, <on4> +)
(<s> ^ontop <on1> <on2> <on2> &, <on2> < <on1> <on4> <on3> =)
(<s> ^ontop <on1> ^ontop <on2> <on2> &
           ^ontop <on2> < <on1> ^ontop <on4> <on3> =)