Library prosa.analysis.facts.model.service_of_jobs

Lemmas about Service Received by Sets of Jobs

In this file, we establish basic facts about the service received by sets of jobs.
To begin with, we provide some basic properties of service of a set of jobs in case of a generic scheduling model.
Consider any type of tasks ...
  Context {Task : TaskType}.

... and any type of jobs associated with these tasks.
  Context {Job : JobType}.
  Context `{JobTask Job Task}.
  Context `{JobArrival Job}.
  Context `{JobCost Job}.

Consider any kind of processor state model, ...
  Context {PState : Type}.
  Context `{ProcessorState Job PState}.

... any job arrival sequence with consistent arrivals, ....
... and any schedule of this arrival sequence ...
  Variable sched : schedule PState.

... where jobs do not execute before their arrival or after completion.
Let P be any predicate over jobs.
  Variable P : Job bool.

Let's define some local names for clarity.
In this section, we prove that the service received by any set of jobs is upper-bounded by the corresponding workload.
Let jobs denote any (finite) set of jobs.
    Variable jobs : seq Job.

Assume that the processor model is a unit service model. I.e., no job ever receives more than one unit of service at any time.
Then, we prove that the service received by those jobs is no larger than their workload.
    Lemma service_of_jobs_le_workload:
       t1 t2,
        service_of_jobs sched P jobs t1 t2 workload_of_jobs P jobs.

  End ServiceBoundedByWorkload.

In this section we prove a few facts about splitting the total service of a set of jobs.
  Section ServiceCat.

We show that the total service of jobs released in a time interval t1,t2) during [t1,t2) is equal to the sum of: (1) the total service of jobs released in time interval [t1, t) during time [t1, t) (2) the total service of jobs released in time interval [t1, t) during time [t, t2) and (3) the total service of jobs released in time interval [t, t2) during time [t, t2).
    Lemma service_of_jobs_cat_scheduling_interval :
       t1 t2 t,
        t1 t t2
        service_of_jobs sched P (arrivals_between t1 t2) t1 t2
        = service_of_jobs sched P (arrivals_between t1 t) t1 t
          + service_of_jobs sched P (arrivals_between t1 t) t t2
          + service_of_jobs sched P (arrivals_between t t2) t t2.

We show that the total service of jobs released in a time interval t1,t2) during [t,t2) is equal to the sum of: (1) the total service of jobs released in a time interval [t1,t) during [t,t2) and (2) the total service of jobs released in a time interval [t,t2) during [t,t2).
    Lemma service_of_jobs_cat_arrival_interval :
       t1 t2 t,
        t1 t t2
        service_of_jobs sched P (arrivals_between t1 t2) t t2 =
        service_of_jobs sched P (arrivals_between t1 t) t t2 +
        service_of_jobs sched P (arrivals_between t t2) t t2.

  End ServiceCat.

End GenericModelLemmas.

In this section, we prove some properties about service of sets of jobs for ideal uni-processor model.
Section IdealModelLemmas.

Consider any type of tasks ...
  Context {Task : TaskType}.

... and any type of jobs associated with these tasks.
  Context {Job : JobType}.
  Context `{JobTask Job Task}.
  Context `{JobArrival Job}.
  Context `{JobCost Job}.

Consider any arrival sequence with consistent arrivals.
Next, consider any ideal uni-processor schedule of this arrival sequence ...
... where jobs do not execute before their arrival or after completion.
Let P be any predicate over jobs.
  Variable P : Job bool.

Let's define some local names for clarity.
We prove that if the total service within some time interval [t1,t2)] is smaller than [t2-t1], then there is an idle time instant t [[t1,t2)].
  Lemma low_service_implies_existence_of_idle_time :
     t1 t2,
      service_of_jobs sched predT (arrivals_between 0 t2) t1 t2 < t2 - t1
       t, t1 t < t2 is_idle sched t.

In this section, we prove that the service received by any set of jobs is upper-bounded by the corresponding interval length.
Let jobs denote any (finite) set of jobs.
    Variable jobs : seq Job.

Assume that the sequence of jobs is a set.
    Hypothesis H_no_duplicate_jobs : uniq jobs.

We prove that the overall service of jobs at a single time instant is at most 1.
    Lemma service_of_jobs_le_1:
       t, \sum_(j <- jobs | P j) service_at sched j t 1.

Then, we prove that the service received by those jobs is no larger than their workload.
    Corollary service_of_jobs_le_length_of_interval:
       (t : instant) (Δ : duration),
        service_of_jobs sched P jobs t (t + Δ) Δ.

Similar lemma holds for two instants.
    Corollary service_of_jobs_le_length_of_interval':
       (t1 t2 : instant),
        service_of_jobs sched P jobs t1 t2 t2 - t1.

  End ServiceOfJobsIsBoundedByLength.

In this section, we introduce a connection between the cumulative service, cumulative workload, and completion of jobs.
Consider an arbitrary time interval t1, t2).
    Variables t1 t2 : instant.

Let jobs be a set of all jobs arrived during t1, t2).
    Let jobs := arrivals_between t1 t2.

Next, we consider some time instant t_compl.
    Variable t_compl : instant.

And state the proposition that all jobs are completed by time t_compl. Next we show that this proposition is equivalent to the fact that workload of jobs = service of jobs.
    Let all_jobs_completed_by t_compl :=
       j, j \in jobs P j completed_by j t_compl.

First, we prove that if the workload of jobs is equal to the service of jobs, then any job in jobs is completed by time t_compl.
And vice versa, the fact that any job in jobs is completed by time t_compl implies that the workload of jobs is equal to the service of jobs.
Using the lemmas above, we prove equivalence.