Built with Alectryon, running Coq+SerAPI v8.20.0+0.20.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file ssrmatching_plugin.cmxs (using legacy method) ... done]
[Loading ML file ssreflect_plugin.cmxs (using legacy method) ... done]
[Loading ML file ring_plugin.cmxs (using legacy method) ... done]
Serlib plugin: coq-elpi.elpi is not available: serlib support is missing.
Incremental checking for commands in this plugin will be impacted.
[Loading ML file coq-elpi.elpi ... done]
[Loading ML file zify_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_core_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_plugin.cmxs (using legacy method) ... done]
[Loading ML file btauto_plugin.cmxs (using legacy method) ... done]
Notation"_ + _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ - _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ <= _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ < _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ >= _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ > _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ <= _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ < _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ <= _ < _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ < _ < _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ * _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
(** * Cumulative Workload of Sets of Jobs *)(** In this module, we define the notion of the cumulative workload of a set of jobs. *)SectionWorkloadOfJobs.(** Consider any type of tasks ... *)Context {Task : TaskType}.Context `{TaskCost Task}.(** ... and any type of jobs with execution costs that are associated with these tasks. *)Context {Job : JobType}.Context `{JobTask Job Task}.Context `{JobCost Job}.(** We define the workload of jobs that satisfy a predicate. *)Definitionworkload_of_jobs (P : pred Job) (jobs : seq Job) :=
\sum_(j <- jobs | P j) job_cost j.(** We define the task workload as the workload of jobs of task [tsk]. *)Definitiontask_workload (tsk : Task) (jobs : seq Job) :=
workload_of_jobs (job_of_task tsk) jobs.(** Now consider an arbitrary job arrival sequence. *)Variablearr_seq : arrival_sequence Job.(** We define a task's workload in a given interval [[t1, t2)]. *)Definitiontask_workload_between (tsk : Task) (t1t2 : instant) :=
task_workload tsk (arrivals_between arr_seq t1 t2).(** Further, we define (trivially) the workload of a given job. While this definition may appear of little use, it is in fact useful for certain rewriting steps. *)Definitionworkload_of_job (j : Job) (t1t2 : instant) :=
workload_of_jobs (xpred1 j) (arrivals_between arr_seq t1 t2).(** In this section, we add definitions for total workload. *)SectionTotalWorkload.(** We define the total workload as the sum of workloads of all incoming jobs. *)Definitiontotal_workload (jobs : seq Job) := workload_of_jobs predT jobs.(** We also define the total workload in a given interval [[t1, t2)]. *)Definitiontotal_workload_between (t1t2 : instant) :=
total_workload (arrivals_between arr_seq t1 t2).EndTotalWorkload.(** Next, we define the workload of jobs with higher or equal priority under JLFP policies. *)SectionPerJobPriority.(** Consider any JLFP policy that indicates whether a job has higher or equal priority. *)Context `{JLFP_policy Job}.(** We extend the prior notion to define the workload all jobs with higher-or-equal priority than [j] in a given interval. *)Definitionworkload_of_hep_jobs (j : Job) (t1t2 : instant) :=
letis_hepj' := hep_job j' j in
workload_of_jobs is_hep (arrivals_between arr_seq t1 t2).(** We define a similar _non-reflexive_ notion of higher-or-equal priority workload in an interval. *)Definitionworkload_of_other_hep_jobs (j : Job) (t1t2 : instant) :=
letis_ahepj' := another_hep_job j' j in
workload_of_jobs is_ahep (arrivals_between arr_seq t1 t2).EndPerJobPriority.EndWorkloadOfJobs.