or-conditions from w. This set of values is dynamically formed from the values of
conditions of or-structures, from which the processes of
SG can be reached. The set
SEGMENTS contains all segments of the workflow.
Each segment has a label, assigned according to the following rules:
− the segment that contains processes that are executed independent of any condition
values has the label “1”.
− the label for a segment that corresponds to a branch of a certain or-structure is
formed from three parts that follow each other:
(1) the prefix defined by the label L of the segment, to which the beginning process of the
or-structure belongs;
(2) the index of the branch in the or-structure obtained incrementally starting from 1;
(3) the sequential index of the or-structure in the segment with the label
L, put in square
brackets.
For example, the process Order_intake from the example introduced in Section 2 be-
longs to the segment labeled by “1”, whereas the process Order_delivery2 belongs to the
segment labeled by 1.2[1].
Further the algorithm is given for checking the satisfaction of GC3 with respect to
the process p and the resource r. In this algorithm the following notations are used:
res_produced_by(r, p, am) for is_instance_of(p, t) ∧ task_produces(t, r, am)
res_used_by(r, p, am) for is_instance_of(p, t) ∧ task_uses(t, r, am)
res_consumed_by(r, p, am) for is_instance_of(p, t) ∧ task_consumes(t, r, am)
Algorithm for verification of GC3. Identify the set of time points TP within the dura-
tion of
p (est
p
≤ t < let
p
), at which the amount of some resource(s) of type r changes (i.e.,
time points at which other processes that use/consume/produce a resource of type r
may start or finish). For every time point
t ∈ TP perform steps 2-7.
1. Determine the set RS of segments that contain finished before or executed simultaneously
with
p processes, which execution may influence the amount of resources of type r and
which belong to the set of relevant processes
PR(p) (defined in Section 3):
RS={s ∈ SEGMENTS | ∃a a∈s ∧ a∈PR(p) ∧ [let
a
< t ∧ [ am1 > 0 ∨ am3 >0] ] ∨ [ let
a
> t ∧ est
a
≤ t ∧ [ am1 >
0 ∨ am2 > 0 ∨ am3 > 0 ]
, where am1, am2, and am3 are specificied in res_consumed_by(r, a, am1),
res_used_by(r, a, am2)
and res_produced_by(r, a, am3).
2. The labels of segments in
RS that correspond to the branches belonging to the same or-
structure are grouped.
3. The n-ary Cartesian product of all obtained groups is generated (n is the number of groups):
g
1
×… × g
n
. Each tuple in the obtained product set corresponds to a possible combination of
segments in the workflow. In such a way all possible execution of processes in the work-
flow, which use/produce/consume
r and have latest ending time ≤ let
p
are considered.
4. For every tuple in the product set identify the set of processes
PS that corresponds to the tu-
ple. If two or more processes from the same segment related by a sequencing relation may
be executed at the same time in different instances of the workflow, replace
PS by a number
of sets, each of which will contain only one from these processes.
5. For every set of processes PS corresponding to the tuple, identify the set of resources RPS of
type
r produced by processes in PS.
6. For every process
a ∈ PS that consumes some amount of the resource of type r identify if this
amount of not expired resource(s) from RPS is available. Update RPS after every iteration:
7.1 Initial settings: Let temp_amount= am, where am is defined by res_consumed_by(r, a, am)
7.2 Until temp_amount > 0 and RPS is not empty perform 7.3 and 7.4
7.3 Identify resource
res ∈ RPS with the smallest earliest expiration time, which did not
expire yet. It is assumed that such resource will be used first by
a.
7.4 If
res.amount ≥ temp_amount,
122