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 .
Require Export prosa.analysis.facts.behavior.supply.[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]
Require Export prosa.analysis.facts.SBF.
Require Export prosa.analysis.abstract .abstract_rta.
Require Export prosa.analysis.abstract .iw_auxiliary.
Require Export prosa.analysis.abstract .IBF.supply.
Require Export prosa.analysis.abstract .restricted_supply.busy_sbf.
(** * Abstract Response-Time Analysis for Restricted-Supply Processors (aRSA) *)
(** In this section we propose a general framework for response-time
analysis ([RTA]) for real-time tasks with arbitrary arrival models
under uni-processor scheduling subject to supply restrictions,
characterized by a given [SBF]. *)
(** We prove that the maximum (with respect to the set of offsets)
among the solutions of the response-time bound recurrence is a
response-time bound for [tsk]. Note that in this section we add
additional restrictions on the processor state. These assumptions
allow us to eliminate the second equation from [aRTA+]'s
recurrence since jobs experience delays only due to the lack of
supply while executing non-preemptively. *)
Section AbstractRTARestrictedSupply .
(** Consider any type of tasks with a run-to-completion threshold ... *)
Context {Task : TaskType}.
Context `{TaskCost Task}.
Context `{TaskRunToCompletionThreshold Task}.
(** ... and any type of jobs associated with these tasks. *)
Context {Job : JobType}.
Context `{JobTask Job Task}.
Context `{JobArrival Job}.
Context `{JobCost Job}.
Context `{JobPreemptable Job}.
(** Consider any kind of fully supply-consuming unit-supply
processor state model. *)
Context `{PState : ProcessorState Job}.
Hypothesis H_unit_supply_proc_model : unit_supply_proc_model PState.
Hypothesis H_consumed_supply_proc_model : fully_consuming_proc_model PState.
(** Consider any valid arrival sequence. *)
Variable arr_seq : arrival_sequence Job.
Hypothesis H_valid_arrivals : valid_arrival_sequence arr_seq.
(** Consider any restricted supply uniprocessor schedule of this
arrival sequence ...*)
Variable sched : schedule PState.
Hypothesis H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence sched arr_seq.
(** ... where jobs do not execute before their arrival nor after completion. *)
Hypothesis H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute sched.
Hypothesis H_completed_jobs_dont_execute : completed_jobs_dont_execute sched.
(** Assume we are given valid WCETs for all tasks. *)
Hypothesis H_valid_job_cost :
arrivals_have_valid_job_costs arr_seq.
(** Consider a task set [ts]... *)
Variable ts : list Task.
(** ... and a task [tsk] of [ts] that is to be analyzed. *)
Variable tsk : Task.
Hypothesis H_tsk_in_ts : tsk \in ts.
(** Consider a valid preemption model ... *)
Hypothesis H_valid_preemption_model : valid_preemption_model arr_seq sched.
(** ...and a valid task run-to-completion threshold function. That
is, [task_rtc tsk] is (1) no bigger than [tsk]'s cost and (2)
for any job [j] of task [tsk] [job_rtct j] is bounded by
[task_rtct tsk]. *)
Hypothesis H_valid_run_to_completion_threshold :
valid_task_run_to_completion_threshold arr_seq tsk.
(** Assume we are provided with abstract functions for Interference
and Interfering Workload. *)
Context `{Interference Job}.
Context `{InterferingWorkload Job}.
(** We assume that the scheduler is work-conserving. *)
Hypothesis H_work_conserving : work_conserving arr_seq sched.
(** Let [L] be a constant that bounds any busy interval of task [tsk]. *)
Variable L : duration.
Hypothesis H_busy_interval_exists :
busy_intervals_are_bounded_by arr_seq sched tsk L.
(** Consider a unit SBF valid in busy intervals (w.r.t. task
[tsk]). That is, (1) [SBF 0 = 0], (2) for any duration [Δ], the
supply produced during a busy-interval prefix of length [Δ] is
at least [SBF Δ], and (3) [SBF] makes steps of at most one. *)
Context {SBF : SupplyBoundFunction}.
Hypothesis H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF.
Hypothesis H_unit_SBF : unit_supply_bound_function SBF.
(** Next, we assume that [intra_IBF] is a bound on the intra-supply
interference incurred by task [tsk]. *)
Variable intra_IBF : duration -> duration -> duration.
Hypothesis H_intra_supply_interference_is_bounded :
intra_interference_is_bounded_by arr_seq sched tsk intra_IBF.
(** Given any job [j] of task [tsk] that arrives exactly [A] units
after the beginning of the busy interval, the bound on the
interference incurred by [j] within an interval of length [Δ] is
no greater than [(Δ - SBF Δ) + intra_IBF A Δ]. *)
Let IBF_P (A Δ : duration) :=
(Δ - SBF Δ) + intra_IBF A Δ.
(** Next, we instantiate function [IBF_NP], which is a function that
bounds interference in a non-preemptive stage of execution. We
prove that this function can be instantiated as [λ tsk F Δ ⟹ (F
- task_rtct tsk) + (Δ - SBF Δ - (F - SBF F))]. *)
(** Let us reiterate on the intuitive interpretation of this
function. Since [F] is a solution to the first equation
[task_rtct tsk + IBF_P A F <= F], we know that by time
instant [t1 + F] a job receives [task_rtct tsk] units of service
and, hence, it becomes non-preemptive. Knowing this information,
how can we bound the job's interference in an interval <<[t1, t1
+ Δ)>>? Note that this interval starts with the beginning of
the busy interval. We know that the job receives [F - task_rtct
tsk] units of interference. In the non-preemptive mode, a job
under analysis can still experience some interference due to a
lack of supply. This interference is bounded by [(Δ - SBF Δ) -
(F - SBF F)] since part of this interference has already been
accounted for in the preemptive part of the execution ([F - SBF
F]). *)
Let IBF_NP (F Δ : duration) :=
(F - task_rtct tsk) + (Δ - SBF Δ - (F - SBF F)).
(** In the next section, we prove a few helper lemmas. *)
Section AuxiliaryLemmas .
(** Consider any job [j] of [tsk]. *)
Variable j : Job.
Hypothesis H_j_arrives : arrives_in arr_seq j.
Hypothesis H_job_of_tsk : job_of_task tsk j.
Hypothesis H_job_cost_positive : job_cost_positive j.
(** Consider the busy interval <<[t1, t2)>> of job [j]. *)
Variable t1 t2 : instant.
Hypothesis H_busy_interval : busy_interval_prefix sched j t1 t2.
(** Let's define [A] as a relative arrival time of job [j] (with
respect to time [t1]). *)
Let A : duration := job_arrival j - t1.
(** Consider an arbitrary time [Δ] ... *)
Variable Δ : duration.
(** ... such that [t1 + Δ] is inside the busy interval... *)
Hypothesis H_inside_busy_interval : t1 + Δ < t2.
(** ... the job [j] is not completed by time [(t1 + Δ)]. *)
Hypothesis H_job_j_is_not_completed : ~~ completed_by sched j (t1 + Δ).
(** First, we show that blackout is counted as interference. *)
Lemma blackout_impl_interference :
forall t ,
t1 <= t < t2 ->
is_blackout sched t ->
interference j t.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ)
forall t : nat,
t1 <= t < t2 ->
is_blackout sched t -> interference j t
Proof .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ)
forall t : nat,
t1 <= t < t2 ->
is_blackout sched t -> interference j t
move => t /andP [LE1 LE2].Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) t : nat LE1 : t1 <= t LE2 : t < t2
is_blackout sched t -> interference j t
apply contraLR => /negP INT.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) t : nat LE1 : t1 <= t LE2 : t < t2 INT : ~ interference j t
~~ is_blackout sched t
eapply H_work_conserving in INT =>//; last by lia .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) t : nat LE1 : t1 <= t LE2 : t < t2 INT : receives_service_at sched j t
~~ is_blackout sched t
by apply /negPn; eapply pos_service_impl_pos_supply.
Qed .
(** Next, we show that interference is equal to a sum of two
functions: [is_blackout] and [intra_interference]. *)
Lemma blackout_plus_local_is_interference :
forall t ,
t1 <= t < t2 ->
is_blackout sched t + intra_interference sched j t
= interference j t.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ)
forall t : nat,
t1 <= t < t2 ->
is_blackout sched t + intra_interference sched j t =
interference j t
Proof .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ)
forall t : nat,
t1 <= t < t2 ->
is_blackout sched t + intra_interference sched j t =
interference j t
move => t t_INT.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) t : nat t_INT : t1 <= t < t2
is_blackout sched t + intra_interference sched j t =
interference j t
rewrite /intra_interference /cond_interference.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) t : nat t_INT : t1 <= t < t2
is_blackout sched t +
has_supply sched t && interference j t =
interference j t
destruct (is_blackout sched t) eqn :BLACKOUT; rewrite (negbRL BLACKOUT) //.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) t : nat t_INT : t1 <= t < t2 BLACKOUT : is_blackout sched t = true
true + ~~ true && interference j t = interference j t
by rewrite blackout_impl_interference.
Qed .
(** As a corollary, cumulative interference during a time
interval <<[t1, t1 + Δ)>> can be split into a sum of total
blackouts in <<[t1, t1 + Δ)>> and cumulative intra-supply
interference during <<[t1, t1 + Δ)>>. *)
Corollary blackout_plus_local_is_interference_cumul :
blackout_during sched t1 (t1 + Δ) + cumul_intra_interference sched j t1 (t1 + Δ)
= cumulative_interference j t1 (t1 + Δ).Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ)
blackout_during sched t1 (t1 + Δ) +
cumul_intra_interference sched j t1 (t1 + Δ) =
cumulative_interference j t1 (t1 + Δ)
Proof .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ)
blackout_during sched t1 (t1 + Δ) +
cumul_intra_interference sched j t1 (t1 + Δ) =
cumulative_interference j t1 (t1 + Δ)
rewrite -big_split; apply eq_big_nat => //=.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ)
forall i : nat,
t1 <= i < t1 + Δ ->
is_blackout sched i +
cond_interference (fun => [eta has_supply sched]) j i =
cond_interference (fun => xpredT) j i
move => t /andP [t_GEQ t_LTN_td].Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) t : nat t_GEQ : t1 <= t t_LTN_td : t < t1 + Δ
is_blackout sched t +
cond_interference (fun => [eta has_supply sched]) j t =
cond_interference (fun => xpredT) j t
move : (ltn_trans t_LTN_td H_inside_busy_interval) => t_LTN_t2.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) t : nat t_GEQ : t1 <= t t_LTN_td : t < t1 + Δ t_LTN_t2 : t < t2
is_blackout sched t +
cond_interference (fun => [eta has_supply sched]) j t =
cond_interference (fun => xpredT) j t
by apply blackout_plus_local_is_interference; apply /andP.
Qed .
(** Moreover, since the total blackout duration in an interval
of length [Δ] is bounded by [Δ - SBF Δ], the cumulative
interference during the time interval <<[t1, t1 + Δ)>> is
bounded by the sum of [Δ - SBF Δ] and cumulative
intra-supply interference during <<[t1, t1 + Δ)>>. *)
Corollary cumulative_job_interference_bound :
cumulative_interference j t1 (t1 + Δ)
<= (Δ - SBF Δ) + cumul_intra_interference sched j t1 (t1 + Δ).Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ)
cumulative_interference j t1 (t1 + Δ) <=
Δ - SBF Δ +
cumul_intra_interference sched j t1 (t1 + Δ)
Proof .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ)
cumulative_interference j t1 (t1 + Δ) <=
Δ - SBF Δ +
cumul_intra_interference sched j t1 (t1 + Δ)
rewrite -blackout_plus_local_is_interference_cumul leq_add2r.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ)
blackout_during sched t1 (t1 + Δ) <= Δ - SBF Δ
by eapply blackout_during_bound with (t2 := t2) => //.
Qed .
(** Next, consider a duration [F] such that [F <= Δ] and job [j]
has enough service to become non-preemptive by time instant
[t1 + F]. *)
Variable F : duration.
Hypothesis H_F_le_Δ : F <= Δ.
Hypothesis H_enough_service : task_rtct tsk <= service sched j (t1 + F).
(** Then, we show that job [j] does not experience any
intra-supply interference in the time interval <<[t1 + F, t1 +
Δ)>>. *)
Lemma no_intra_interference_after_F :
cumul_intra_interference sched j (t1 + F) (t1 + Δ) = 0 .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F)
cumul_intra_interference sched j (t1 + F) (t1 + Δ) = 0
Proof .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F)
cumul_intra_interference sched j (t1 + F) (t1 + Δ) = 0
rewrite /cumul_intra_interference/ cumul_cond_interference big_nat.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F)
\sum_(t1 + F <= i < t1 + Δ | t1 + F <= i < t1 + Δ)
cond_interference (fun => [eta has_supply sched]) j
i = 0
apply big1; move => t /andP [GE__t LT__t].Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ
cond_interference (fun => [eta has_supply sched]) j t =
0
apply /eqP; rewrite eqb0; apply /negP.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ
~ cond_interference (fun => [eta has_supply sched]) j t
move => /andP [P /negPn /negP D]; apply : D; apply /negP.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ P : has_supply sched t
~ interference j t
eapply H_work_conserving with (t1 := t1) (t2 := t2); eauto 2 .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ P : has_supply sched t
t1 <= t < t2
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ P : has_supply sched t
t1 <= t < t2
by apply /andP; split ; lia . } Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ P : has_supply sched t
receives_service_at sched j t
eapply progress_inside_supplies; eauto .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ P : has_supply sched t
scheduled_at sched j t
eapply job_nonpreemptive_after_run_to_completion_threshold; eauto 2 .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ P : has_supply sched t
job_rtct j <= service sched j (t1 + F)
- Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ P : has_supply sched t
job_rtct j <= service sched j (t1 + F)
rewrite -(leqRW H_enough_service).Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ P : has_supply sched t
job_rtct j <= task_rtct tsk
by apply H_valid_run_to_completion_threshold.
- Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ P : has_supply sched t
~~ completed_by sched j t
move : H_job_j_is_not_completed; apply contra.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat j : Job H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task tsk j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_interval : busy_interval_prefix sched j t1 t2 A := job_arrival j - t1 : duration Δ : duration H_inside_busy_interval : t1 + Δ < t2 H_job_j_is_not_completed : ~~
completed_by sched j
(t1 + Δ) F : duration H_F_le_Δ : F <= Δ H_enough_service : task_rtct tsk <=
service sched j (t1 + F) t : nat GE__t : t1 + F <= t LT__t : t < t1 + Δ P : has_supply sched t
completed_by sched j t ->
completed_by sched j (t1 + Δ)
by apply completion_monotonic; lia .
Qed .
End AuxiliaryLemmas .
(** For clarity, let's define a local name for the search space. *)
Let is_in_search_space_rs := is_in_search_space L IBF_P.
(** We use the following equation to bound the response-time of a
job of task [tsk]. Consider any value [R] that upper-bounds the
solution of each response-time recurrence, i.e., for any
relative arrival time [A] in the search space, there exists a
corresponding solution [F] such that (1) [F <= A + R],
(2) [task_rtct tsk + intra_IBF tsk A F <= SBF F] and [SBF F +
(task_cost tsk - task_rtct tsk) <= SBF (A + R)].
Note that, compared to "ideal RTA," there is an additional requirement
[F <= A + R]. Intuitively, it is needed to rule out a nonsensical
situation when the non-preemptive stage completes earlier than
the preemptive stage. *)
Variable R : duration.
Hypothesis H_R_is_maximum_rs :
forall (A : duration),
is_in_search_space_rs A ->
exists (F : duration),
F <= A + R
/\ task_rtct tsk + intra_IBF A F <= SBF F
/\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R).
(** In the following section we prove that all the premises of
abstract RTA are satisfied. *)
Section RSaRTAPremises .
(** First, we show that [IBF_P] correctly upper-bounds
interference in the preemptive stage of execution. *)
Lemma IBF_P_bounds_interference :
job_interference_is_bounded_by
arr_seq sched tsk IBF_P (relative_arrival_time_of_job_is_A sched).Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
job_interference_is_bounded_by arr_seq sched tsk IBF_P
(relative_arrival_time_of_job_is_A sched)
Proof .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
job_interference_is_bounded_by arr_seq sched tsk IBF_P
(relative_arrival_time_of_job_is_A sched)
move => t1 t2 Δ j ARR TSK BUSY LT NCOM A PAR; move : (PAR _ _ BUSY) => EQ.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) A : nat PAR : relative_arrival_time_of_job_is_A sched j A EQ : A = job_arrival j - t1
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) <=
IBF_P A Δ
rewrite fold_cumul_interference.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) A : nat PAR : relative_arrival_time_of_job_is_A sched j A EQ : A = job_arrival j - t1
cumulative_interference j t1 (t1 + Δ) <= IBF_P A Δ
rewrite (leqRW (cumulative_job_interference_bound _ _ _ _ _ t2 _ _ _ _)) => //.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) A : nat PAR : relative_arrival_time_of_job_is_A sched j A EQ : A = job_arrival j - t1
Δ - SBF Δ +
cumul_intra_interference sched j t1 (t1 + Δ) <=
IBF_P A Δ
- Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) A : nat PAR : relative_arrival_time_of_job_is_A sched j A EQ : A = job_arrival j - t1
Δ - SBF Δ +
cumul_intra_interference sched j t1 (t1 + Δ) <=
IBF_P A Δ
rewrite leq_add2l /cumul_intra_interference.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) A : nat PAR : relative_arrival_time_of_job_is_A sched j A EQ : A = job_arrival j - t1
cumul_cond_interference (fun => [eta has_supply sched])
j t1 (t1 + Δ) <= intra_IBF A Δ
by apply : H_intra_supply_interference_is_bounded => //.
- Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) A : nat PAR : relative_arrival_time_of_job_is_A sched j A EQ : A = job_arrival j - t1
job_cost_positive j
by eapply incomplete_implies_positive_cost => //.
- Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) A : nat PAR : relative_arrival_time_of_job_is_A sched j A EQ : A = job_arrival j - t1
busy_interval_prefix sched j t1 t2
by apply BUSY.
Qed .
(** Next, we prove that [IBF_NP] correctly bounds interference in
the non-preemptive stage given a solution to the preemptive
stage [F]. *)
Lemma IBF_NP_bounds_interference :
job_interference_is_bounded_by
arr_seq sched tsk IBF_NP (relative_time_to_reach_rtct sched tsk IBF_P).Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
job_interference_is_bounded_by arr_seq sched tsk
IBF_NP (relative_time_to_reach_rtct sched tsk IBF_P)
Proof .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
job_interference_is_bounded_by arr_seq sched tsk
IBF_NP (relative_time_to_reach_rtct sched tsk IBF_P)
have USER : unit_service_proc_model PState by apply unit_supply_is_unit_service.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState
job_interference_is_bounded_by arr_seq sched tsk
IBF_NP (relative_time_to_reach_rtct sched tsk IBF_P)
move => t1 t2 Δ j ARR TSK BUSY LT NCOM F RT.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) <=
IBF_NP F Δ
have POS := incomplete_implies_positive_cost _ _ _ NCOM.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) <=
IBF_NP F Δ
move : (RT _ _ BUSY) (BUSY) => [FIX RTC] [[/andP [LE1 LE2] _] _].Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) <=
IBF_NP F Δ
have RleF : task_rtct tsk <= F.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2
task_rtct tsk <= F
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2
task_rtct tsk <= F
apply cumulative_service_ge_delta with (j := j) (t := t1) (sched := sched) => //.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2
task_rtct tsk <= service_during sched j t1 (t1 + F)
rewrite -[X in _ <= X]add0n.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2
task_rtct tsk <=
0 + service_during sched j t1 (t1 + F)
by erewrite <-cumulative_service_before_job_arrival_zero;
first erewrite service_during_cat with (t1 := 0 ) => //; auto ; lia . } Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) <=
IBF_NP F Δ
rewrite /IBF_NP addnBAC // leq_subRL_impl // addnC.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) +
task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
have [NEQ1|NEQ1] := leqP t2 (t1 + F); last have [NEQ2|NEQ2] := leqP F Δ.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t2 <= t1 + F
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) +
task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t2 <= t1 + F
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) +
task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
rewrite -leq_subLR in NEQ1.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t2 - t1 <= F
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) +
task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
rewrite -{1 }(leqRW NEQ1) (leqRW RTC) (leqRW (service_at_most_cost _ _ _ _ _)) => //.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t2 - t1 <= F
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) +
job_cost j <= t2 - t1 + (Δ - SBF Δ - (F - SBF F))
rewrite (leqRW (cumulative_interference_sub _ _ _ _ t1 t2 _ _)) => //.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t2 - t1 <= F
cumul_cond_interference (fun => xpredT) j t1 t2 +
job_cost j <= t2 - t1 + (Δ - SBF Δ - (F - SBF F))
rewrite (leqRW (service_within_busy_interval_ge_job_cost _ _ _ _ _ _ _)) => //.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t2 - t1 <= F
cumul_cond_interference (fun => xpredT) j t1 t2 +
service_during sched j t1 t2 <=
t2 - t1 + (Δ - SBF Δ - (F - SBF F))
have LLL : (t1 < t2) by lia .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t2 - t1 <= F LLL : t1 < t2
cumul_cond_interference (fun => xpredT) j t1 t2 +
service_during sched j t1 t2 <=
t2 - t1 + (Δ - SBF Δ - (F - SBF F))
interval_to_duration t1 t2 k. Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j k : nat LT : t1 + Δ < t1 + k BUSY : busy_interval sched j t1 (t1 + k) NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t1 + k RleF : task_rtct tsk <= F NEQ1 : t1 + k - t1 <= F
cumul_cond_interference (fun => xpredT) j t1 (t1 + k) +
service_during sched j t1 (t1 + k) <=
t1 + k - t1 + (Δ - SBF Δ - (F - SBF F))
by rewrite addnC (leqRW (service_and_interference_bound _ _ _ _ _ _ _ _ _ _ _ _)) => //; lia . } Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) +
task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) +
task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
rewrite addnC -{1 }(leqRW FIX) -addnA leq_add2l /IBF_P.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) <=
F - SBF F + intra_IBF (job_arrival j - t1) F +
(Δ - SBF Δ - (F - SBF F))
rewrite (@addnC (_ - _) _) -addnA subnKC; last by apply complement_SBF_monotone.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) <=
intra_IBF (job_arrival j - t1) F + (Δ - SBF Δ)
rewrite -/(cumulative_interference _ _ _).Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
cumulative_interference j t1 (t1 + Δ) <=
intra_IBF (job_arrival j - t1) F + (Δ - SBF Δ)
erewrite <-blackout_plus_local_is_interference_cumul with (t2 := t2) => //; last by apply BUSY.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
blackout_during sched t1 (t1 + Δ) +
cumul_intra_interference sched j t1 (t1 + Δ) <=
intra_IBF (job_arrival j - t1) F + (Δ - SBF Δ)
rewrite addnC leq_add //; last first .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
blackout_during sched t1 (t1 + Δ) <= Δ - SBF Δ
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
blackout_during sched t1 (t1 + Δ) <= Δ - SBF Δ
by eapply blackout_during_bound with (t2 := t2) => //; split ; [ | apply BUSY]. } Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
cumul_intra_interference sched j t1 (t1 + Δ) <=
intra_IBF (job_arrival j - t1) F
rewrite /cumul_intra_interference (cumulative_interference_cat _ j (t1 + F)) //=; last by lia .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
cumul_cond_interference (fun => [eta has_supply sched])
j t1 (t1 + F) +
cumul_cond_interference (fun => [eta has_supply sched])
j (t1 + F) (t1 + Δ) <=
intra_IBF (job_arrival j - t1) F
rewrite -!/(cumul_intra_interference _ _ _ _).Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
cumul_intra_interference sched j t1 (t1 + F) +
cumul_intra_interference sched j (t1 + F) (t1 + Δ) <=
intra_IBF (job_arrival j - t1) F
rewrite (no_intra_interference_after_F _ _ _ _ _ t2) //; last by move : BUSY => [].Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
cumul_intra_interference sched j t1 (t1 + F) + 0 <=
intra_IBF (job_arrival j - t1) F
rewrite addn0 //; eapply H_intra_supply_interference_is_bounded => //.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
~~ completed_by sched j (t1 + F)
- Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
~~ completed_by sched j (t1 + F)
by move : NCOM; apply contra, completion_monotonic; lia .
- Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ
relative_arrival_time_of_job_is_A sched j
(job_arrival j - t1)
move => t1' t2' BUSY'.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ t1', t2' : instant BUSY' : busy_interval sched j t1' t2'
job_arrival j - t1 = job_arrival j - t1'
have [EQ1 E2] := busy_interval_is_unique _ _ _ _ _ _ BUSY BUSY'.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : F <= Δ t1', t2' : instant BUSY' : busy_interval sched j t1' t2' EQ1 : t1 = t1' E2 : t2 = t2'
job_arrival j - t1 = job_arrival j - t1'
by subst ; lia . } Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : Δ < F
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) +
task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : Δ < F
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) +
task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
rewrite addnC (leqRW RTC); eapply leq_trans.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : Δ < F
service sched j (t1 + F) +
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) <=
?n
- Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : Δ < F
service sched j (t1 + F) +
cumul_cond_interference (fun => xpredT) j t1 (t1 + Δ) <=
?n
by erewrite leq_add2l; apply cumulative_interference_sub with (bl := t1) (br := t1 + F); lia .
- Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : Δ < F
service sched j (t1 + F) +
cumul_cond_interference (fun => xpredT) j t1 (t1 + F) <=
F + (Δ - SBF Δ - (F - SBF F))
erewrite no_service_before_busy_interval => //.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)USER : unit_service_proc_model PState t1, t2 : instant Δ : nat j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j BUSY : busy_interval sched j t1 t2 LT : t1 + Δ < t2 NCOM : ~~ completed_by sched j (t1 + Δ) F : nat RT : relative_time_to_reach_rtct sched tsk IBF_P j F POS : job_cost_positive j FIX : task_rtct tsk + IBF_P (job_arrival j - t1) F <=
F RTC : task_rtct tsk <= service sched j (t1 + F) LE1 : t1 <= job_arrival j LE2 : job_arrival j < t2 RleF : task_rtct tsk <= F NEQ1 : t1 + F < t2 NEQ2 : Δ < F
service_during sched j t1 (t1 + F) +
cumul_cond_interference (fun => xpredT) j t1 (t1 + F) <=
F + (Δ - SBF Δ - (F - SBF F))
by rewrite (leqRW (service_and_interference_bound _ _ _ _ _ _ _ _ _ _ _ _)) => //; lia . }
Qed .
(** Next, we prove that [F] is bounded by [task_cost tsk + IBF_NP
F Δ] for any [F] and [Δ]. As explained in file
[analysis/abstract/abstract_rta], this shows that the second
stage indeed takes into account service received in the first
stage. *)
Lemma IBF_P_sol_le_IBF_NP :
forall (F Δ : duration),
F <= task_cost tsk + IBF_NP F Δ.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
forall F Δ : duration, F <= task_cost tsk + IBF_NP F Δ
Proof .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
forall F Δ : duration, F <= task_cost tsk + IBF_NP F Δ
move => F Δ.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)F, Δ : duration
F <= task_cost tsk + IBF_NP F Δ
have [NEQ|NEQ] := leqP F (task_rtct tsk).Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)F, Δ : duration NEQ : F <= task_rtct tsk
F <= task_cost tsk + IBF_NP F Δ
- Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)F, Δ : duration NEQ : F <= task_rtct tsk
F <= task_cost tsk + IBF_NP F Δ
apply : leq_trans; [apply NEQ | ].Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)F, Δ : duration NEQ : F <= task_rtct tsk
task_rtct tsk <= task_cost tsk + IBF_NP F Δ
by apply : leq_trans; [apply H_valid_run_to_completion_threshold | lia ].
- Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)F, Δ : duration NEQ : task_rtct tsk < F
F <= task_cost tsk + IBF_NP F Δ
rewrite addnA (@addnBCA _ F _); try lia .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)F, Δ : duration NEQ : task_rtct tsk < F
task_rtct tsk <= task_cost tsk
by apply H_valid_run_to_completion_threshold; lia .
Qed .
(** Next we prove that [H_R_is_maximum_rs] implies [H_R_is_maximum]. *)
Lemma max_in_rs_hypothesis_impl_max_in_arta_hypothesis :
forall (A : duration),
is_in_search_space L IBF_P A ->
exists (F : duration),
task_rtct tsk + (F - SBF F + intra_IBF A F) <= F
/\ task_cost tsk + (F - task_rtct tsk + (A + R - SBF (A + R) - (F - SBF F))) <= A + R.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
forall A : duration,
is_in_search_space L IBF_P A ->
exists F : duration,
task_rtct tsk + (F - SBF F + intra_IBF A F) <= F /\
task_cost tsk +
(F - task_rtct tsk +
(A + R - SBF (A + R) - (F - SBF F))) <= A + R
Proof .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
forall A : duration,
is_in_search_space L IBF_P A ->
exists F : duration,
task_rtct tsk + (F - SBF F + intra_IBF A F) <= F /\
task_cost tsk +
(F - task_rtct tsk +
(A + R - SBF (A + R) - (F - SBF F))) <= A + R
move => A SP.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A
exists F : duration,
task_rtct tsk + (F - SBF F + intra_IBF A F) <= F /\
task_cost tsk +
(F - task_rtct tsk +
(A + R - SBF (A + R) - (F - SBF F))) <= A + R
case : (H_R_is_maximum_rs A SP) => [F [EQ0 [EQ1 EQ2]]].Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
exists F : duration,
task_rtct tsk + (F - SBF F + intra_IBF A F) <= F /\
task_cost tsk +
(F - task_rtct tsk +
(A + R - SBF (A + R) - (F - SBF F))) <= A + R
exists F ; split .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
task_rtct tsk + (F - SBF F + intra_IBF A F) <= F
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
task_rtct tsk + (F - SBF F + intra_IBF A F) <= F
have -> : forall a b c , a + (b + c) = (a + c) + b by lia .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
task_rtct tsk + intra_IBF A F + (F - SBF F) <= F
have -T : forall a b c , c >= b -> (a <= c - b) -> (a + b <= c); [by lia | apply : T; first by lia ].Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
task_rtct tsk + intra_IBF A F <= F - (F - SBF F)
have LE : SBF F <= F by eapply sbf_bounded_by_duration; eauto .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R) LE : SBF F <= F
task_rtct tsk + intra_IBF A F <= F - (F - SBF F)
by rewrite (leqRW EQ1); lia .
} Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
task_cost tsk +
(F - task_rtct tsk +
(A + R - SBF (A + R) - (F - SBF F))) <= A + R
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
task_cost tsk +
(F - task_rtct tsk +
(A + R - SBF (A + R) - (F - SBF F))) <= A + R
have JJ := IBF_P_sol_le_IBF_NP F (A + R); rewrite /IBF_NP in JJ.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R) JJ : F <=
task_cost tsk +
(F - task_rtct tsk +
(A + R - SBF (A + R) - (F - SBF F)))
task_cost tsk +
(F - task_rtct tsk +
(A + R - SBF (A + R) - (F - SBF F))) <= A + R
rewrite addnA; rewrite addnA in JJ.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R) JJ : F <=
task_cost tsk + (F - task_rtct tsk) +
(A + R - SBF (A + R) - (F - SBF F))
task_cost tsk + (F - task_rtct tsk) +
(A + R - SBF (A + R) - (F - SBF F)) <= A + R
have T: forall a b c , c >= b -> (a <= c - b) -> (a + b <= c); [by lia | apply : T; first by lia ].Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R) JJ : F <=
task_cost tsk + (F - task_rtct tsk) +
(A + R - SBF (A + R) - (F - SBF F))
task_cost tsk + (F - task_rtct tsk) <=
A + R - (A + R - SBF (A + R) - (F - SBF F))
rewrite subnA; [ | by apply complement_SBF_monotone | by lia ].Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R) JJ : F <=
task_cost tsk + (F - task_rtct tsk) +
(A + R - SBF (A + R) - (F - SBF F))
task_cost tsk + (F - task_rtct tsk) <=
A + R - (A + R - SBF (A + R)) + (F - SBF F)
have LE : forall Δ , SBF Δ <= Δ by move => ?; eapply sbf_bounded_by_duration; eauto .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R) JJ : F <=
task_cost tsk + (F - task_rtct tsk) +
(A + R - SBF (A + R) - (F - SBF F)) LE : forall Δ : duration, SBF Δ <= Δ
task_cost tsk + (F - task_rtct tsk) <=
A + R - (A + R - SBF (A + R)) + (F - SBF F)
rewrite subKn; last by eauto .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R) JJ : F <=
task_cost tsk + (F - task_rtct tsk) +
(A + R - SBF (A + R) - (F - SBF F)) LE : forall Δ : duration, SBF Δ <= Δ
task_cost tsk + (F - task_rtct tsk) <=
SBF (A + R) + (F - SBF F)
have T: forall a b c d e , b >= e -> b >= c -> e + (a - c) <= d -> a + (b - c) <= d + (b - e) by lia .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R) JJ : F <=
task_cost tsk + (F - task_rtct tsk) +
(A + R - SBF (A + R) - (F - SBF F)) LE : forall Δ : duration, SBF Δ <= ΔT : forall a b c d e : nat,
e <= b ->
c <= b ->
e + (a - c) <= d -> a + (b - c) <= d + (b - e)
task_cost tsk + (F - task_rtct tsk) <=
SBF (A + R) + (F - SBF F)
apply : T => //.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R) JJ : F <=
task_cost tsk + (F - task_rtct tsk) +
(A + R - SBF (A + R) - (F - SBF F)) LE : forall Δ : duration, SBF Δ <= Δ
task_rtct tsk <= F
eapply leq_trans; last by apply LE.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)A : duration SP : is_in_search_space L IBF_P A F : duration EQ0 : F <= A + R EQ1 : task_rtct tsk + intra_IBF A F <= SBF F EQ2 : SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R) JJ : F <=
task_cost tsk + (F - task_rtct tsk) +
(A + R - SBF (A + R) - (F - SBF F)) LE : forall Δ : duration, SBF Δ <= Δ
task_rtct tsk <= SBF F
by rewrite -(leqRW EQ1); lia .
}
Qed .
End RSaRTAPremises .
(** Finally, we apply the [uniprocessor_response_time_bound]
theorem, and using the lemmas above, we prove that all the
requirements are satisfied. So, [R] is a response time bound. *)
Theorem uniprocessor_response_time_bound_restricted_supply :
task_response_time_bound arr_seq sched tsk R.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
task_response_time_bound arr_seq sched tsk R
Proof .Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
task_response_time_bound arr_seq sched tsk R
eapply uniprocessor_response_time_bound => //.Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
job_interference_is_bounded_by arr_seq sched tsk
?IBF_P (relative_arrival_time_of_job_is_A sched)
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
job_interference_is_bounded_by arr_seq sched tsk
?IBF_P (relative_arrival_time_of_job_is_A sched)
by apply IBF_P_bounds_interference. } Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
job_interference_is_bounded_by arr_seq sched tsk
?IBF_NP
(relative_time_to_reach_rtct sched tsk IBF_P)
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
job_interference_is_bounded_by arr_seq sched tsk
?IBF_NP
(relative_time_to_reach_rtct sched tsk IBF_P)
by apply IBF_NP_bounds_interference. } Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
forall (F : nat) (Δ : duration),
F <= task_cost tsk + IBF_NP F Δ
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
forall (F : nat) (Δ : duration),
F <= task_cost tsk + IBF_NP F Δ
by apply IBF_P_sol_le_IBF_NP. } Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
forall A : duration,
is_in_search_space L IBF_P A ->
exists F : duration,
task_rtct tsk + IBF_P A F <= F /\
task_cost tsk + IBF_NP F (A + R) <= A + R
{ Task : TaskType H : TaskCost Task H0 : TaskRunToCompletionThreshold Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job H4 : JobPreemptable Job PState : ProcessorState Job H_unit_supply_proc_model : unit_supply_proc_model
PState H_consumed_supply_proc_model : fully_consuming_proc_model PState arr_seq : arrival_sequence Job H_valid_arrivals : valid_arrival_sequence arr_seq sched : schedule PState H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence
sched arr_seq H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute
sched H_completed_jobs_dont_execute : completed_jobs_dont_execute
sched H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq ts : seq Task tsk : Task H_tsk_in_ts : tsk \in ts H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold
arr_seq tsk H5 : Interference Job H6 : InterferingWorkload Job H_work_conserving : work_conserving arr_seq sched L : duration H_busy_interval_exists : busy_intervals_are_bounded_by
arr_seq sched tsk L SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF intra_IBF : duration -> duration -> duration H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by
arr_seq sched
tsk intra_IBF IBF_P := fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat IBF_NP := fun F Δ : duration =>
F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat is_in_search_space_rs := is_in_search_space L IBF_P : nat -> Prop R : duration H_R_is_maximum_rs : forall A : duration,
is_in_search_space_rs A ->
exists F : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <=
SBF F /\
SBF F +
(task_cost tsk - task_rtct tsk) <=
SBF (A + R)
forall A : duration,
is_in_search_space L IBF_P A ->
exists F : duration,
task_rtct tsk + IBF_P A F <= F /\
task_cost tsk + IBF_NP F (A + R) <= A + R
by apply max_in_rs_hypothesis_impl_max_in_arta_hypothesis. }
Qed .
End AbstractRTARestrictedSupply .