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]
(** * Service Received by Sets of Jobs *)(** In this file, we define the notion of service received by a set of jobs. *)SectionServiceOfJobs.(** Consider any type of tasks ... *)Context {Task : TaskType}.(** ... and any type of jobs associated with these tasks. *)Context {Job : JobType}.Context `{JobTask Job Task}.(** Consider any kind of processor model, ... *)Context {PState : ProcessorState Job}.(** ... any job arrival sequence, ... *)Variablearr_seq : arrival_sequence Job.(** ... and any given schedule. *)Variablesched : schedule PState.(** First, we define the service received by a generic set of jobs. *)SectionServiceOfSetOfJobs.(** Let [P] be any computable predicate over jobs, ...*)VariableP : pred Job.(** ... and let [jobs] denote any (finite) set of jobs. *)Variablejobs : seq Job.(** We define the cumulative service received at time [t] by jobs in [jobs] that satisfy predicate [P] ... *)Definitionservice_of_jobs_at (t : instant) :=
\sum_(j <- jobs | P j) service_at sched j t.(** ... and the cumulative service received during the interval <<[t1, t2)>> by jobs that satisfy predicate [P]. *)Definitionservice_of_jobs (t1t2 : instant) :=
\sum_(j <- jobs | P j) service_during sched j t1 t2.EndServiceOfSetOfJobs.(** Next, we define the service received by jobs with higher or equal priority under JLFP policies. *)SectionPerJobPriority.(** Consider any JLDP policy. *)Context `{JLFP_policy Job}.(** Let jobs denote any (finite) set of jobs. *)Variablejobs : seq Job.(** Let j be the job to be analyzed. *)Variablej : Job.(** Based on the definition of jobs of higher or equal priority, ... *)Letof_higher_or_equal_priorityj_hp := hep_job j_hp j.(** ...we define the service received during <<[t1, t2)>> by jobs of higher or equal priority. *)Definitionservice_of_higher_or_equal_priority_jobs (t1t2 : instant) :=
service_of_jobs of_higher_or_equal_priority jobs t1 t2.(** Furthermore, we define similar notions on jobs arriving in a given time interval, such as ... *)(** ... (1) service of all other jobs with higher-or-equal priority (w.r.t. job [j]) distinct from job [j], ... *)Definitionservice_of_other_hep_jobs (t1t2 : instant) :=
service_of_jobs
(funjhp => another_hep_job jhp j)
(arrivals_between arr_seq t1 t2) t1 t2.(** ... (2) notion of service of higher-or-equal priority jobs from other tasks, ... *)Definitionservice_of_other_task_hep_jobs (t1t2 : instant) :=
service_of_jobs
(funjhp => another_task_hep_job jhp j)
(arrivals_between arr_seq t1 t2) t1 t2.(** ... (3) and service of jobs with higher-or-equal priority arriving in an interval <<[t1, t2)>>. *)Definitionservice_of_hep_jobs (t1t2 : instant) :=
service_of_jobs
(funjhp => hep_job jhp j)
(arrivals_between arr_seq t1 t2) t1 t2.EndPerJobPriority.(** We define the notion of cumulative service received by the jobs of a given task. *)SectionServiceOfTask.(** Let [tsk] be the task to be analyzed ... *)Variabletsk : Task.(** ... and let [jobs] denote any (finite) set of jobs. *)Variablejobs : seq Job.(** We define the cumulative task service received by the jobs of task [tsk] within time interval <<[t1, t2)>>. *)Definitiontask_service_of_jobs_int1t2 :=
service_of_jobs (job_of_task tsk) jobs t1 t2.EndServiceOfTask.(** Finally, we define the notion of total service received by a set of jobs. *)SectionTotalService.(** Let [jobs] denote any (finite) set of jobs. *)Variablejobs : seq Job.(** We define the total service of [jobs] in an interval <<[t1,t2)>> simply as a sum of the service of individual jobs in interval <<[t1,t2)>>. (The predicate [predT] is the trivial predicate that always evaluates to [true], meaning that no jobs are filtered, and hence all jobs are accounted for.) *)Definitiontotal_service_of_jobs_in (t1t2 : instant) :=
service_of_jobs predT jobs t1 t2.EndTotalService.EndServiceOfJobs.