Table 2: Constraints for merge gateways.

Merge gatewayProcess constraints

525121.table.002a- All A activity instances have as a previous activity instance a completed activity instance of type B1 or or Bn
context A inv: previous->size()=1 and previous->exists(b (b.oclIsTypeOf(B1) or or b.oclIsTypeOf(Bn)) and b.status=completed’)
- Each activity instance is followed by an A activity
context Case inv: status=completed’ implies activity->select(b b.oclIsTypeOf(B1) or or b.oclIsTypeOf(Bn))-> forAll(b b.next->exists(a a.oclIsTypeOf(A)))
525121.table.002b- An A activity instance must wait for at least an incoming flow
context A inv: previous->select(b (b.oclIsTypeOf(B1) or or b.oclIsTypeOf(Bn)) and b.status=completed’)- size()≥1
525121.table.002c- An activity instance of type A must wait for a set of activities to be completed
context A inv: previous->exists(b b.oclIsTypeOf(B1) and b.status=completed’) and…and previous->exists(b b.oclIsTypeOf(Bn) and b.status=completed’)
- Each set of completed activity instances must be related with an A activity instance
context Case inv: status=completed’ implies not (activity->exists(b b.oclIsTypeOf(B1) and b.status=completed’ and not b.next->exists(a a.oclIsTypeOf(A)) and and activity ->exists(b b.oclIsTypeOf(Bn) and b.status=completed’ and not b.next->exists(a a.oclIsTypeOf(A)))