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]
(** In this file, we prove some inequalities that always hold inside the busy interval of a job. Throughout this file we assume the ideal uniprocessor model. *)SectionBusyIntervalInequalities.(** Consider any kind of tasks and their jobs, each characterized by an arrival time, a cost, and an arbitrary notion of readiness. *)Context {Task : TaskType} {Job : JobType} `{JobTask Job Task}.Context `{JobArrival Job} `{JobCost Job} {JR :JobReady Job (ideal.processor_state Job)}.(** Consider a JLFP policy that is reflexive and respects sequential tasks. *)Context {JLFP : JLFP_policy Job}.HypothesisH_policy_is_reflexive : reflexive_job_priorities JLFP.HypothesisH_policy_respecsts_sequential_tasks : policy_respects_sequential_tasks JLFP.(** Consider a consistent arrival sequence that does not contain duplicates. *)Variablearr_seq : arrival_sequence Job.HypothesisH_valid_arrival_sequence : valid_arrival_sequence arr_seq.(** Consider any valid ideal uniprocessor schedule defined over this arrival sequence. *)Variablesched : schedule (ideal.processor_state Job).HypothesisH_valid_schedule : valid_schedule sched arr_seq.(** Consider a set of tasks [ts] that contains all the jobs in the arrival sequence. *)Variablets : list Task.HypothesisH_all_jobs_from_taskset : all_jobs_from_taskset arr_seq ts.(** Consider a task [tsk]. *)Variabletsk : Task.(** Consider a job [j] of the task [tsk] that has a positive job cost. *)Variablej : Job.HypothesisH_j_arrives : arrives_in arr_seq j.HypothesisH_job_of_tsk : job_of_task tsk j.HypothesisH_job_cost_positive: job_cost_positive j.(** Consider the ideal JLFP definitions of interference and interfering workload. *)#[local] Instanceideal_jlfp_interference : Interference Job :=
ideal_jlfp_interference arr_seq sched.#[local] Instanceideal_jlfp_interfering_workload : InterferingWorkload Job :=
ideal_jlfp_interfering_workload arr_seq sched.(** Consider the busy interval for j is given by <<[t1,t2)>>. *)Variablet1t2 : duration.HypothesisH_busy_interval : definitions.busy_interval sched j t1 t2.(** Let us denote the relative arrival time by [A]. *)LetA := job_arrival j - t1.(** Consider any arbitrary time [Δ] inside the busy interval. *)VariableΔ : duration.HypothesisH_Δ_in_busy : t1 + Δ <= t2.(** First, we prove that if the priority inversion is bounded then, the cumulative priority inversion is also bounded. *)SectionPIBound.(** Consider the priority inversion in any given interval is bounded by a constant. *)Variablepriority_inversion_bound : duration -> duration.HypothesisH_priority_inversion_is_bounded :
priority_inversion_is_bounded_by arr_seq sched tsk priority_inversion_bound.(** Then, the cumulative priority inversion in any interval is also bounded. *)
bymove: H_busy_interval; rewrite -instantiated_busy_interval_equivalent_busy_interval // => -[PREF _].Qed.EndPIBound.(** Let [jobs] denote the arrivals in the interval [Δ]. *)Letjobs := arrivals_between arr_seq t1 (t1 + Δ).(** Next, we prove that the cumulative interference from higher priority jobs of other tasks in an interval is bounded by the total service received by the higher priority jobs of those tasks. *)