#2. Actions in the net. All actions in the net supported by this system are local and usually refer to some vertex that must be specified in advance. Actions that do not change the net are:

walking along an arc -- for a given node or atom the attribute with the given name is sought for (fails if there is no such attribute);

testing for presence of an unnamed arc leading from a given node or atom to a given vertex (testing an element for membership in a set);

enumerating all vertices to which unnamed arcs from a given node or atom lead (a loop for all elements of some set).

The operation of finding the value of an attribute in some special cases can return a result even in the absence of the arc (virtual attribute, see #6).

The following primitives for changing the net are provided:

creating a new node;

drawing a named arc, i.e., assigning to a node or an atom an attribute with a specified name and value (the case when there is already an attribute of the same name is considered later on);

deleting a named arc (the attribute with the given name of a node or an atom is deleted, if there is any);

drawing an unnamed arc from a given node or atom to a given vertex (adding a new element to a set);

deleting all unnamed arcs leading from a given node or atom to a given vertex (removing an element from a set);

merging two vertices (can fail).

Consider the last operation in more detail. Merging two vertices is interpreted as a conclusion that two objects, that used to be regarded separately, are actually one same object. Vertices other than nodes have an individuality and therefore cannot be merged with anything but themselves. For any two nodes merging is allowed in principle, and in this case all arcs that used to enter one of the two nodes are made to enter the new "merged" node, and all arcs that used to issue from one of the two nodes are made to issue from the new node. However special attention should be paid to the case when this results in the new node receiving two attributes with identical names, which should never happen.

We call a conflict of attributes an attempt to a sign to a node or atom two identically named attributes. An attribute conflict can arise not only at merging but also at assigning new attribute if there already is an attribute with the same name. (The implementation does not cater for conflicts arising from merging the names of two existing attributes, but this could happen only if the names were nodes rather than atoms or integers; using nodes as names is not forbidden but it is not recommended). A "peaceful" solution of a conflict is merging the values of the attributes in question, and then the two attributes become identical (of course, only one of the two arcs is preserved in the net). But if the values cannot be merged (e.g., because the values are two distinct atoms) one of the two attributes has to be dropped (the rules to determine which of the attributes is preserved are discussed below). For assignment of new attribute the usual result is setting the new value instead of the old one. A special mode can be specified for attribute assignment or node merging in which impossibility of the "peaceful" solution of a conflict is regarded as failure of the whole operation (see #7).

Note that consequences of merging (as well as of attribute assignment) can spread over the net because every merger can result in several further mergers.

In applications node merging turns out to be a powerful instrument for collecting information by means of merging data obtained from various sources. This operation is also a basis for some more advanced logical facilities of the system.

Some operations are also provided to handle special objects attached to vertices. These operations depend on the nature of the objects. E.g., there may be arithmetics on integers or calls to procedures.