SMS is great. Please convince my $MegaCorp to use this instead of the god-awful 90s attempt at flights.google.com they're using right now... god speed!
{3Eve, 1Alice, 1Bob} ~> {3Eve, 1AliceBob} ~> {3Eve, 1Alice, 1Bob}
is often not necessarily equivalent to simply staying in state {3Eve, 1Alice, 1Bob}. This is especially true in physical systems (including chemical reactions). Eve + AliceBob → Alice + Bob + Eve
Alice + Bob → AliceBob
AliceBob + Eve → WEIRDNESS
With some probability (which the docs don't specify) we might now observe the following transition: {3Eve, 1Alice, 1Bob} ~> {3Eve, 1AliceBob} ~> {2Eve, WEIRDNESS}
with no way to get back to {3Eve, 1Alice, 1Bob} :-( Alice + Bob -> AliceBob
but if you want to insist there are no Eves for this rule to hold, then you write: assert(0Eve);
Alice + Bob -> AliceBob
in which case there must be 0 Evens in order for the Alicebob transition to happen.