A SynchronizationConstraint describes how tightly the occurrences of a group of events follow each other.<br/><br/>This form of synchronization only takes the width and completeness of each occurrence cluster into account; it does not care whether some events occur multiple times within a cluster or whether some clusters overlap and share occurrences. In particular, event occurrences are not partitioned into clusters according to their role or what has caused them. Stray occurrences of single events are not allowed, though, since these would just count as incomplete clusters according to this constraint.<br/><br/>Semantics:<br/>A system behavior satisfies a SynchronizationConstraint c if and only if<br/>there is a set of times X such that for each c.event index i, the same system behavior concurrently satisfies<br/><br/>DelayConstraint { source = X,<br/>target = c.event(i),<br/>lower = 0,<br/>upper = c.tolerance }<br/><br/>and<br/><br/>DelayConstraint { source = c.event(i),<br/>target = X,<br/>lower = -c.tolerance,<br/>upper = 0}<br/>