Some rules can match the same set of inputs in different ways. For example, consider the
rule {{a, b}, {a, c}} -> {{b, c}}
starting with an initial condition {{1, 2}, {1, 3}}
. There are two possible ways
to match it: <|a -> 1, b -> 2, c -> 3|>
and <|a -> 1, b -> 3, c -> 2|>
. In this case, these matches yield different
results, {2, 3}
and {3, 2}
respectively:
In[] := WolframModel[{{a, b}, {a, c}} -> {{b, c}}, {{1, 2}, {1, 3}},
"EventSelectionFunction" ->
"MultiwaySpacelike"]["ExpressionsEventsGraph",
VertexLabels -> Automatic]
In the case above the outputs are different, however sometimes they are the same (more precisely, isomorphic):
In[] := WolframModel[{{a, b}, {a, c}} -> {{b, c}, {c, b}}, {{1, 2}, {1, 3}},
"EventSelectionFunction" ->
"MultiwaySpacelike"]["ExpressionsEventsGraph",
VertexLabels -> Automatic]
EventDeduplication
option can be used in a case like this to combine these two identical events into one:
In[] := WolframModel[{{a, b}, {a, c}} -> {{b, c}, {c, b}}, {{1, 2}, {1, 3}},
"EventSelectionFunction" -> "MultiwaySpacelike",
"EventDeduplication" -> "SameInputSetIsomorphicOutputs"]["ExpressionsEventsGraph",
VertexLabels -> Automatic]
The outputs of the rule need not be identical, but should be isomorphic with respect to renaming of new atoms:
In[] := WolframModel[{{a, b}, {a, c}} -> {{b, d}, {c, d}}, {{1, 2}, {1, 3}},
"EventSelectionFunction" -> "MultiwaySpacelike",
"EventDeduplication" -> "SameInputSetIsomorphicOutputs"]["ExpressionsEventsGraph",
VertexLabels -> Automatic]