Next: Checked calls to external
Up: Predicates in rules
Previous: All-quantified predicates
If a predicate is preceeded by a NOT, it is negated.
Then the generated code tests that no edge between the two variables
of the predicate exists, and skips all combinations of nodes which are
linked by a corresponding edge.
Negation is allowed in the following contexts:
- In rule tests if predicates are used that are graph functor
instantiations. Negation can only be performed if a universe is
known against the completion of a set of nodes is performed. This is
the case only for graph functors, in which the set of graph nodes
represents this universe.
Negation is performed by a loop over the universe, skipping those
nodes which are the neighbor set of the predicate.
- In rule tests for bitset predicates. They also have a universe
which consists of all nodes the bits refer to. Negation is
performed by a bitset complement.
- In rule transformations. Then in the code an edge
of the denoted graph is deleted, not added.
Uwe Assmann
1998-12-22