  Many applications of graph transformation require rules that change a graph
without introducing new consistency violations. When designing such rules, it
is natural to think about the desired outcome state, i.e., the desired effect,
rather than the specific steps required to achieve it; these steps may vary
depending on the specific rule-application context. Existing
graph-transformation approaches either require a separate rule to be written
for every possible application context or lack the ability to constrain the
maximal change that a rule will create. We introduce effect-oriented graph
transformation, shifting the semantics of a rule from specifying actions to
representing the desired effect. A single effect-oriented rule can encode a
large number of induced classic rules. Which of the potential actions is
executed depends on the application context; ultimately, all ways lead to Rome.
If a graph element to be deleted (created) by a potential action is already
absent (present), this action need not be performed because the desired outcome
is already present. We formally define effect-oriented graph transformation,
show how matches can be computed without explicitly enumerating all induced
classic rules, and report on a prototypical implementation of effect-oriented
graph transformation in Henshin.
