CardWorld2 design notes

Generalizing the finding of referents:

1. Need to allow for mixed referent types -- e.g. "Turn over this card and that pile"; 
   thus need to keep track of object types dynamically.

2. Need to accept a referent as container for another referent: -- e.g. "turn over all the cards in that pile"

3. Need to accept a referent as member or part of a desired referent -- e.g. "turn over the pile that has/contains this card"

4. Anaphoric reference may need to use grammatical number or quantity to resolve ambiguities
   -- e.g. "turn over all the cards in that pile" "now stack it"
      versus "turn over all the cards in that pile" "now turn them face up"
      
5. Complement referents can be with respect to a container or other local setting as well as with respect to the global setting
      
6. Need to remember relationships between recent referents -- e.g. member<->container, set<->complement

7. Settings can be nested -- e.g. "the first of the red cards in this pile"

So we have

   global setting -- local setting -- referent

and the next reference can be with respect to 
   (1) the global setting, 
   (2) the local setting (e.g. as a complement of the referent), or 
   (3) the referent used as a new local setting
   
The global setting consists of all the identifiable objects and their types (e.g. cards and piles).

A local setting or a referent consists of some set of identifiable objects and their types taken from the global setting.

In the global setting, some objects may be permanent (e.g. cards, collection of all cards in a suit) 
and others temporary (e.g. piles, hands).  
Also, some objects may be observable, while others may be remembered but not currently observable.
The set of observable objects can change, as can the set of temporary ones.
