Plural provides a seamless extension of Noos to support distributed scoping and reference for all the basic Noos constructs. An agent in Plural is a particular Noos application with a network address, and the acquaintances of an agent are those agents with addresses known to it - as in the actors model. The CBR cooperation modes use three Plural Noos capabilities: network references, remote evaluation, and mobile methods. Using Plural Noos, arbitrary Noos descriptions (of entities and methods) can be transmitted over the network from one agent to another. In particular, cases and CBR methods can be transmitted from a CBR agent to another.
Network references extend Noos references to agents over the net. Syntactically, a reference to a feature in an agent-i like (>> feature of entity) once transmitted to a new agent agent-j becomes a network reference equivalent to (>> feature of entity at agent-i) in agent-j; and an identifier of an entity in agent-i like entity55, once transmitted to a new agent, becomes a network reference like entity55@agent-i in agent-j. Network references are transmitted over the network: if entity55@agent-i is a value of the feature my-friend of entity99 in agent-j and a new agent has the reference (>> my-friend of entity99 at agent-j), it will get the original network reference entity55@agent-i. Network references avoid the problem of maintaining state when objects with state are copied over the network. State is local to agents, and when a description is referenced by another agent, a network reference is transmitted.
If we view a Noos description as a labeled graph, transmission of a description starts at a selected node (for example, the root in Figure 1) and ``copies'' the graph to the destination as follows: if a graph node is a constant, (like a number or a string) a fresh copy is produced. Otherwise a network reference to that node is created. Since Noos performs lazy evaluation, not all the nodes in a graph are transmitted when the root is referenced, but only those needed by remote references. Path equality (sharing) and circularities in the graph are preserved.
Remote evaluation allows an agent to use a method owned by another agent - as in remote procedure call (RPC). Specifically, remote evaluation allows an agent agent-i to ask another agent agent-j to execute a specific method method-k@agent-j for a given problem-n of agent-i, as in the expression (noos-eval (method-k@agent-j problem-n) at agent-j). In this process, agent-j receives the network reference problem-n@agent-i and applies method-k to it. During evaluation, further references in agent-j to features of problem-n@agent-i are interpreted as network references that automatically lead to communication to agent-i asking for the value of that feature. Agent-i is responsible for inferring that value and transmitting its network reference to agent-j.
For some cooperation modes it is necessary to support so-called mobile code or migrating programs. Mobile methods are supported by Plural Noos through the capability for transmitting method descriptions. A mobile method description is first defined in an originating agent agent-i. Then, the Plural Noos construct jump can be used to bind the mobile method with the appropriate references and to instantiate the method at the destination agent.
When a method jumps to a remote agent, the whole task/method decomposition of the mobile method is ``copied'' in the following sense: the name of the built-in of which the method is a refinement is transmitted, as well as its subtasks. Recursively, the methods defined in the originating agent for those subtasks are also ``copied''. The references of the mobile method in the originating agent are transformed to network references as explained previously.