Library rt.restructuring.model.aggregate.task_arrivals


(* ----------------------------------[ coqtop ]---------------------------------

Welcome to Coq 8.10.1 (October 2019)

----------------------------------------------------------------------------- *)


From rt.restructuring.model Require Export task.

In this file we provide basic definitions related to tasks on arrival sequences.
Section TaskArrivals.

Consider any type of job associated with any type of tasks.
  Context {Job : JobType}.
  Context {Task : TaskType}.
  Context `{JobTask Job Task}.

Consider any job arrival sequence.
  Variable arr_seq : arrival_sequence Job.

  Section Definitions.

Let tsk be any task.
    Variable tsk : Task.

We define the sequence of jobs of tsk arriving at time t.
    Definition task_arrivals_at (t : instant) : seq Job :=
      [seq j <- arrivals_at arr_seq t | job_task j == tsk].

By concatenation, we construct the list of jobs of tsk that arrived in the interval [t1, t2).
    Definition task_arrivals_between (t1 t2 : instant) :=
      [seq j <- arrivals_between arr_seq t1 t2 | job_task j == tsk].

Based on that, we define the list of jobs of tsk that arrived up to time t, ...
    Definition task_arrivals_up_to (t : instant) := task_arrivals_between 0 t.+1.

...and the list of jobs of tsk that arrived strictly before time t ...
    Definition task_arrivals_before (t : instant) := task_arrivals_between 0 t.

... and also count the number of job arrivals.
    Definition number_of_task_arrivals (t1 t2 : instant) :=
      size (task_arrivals_between t1 t2).

  End Definitions.

We define a predicate for arrival sequences for which jobs come from a taskset.
  Definition arrivals_come_from_taskset (ts : seq Task) :=
     j, arrives_in arr_seq j job_task j \in ts.

End TaskArrivals.