Checks whether the reaction has no cross-molecule guard conditions, that is, conditions that cannot be factorized as conjunctions of conditions that each constrain individual molecules.
Checks whether the reaction has no cross-molecule guard conditions, that is, conditions that cannot be factorized as conjunctions of conditions that each constrain individual molecules.
For example, go { case a(x) + b(y) if x > y => }
has a cross-molecule guard condition,
whereas go { case a(x) + b(y) if x > 1 && y < 2 => }
has no cross-molecule guard conditions because its guard condition
can be split into a conjunction of guard conditions that each constrain the value of one molecule.
true
if the reaction has no guard condition, or if it has guard conditions that can be split between molecules;
false
if the reaction has at least one cross-molecule guard condition.
Calls a reaction's static guard to check whether the reaction is permitted to start, before examining any molecule values.
Calls a reaction's static guard to check whether the reaction is permitted to start, before examining any molecule values.
A static guard is a reaction guard that does not depend on molecule values.
For example, go { case a(x) if n > 0 && x < n => ...}
contains a static guard n > 0
and a non-static guard x < n
.
A static guard could depend on mutable global values, such as n
, and so it is evaluated each time.
Note that the static guard could be evaluated even if the reaction site does not have enough input molecules for the reaction to start. Avoid putting side effects into the static guard!
true
if the reaction's static guard returns true
or is absent.
false
if the reaction has a static guard, and if the guard returns false
.
Indicates that a guard was initially absent and, in addition, all molecules have trivial matchers - this reaction can start with any molecule values.