**Corollary 4.** *If a secondary block* B *is constituted by the preschedules created at Phase 1, then it is compact.*

**Proof.** For every kernel *K* ∈ B, if an *L*-preschedule *PreS*(*K*, *x*, *y*) of Phase 1 is not compact then there exist sets *A* ⊆ *E*(*K*, *L*) and *B* ⊆ *EP*(*K*, *L*) such that an *L*-preschedule *PreS*(*K*, −*A*, +*B*) is compact (Proposition 14). By Theorem 4, *B* = {*π*}, for some job *π* ∈ *EP*(*K*, *L*). However, since for every job *j* ∈ *A*, *pj* < *p<sup>π</sup>* (see Lemma 9), set *A* cannot cover set *B* in preschedule *PreS*(*K*, −*A*, +*B*), as otherwise job *π* would have been included in preschedule *PreS*(*K*, *x*, *y*) at Pass 2 instead of the shorter jobs from set *A*. It follows that every preschedule from block B is compact, and the corollary follows from Theorem 5.

#### **9. Phase 2: Search for an** *L***-preschedule When an IA(b2) at Phase 1 Arises**

Throughout this section, we consider the scenario when a compact preschedule for a newly arisen kernel *K* cannot be constructed at Phase 1, i.e., an IA(b2) with a Type (b) y-job *y* at Pass 1 arises. Recall that this happens when Pass 1 is unable to include job *y* in preschedule *PreS*(*K*, *y*) in the current configuration (see Proposition 12). Phase 2, invoked from Phase 1, generates one or more new problem instances and calls back Phase 1 to create the corresponding new configurations. Thus, Phase 2 has no proper algorithmic features except that it generates new problem instances.

We refer to the earliest occurrence of IA(b2) in secondary block B*<sup>K</sup>* at Phase 1 as the basic case. In the inductive case (abbreviated IA(b2-I)), IA(b2) repeatedly arises in the current secondary block (roughly, we "stay" in the current secondary block for IA(b2-I) in the inductive case, whereas we are brought to a new secondary block with every newly occurred IA(b2) in the basic case). In general, different occurrences of an IA(b2-I) in the inductive case may occur for different kernels, where all of them pertain to the current secondary block B.

Throughout this section, let *K*<sup>−</sup> be the kernel immediately preceding kernel *K* in block B*K*. We let *y* be an incoming job in bin *B*−(*K*) = *B*+(*K*−) at Phase 1; *y* is an incoming job in the first bin of block B*<sup>K</sup>* if there exists no *K*−. Note that *ry* is no smaller than the starting time of block B*K*, and, since it can feasibly be scheduled within every bin that initiates at or after time *ry* up to (and including) bin *B*−(*K*), *y* is a former x-job for any such a bin (except that it is a Type (b) job for bin *B*−(*K*)), i.e., it may potentially be included in any of these bins. We explore such possibility and seek for a suitable distribution of all the x-jobs and Type (b) y-jobs into these bins at Phase 2.

**Proposition 16.** *Suppose during the construction of preschedule PreS*(*K*, *y*) *an IA(b2)/IA(b2-I) with job y occurs and there exists schedule SL. Then, job y or a Type (b) y-job included between kernel K*<sup>−</sup> *and job y in bin B*−(*K*) *is scheduled before kernel K*<sup>−</sup> *in schedule SL.*

**Proof.** Note that the critical block in schedule <sup>Σ</sup>C(*δ*,*K*) coincides with the secondary block B*K*<sup>−</sup> , and it is compact when the above IA(b2)/IA(b2-I) occurs by Corollary 4. Then, job *y* cannot be restarted earlier in any feasible *L*-schedule in which the same jobs (which were included in preschedule *PreS*(*K*, *y*) at Pass 1) are left scheduled before job *y*. The lemma obviously follows if *y* is the earliest considered job to be scheduled in bin *B*−(*K*). Otherwise, job *y* may potentially be started earlier either by scheduling it before kernel *K*− or by decreasing (left-shifting) its current early starting time. The latter will only be possible if some job included in bin *B*−(*K*) ahead of job *y* is rescheduled behind job *y*. By the construction at Phase 1, any job included in bin *B*−(*K*) ahead of job *y* is a no less urgent than job *y* y-job and it cannot be rescheduled after job *y* without surpassing the *L*-boundary. Then, job *y* may be left-shifted only if one of the latter jobs is rescheduled before kernel *K*−. However, this is not possible for a Type (a) y-job and the lemma is proved.

By the above proposition, either job *y* or a Type (b) y-job included between kernel *K*− and job *y* in bin *B*−(*K*) is to be rescheduled before kernel *K*−. In particular, the following observations are evident:

• (1) If job *y*, is the first scheduled job in bin *B*−(*K*) or is preceded only by Type (a) y-jobs in that bin, then job *y* is to be entirely rescheduled before kernel *K*−.

• (2) If job *y* is preceded by some Type (b) y-job(s), then either job *y* or some of these Type (b) y-job(s) is (are) to be rescheduled before kernel *K*−. Since in any *L*-schedule job *y* needs to be left-shifted by at least *λ<sup>y</sup>* amount of time (the *L*-delay of job *y* (see Equation (5))), the total processing time of these Type (b) y-jobs to be rescheduled before kernel *K*− must be no-less than *λy*.

Let us denote by Λ*<sup>y</sup>* the set of the y-jobs to be rescheduled before kernel *K*<sup>−</sup> as defined in Cases (1) and (2) above. Set Λ*<sup>y</sup>* will not be explicitly defined; it will be formed implicitly during the activation procedure that we describe in this section. In Case (1) above, set Λ*<sup>y</sup>* will contain a single job *y*, hence *ps* ≥ *py* must clearly hold, whereas, in Case (2), *ps* must clearly be no-less than the minimum processing time of a y-job in set <sup>Λ</sup>*y*. Let *<sup>p</sup>*¯min{*y*} be the minimum processing time among these y-jobs. The next proposition follows:
