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.model.priority.edf.[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.model.task.absolute_deadline.
Require Export prosa.analysis.definitions.busy_interval.edf_pi_bound.
Require Export prosa.analysis.abstract .restricted_supply.abstract_rta.
Require Export prosa.analysis.abstract .restricted_supply.bounded_bi.aux.
Require Export prosa.analysis.definitions.sbf.busy.
(** * Sufficient Condition for Bounded Busy Intervals for RS EDF *)
(** In this section, we show that the existence of [L] such that
[total_rbf L <= SBF L /\ longest_busy_interval_with_pi <= SBF L],
where [longest_busy_interval_with_pi] is the length of the longest
busy interval starting with a priority inversion (w.r.t. a job of
a task under analysis) and [SBF] is a supply-bound function, is a
sufficient condition for the existence of bounded busy intervals
under EDF scheduling with a restricted-supply processor model.
The proof uses the following observation. Consider the beginning
of a busy interval of a job [j] to be analyzed. If there is
service inversion, one can derive an upper bound on the relative
arrival of job [j], which in turn can be used to derive a bound on
the total higher-or-equal priority workload
([longest_busy_interval_with_pi]). If there is no service
inversion, we use the standard fixpoint approach with [total_rbf L]. *)
Section BoundedBusyIntervals .
(** Consider any type of tasks ... *)
Context {Task : TaskType}.
Context `{TaskCost Task}.
Context `{TaskDeadline Task}.
(** ... and any type of jobs associated with these tasks. *)
Context {Job : JobType}.
Context `{JobTask Job Task}.
Context `{JobArrival Job}.
Context `{JobCost Job}.
(** For brevity, let's denote the relative deadline of a task as [D]. *)
Let D tsk := task_deadline tsk.
(** Consider any kind of fully supply-consuming unit-supply
uniprocessor model. *)
Context `{PState : ProcessorState Job}.
Hypothesis H_uniprocessor_proc_model : uniprocessor_model PState.
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_arrival_sequence : valid_arrival_sequence arr_seq.
(** Next, consider a schedule of this arrival sequence, ... *)
Variable sched : schedule PState.
(** ... allow for any work-bearing notion of job readiness, ... *)
Context `{!JobReady Job PState}.
Hypothesis H_job_ready : work_bearing_readiness arr_seq sched.
(** ... and assume that the schedule is valid. *)
Hypothesis H_sched_valid : valid_schedule sched arr_seq.
(** Assume that jobs have bounded non-preemptive segments. *)
Context `{JobPreemptable Job}.
Context `{TaskMaxNonpreemptiveSegment Task}.
Hypothesis H_valid_preemption_model : valid_preemption_model arr_seq sched.
Hypothesis H_valid_model_with_bounded_nonpreemptive_segments :
valid_model_with_bounded_nonpreemptive_segments arr_seq sched.
(** Furthermore, assume that the schedule respects the scheduling policy. *)
Hypothesis H_respects_policy : respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job).
(** Recall that [busy_intervals_are_bounded_by] is an abstract
notion. Hence, we need to introduce interference and interfering
workload. We will use the restricted-supply instantiations. *)
(** We say that job [j] incurs interference at time [t] iff it
cannot execute due to (1) the lack of supply at time [t], (2)
service inversion (i.e., a lower-priority job receiving service
at [t]), or a higher-or-equal-priority job receiving service. *)
#[local] Instance rs_jlfp_interference : Interference Job :=
rs_jlfp_interference arr_seq sched.
(** The interfering workload, in turn, is defined as the sum of the
blackout predicate, service inversion predicate, and the
interfering workload of jobs with higher or equal priority. *)
#[local] Instance rs_jlfp_interfering_workload : InterferingWorkload Job :=
rs_jlfp_interfering_workload arr_seq sched.
(** Assume that the schedule is work-conserving in the abstract sense. *)
Hypothesis H_work_conserving : abstract .definitions.work_conserving arr_seq sched.
(** Consider an arbitrary task set [ts], ... *)
Variable ts : seq Task.
(** ... assume that all jobs come from the task set, ... *)
Hypothesis H_all_jobs_from_taskset : all_jobs_from_taskset arr_seq ts.
(** ... and that the cost of a job does not exceed its task's WCET. *)
Hypothesis H_valid_job_cost : arrivals_have_valid_job_costs arr_seq.
(** Let [max_arrivals] be a family of valid arrival curves. *)
Context `{MaxArrivals Task}.
Hypothesis H_valid_arrival_curve : valid_taskset_arrival_curve ts max_arrivals.
Hypothesis H_is_arrival_curve : taskset_respects_max_arrivals arr_seq ts.
(** Let [tsk] be any task in [ts] that is to be analyzed. *)
Variable tsk : Task.
Hypothesis H_tsk_in_ts : tsk \in ts.
(** 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.
(** First, we show that the constant [longest_busy_interval_with_pi
ts tsk] indeed bounds the cumulative interference incurred by
job [j]. *)
Section LongestBusyIntervalWithPIIsValid .
(** Consider any job [j] of task [tsk] that has a positive job
cost and is in the arrival sequence. *)
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.
(** Let <<[t1, t2)>> be a busy-interval prefix. *)
Variable t1 t2 : instant.
Hypothesis H_busy_prefix : busy_interval_prefix arr_seq sched j t1 t2.
(** Consider an interval <<[t1, t1 + δ) ⊆ [t1, t2)>>. *)
Variable δ : duration.
Hypothesis H_interval_in_busy_prefix : t1 + δ <= t2.
(** Assume that cumulative service inversion of job [j] in this
interval is positive. *)
Hypothesis H_positive_service_inversion :
cumulative_service_inversion arr_seq sched j t1 (t1 + δ) > 0 .
(** The LHS of the following inequality represents all possible
interference as well as the cost of the job itself in a prefix
of length [δ]. On the RHS of the inequality, there is a
constant [longest_busy_interval_with_pi]. We prove that this
inequality is indeed true. This implies that if the cumulative
service inversion of job [j] is positive, its busy interval
cannot possibly be longer than
[longest_busy_interval_with_pi]. *)
Lemma longest_bi_with_pi_bound_is_valid :
cumulative_service_inversion arr_seq sched j t1 (t1 + δ)
+ (cumulative_other_hep_jobs_interfering_workload arr_seq j t1 (t1 + δ)
+ workload_of_job arr_seq j t1 (t1 + δ))
<= longest_busy_interval_with_pi ts tsk.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF 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_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : 0 <
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ)
cumulative_service_inversion arr_seq sched j t1
(t1 + δ) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + δ) +
workload_of_job arr_seq j t1 (t1 + δ)) <=
longest_busy_interval_with_pi ts tsk
Proof .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF 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_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : 0 <
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ)
cumulative_service_inversion arr_seq sched j t1
(t1 + δ) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + δ) +
workload_of_job arr_seq j t1 (t1 + δ)) <=
longest_busy_interval_with_pi ts tsk
move : (H_positive_service_inversion) => PP.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF 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_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion, PP : 0 <
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ)
cumulative_service_inversion arr_seq sched j t1
(t1 + δ) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + δ) +
workload_of_job arr_seq j t1 (t1 + δ)) <=
longest_busy_interval_with_pi ts tsk
eapply cumulative_service_inversion_from_one_job in H_positive_service_inversion => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF 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_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)
cumulative_service_inversion arr_seq sched j t1
(t1 + δ) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + δ) +
workload_of_job arr_seq j t1 (t1 + δ)) <=
longest_busy_interval_with_pi ts tsk
move : H_positive_service_inversion => [jlp [ARR [LP EQs]]].Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF 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_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ)
cumulative_service_inversion arr_seq sched j t1
(t1 + δ) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + δ) +
workload_of_job arr_seq j t1 (t1 + δ)) <=
longest_busy_interval_with_pi ts tsk
move : (H_job_of_tsk) => /eqP TSK; unfold longest_busy_interval_with_pi, D in *; subst tsk.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ)
cumulative_service_inversion arr_seq sched j t1
(t1 + δ) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + δ) +
workload_of_job arr_seq j t1 (t1 + δ)) <=
\max_(tsk_lp <- ts | task_deadline (job_task j) <
task_deadline tsk_lp)
(task_max_nonpreemptive_segment tsk_lp - 1 +
\sum_(tsk_hp <- ts | task_deadline tsk_hp <=
task_deadline tsk_lp)
task_request_bound_function tsk_hp
(task_deadline tsk_lp - task_deadline tsk_hp))
move : (H_busy_prefix) => [_ [_ [_ /andP [ARRj _]]]].Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j
cumulative_service_inversion arr_seq sched j t1
(t1 + δ) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + δ) +
workload_of_job arr_seq j t1 (t1 + δ)) <=
\max_(tsk_lp <- ts | task_deadline (job_task j) <
task_deadline tsk_lp)
(task_max_nonpreemptive_segment tsk_lp - 1 +
\sum_(tsk_hp <- ts | task_deadline tsk_hp <=
task_deadline tsk_lp)
task_request_bound_function tsk_hp
(task_deadline tsk_lp - task_deadline tsk_hp))
have [t_sched [_ SCHEDjlp]]: exists t , t1 <= t < t1 + δ /\ scheduled_at sched jlp t
by apply cumulative_service_implies_scheduled; rewrite -EQs.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
cumulative_service_inversion arr_seq sched j t1
(t1 + δ) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + δ) +
workload_of_job arr_seq j t1 (t1 + δ)) <=
\max_(tsk_lp <- ts | task_deadline (job_task j) <
task_deadline tsk_lp)
(task_max_nonpreemptive_segment tsk_lp - 1 +
\sum_(tsk_hp <- ts | task_deadline tsk_hp <=
task_deadline tsk_lp)
task_request_bound_function tsk_hp
(task_deadline tsk_lp - task_deadline tsk_hp))
apply leq_bigmax_sup; exists (job_task jlp ); split ; last split .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
job_task jlp \in ts
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
job_task jlp \in ts
by apply H_all_jobs_from_taskset. } Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
task_deadline (job_task j) <
task_deadline (job_task jlp)
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
task_deadline (job_task j) <
task_deadline (job_task jlp)
move_neq_up LP'; move : LP => /negP LP; apply : LP. Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched LP' : task_deadline (job_task jlp) <=
task_deadline (job_task j)
hep_job jlp j
by rewrite /hep_job /EDF /job_deadline /job_deadline_from_task_deadline; lia . } Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
cumulative_service_inversion arr_seq sched j t1
(t1 + δ) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + δ) +
workload_of_job arr_seq j t1 (t1 + δ)) <=
task_max_nonpreemptive_segment (job_task jlp) - 1 +
\sum_(tsk_hp <- ts | task_deadline tsk_hp <=
task_deadline (job_task jlp))
task_request_bound_function tsk_hp
(task_deadline (job_task jlp) -
task_deadline tsk_hp)
apply leq_add.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
cumulative_service_inversion arr_seq sched j t1
(t1 + δ) <=
task_max_nonpreemptive_segment (job_task jlp) - 1
- Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
cumulative_service_inversion arr_seq sched j t1
(t1 + δ) <=
task_max_nonpreemptive_segment (job_task jlp) - 1
rewrite EQs (leqRW (lp_job_bounded_service _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _)) => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
job_max_nonpreemptive_segment jlp - 1 <=
task_max_nonpreemptive_segment (job_task jlp) - 1
by rewrite leq_sub2r //; apply H_valid_model_with_bounded_nonpreemptive_segments.
- Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
cumulative_other_hep_jobs_interfering_workload arr_seq
j t1 (t1 + δ) +
workload_of_job arr_seq j t1 (t1 + δ) <=
\sum_(tsk_hp <- ts | task_deadline tsk_hp <=
task_deadline (job_task jlp))
task_request_bound_function tsk_hp
(task_deadline (job_task jlp) -
task_deadline tsk_hp)
rewrite addnC cumulative_iw_hep_eq_workload_of_ohep workload_job_and_ahep_eq_workload_hep //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
workload_of_hep_jobs arr_seq j t1 (t1 + δ) <=
\sum_(tsk_hp <- ts | task_deadline tsk_hp <=
task_deadline (job_task jlp))
task_request_bound_function tsk_hp
(task_deadline (job_task jlp) -
task_deadline tsk_hp)
apply leq_trans with (workload_of_jobs (hep_job^~ jlp) (arrivals_between arr_seq t1 (t1 + δ))).Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
workload_of_hep_jobs arr_seq j t1 (t1 + δ) <=
workload_of_jobs (hep_job^~ jlp)
(arrivals_between arr_seq t1 (t1 + δ))
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
workload_of_hep_jobs arr_seq j t1 (t1 + δ) <=
workload_of_jobs (hep_job^~ jlp)
(arrivals_between arr_seq t1 (t1 + δ))
apply workload_of_jobs_weaken => jo; move : LP; clear .Task : TaskType H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job j, jlp, jo : Job
~~ hep_job jlp j -> hep_job jo j -> hep_job jo jlp
by rewrite /hep_job /EDF /job_deadline /job_deadline_from_task_deadline; lia . } Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
workload_of_jobs (hep_job^~ jlp)
(arrivals_between arr_seq t1 (t1 + δ)) <=
\sum_(tsk_hp <- ts | task_deadline tsk_hp <=
task_deadline (job_task jlp))
task_request_bound_function tsk_hp
(task_deadline (job_task jlp) -
task_deadline tsk_hp)
erewrite workload_of_jobs_partitioned_by_tasks with (ts := undup ts).Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
\sum_(tsk_o <- undup ts | ?Q tsk_o)
workload_of_jobs
(fun j : Job =>
hep_job j jlp && (job_task j == tsk_o))
(arrivals_between arr_seq t1 (t1 + δ)) <=
\sum_(tsk_hp <- ts | task_deadline tsk_hp <=
task_deadline (job_task jlp))
task_request_bound_function tsk_hp
(task_deadline (job_task jlp) -
task_deadline tsk_hp)
+ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
\sum_(tsk_o <- undup ts | ?Q tsk_o)
workload_of_jobs
(fun j : Job =>
hep_job j jlp && (job_task j == tsk_o))
(arrivals_between arr_seq t1 (t1 + δ)) <=
\sum_(tsk_hp <- ts | task_deadline tsk_hp <=
task_deadline (job_task jlp))
task_request_bound_function tsk_hp
(task_deadline (job_task jlp) -
task_deadline tsk_hp)
eapply leq_trans; first by apply sum_le_subseq, undup_subseq.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
\sum_(x <- ts | ?Q x)
(fun x0 : Task =>
workload_of_jobs
(fun j : Job =>
hep_job j jlp && (job_task j == x0))
(arrivals_between arr_seq t1 (t1 + δ))) x <=
\sum_(tsk_hp <- ts | task_deadline tsk_hp <=
task_deadline (job_task jlp))
task_request_bound_function tsk_hp
(task_deadline (job_task jlp) -
task_deadline tsk_hp)
apply leq_sum_seq => tsk_o INo HEP; rewrite -(leqRW (workload_le_rbf' _ _ _ _ _ _ _)) //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched tsk_o : Task INo : tsk_o \in ts HEP : task_deadline tsk_o <=
task_deadline (job_task jlp)
workload_of_jobs
(fun j : Job =>
hep_job j jlp && (job_task j == tsk_o))
(arrivals_between arr_seq t1 (t1 + δ)) <=
workload_of_jobs
(fun j0 : Job => ?Goal3 j0 && (job_task j0 == tsk_o))
(arrivals_between arr_seq ?Goal4
(?Goal4 +
(task_deadline (job_task jlp) -
task_deadline tsk_o)))
have [A | B] := (leqP δ (task_deadline (job_task jlp) - task_deadline tsk_o)).Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched tsk_o : Task INo : tsk_o \in ts HEP : task_deadline tsk_o <=
task_deadline (job_task jlp) A : δ <=
task_deadline (job_task jlp) - task_deadline tsk_o
workload_of_jobs
(fun j : Job =>
hep_job j jlp && (job_task j == tsk_o))
(arrivals_between arr_seq t1 (t1 + δ)) <=
workload_of_jobs
(fun j0 : Job => ?Goal3 j0 && (job_task j0 == tsk_o))
(arrivals_between arr_seq ?Goal4
(?Goal4 +
(task_deadline (job_task jlp) -
task_deadline tsk_o)))
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched tsk_o : Task INo : tsk_o \in ts HEP : task_deadline tsk_o <=
task_deadline (job_task jlp) A : δ <=
task_deadline (job_task jlp) - task_deadline tsk_o
workload_of_jobs
(fun j : Job =>
hep_job j jlp && (job_task j == tsk_o))
(arrivals_between arr_seq t1 (t1 + δ)) <=
workload_of_jobs
(fun j0 : Job => ?Goal3 j0 && (job_task j0 == tsk_o))
(arrivals_between arr_seq ?Goal4
(?Goal4 +
(task_deadline (job_task jlp) -
task_deadline tsk_o)))
by apply workload_of_jobs_reduce_range; lia . } Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched tsk_o : Task INo : tsk_o \in ts HEP : task_deadline tsk_o <=
task_deadline (job_task jlp) B : task_deadline (job_task jlp) - task_deadline tsk_o <
δ
workload_of_jobs
(fun j : Job =>
hep_job j jlp && (job_task j == tsk_o))
(arrivals_between arr_seq t1 (t1 + δ)) <=
workload_of_jobs
(fun j : Job =>
(hep_job^~ jlp) j && (job_task j == tsk_o))
(arrivals_between arr_seq t1
(t1 +
(task_deadline (job_task jlp) -
task_deadline tsk_o)))
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched tsk_o : Task INo : tsk_o \in ts HEP : task_deadline tsk_o <=
task_deadline (job_task jlp) B : task_deadline (job_task jlp) - task_deadline tsk_o <
δ
workload_of_jobs
(fun j : Job =>
hep_job j jlp && (job_task j == tsk_o))
(arrivals_between arr_seq t1 (t1 + δ)) <=
workload_of_jobs
(fun j : Job =>
(hep_job^~ jlp) j && (job_task j == tsk_o))
(arrivals_between arr_seq t1
(t1 +
(task_deadline (job_task jlp) -
task_deadline tsk_o)))
have EQt: forall a b , a = b -> a <= b; [by lia | apply : EQt].Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched tsk_o : Task INo : tsk_o \in ts HEP : task_deadline tsk_o <=
task_deadline (job_task jlp) B : task_deadline (job_task jlp) - task_deadline tsk_o <
δ
workload_of_jobs
(fun j : Job =>
hep_job j jlp && (job_task j == tsk_o))
(arrivals_between arr_seq t1 (t1 + δ)) =
workload_of_jobs
(fun j : Job =>
hep_job j jlp && (job_task j == tsk_o))
(arrivals_between arr_seq t1
(t1 +
(task_deadline (job_task jlp) -
task_deadline tsk_o)))
apply workload_of_jobs_nil_tail => //; [lia | move => jo IN LE].Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched tsk_o : Task INo : tsk_o \in ts HEP : task_deadline tsk_o <=
task_deadline (job_task jlp) B : task_deadline (job_task jlp) - task_deadline tsk_o <
δ jo : Job IN : jo \in arrivals_between arr_seq t1 (t1 + δ) LE : t1 +
(task_deadline (job_task jlp) -
task_deadline tsk_o) <=
job_arrival jo
~~ (hep_job jo jlp && (job_task jo == tsk_o))
have [EQ|NEQ] := (@eqP _ (job_task jo) (tsk_o)); last by rewrite andbF.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched tsk_o : Task INo : tsk_o \in ts HEP : task_deadline tsk_o <=
task_deadline (job_task jlp) B : task_deadline (job_task jlp) - task_deadline tsk_o <
δ jo : Job IN : jo \in arrivals_between arr_seq t1 (t1 + δ) LE : t1 +
(task_deadline (job_task jlp) -
task_deadline tsk_o) <=
job_arrival jo EQ : job_task jo = tsk_o
~~ (hep_job jo jlp && true)
rewrite andbT /hep_job /EDF /job_deadline /job_deadline_from_task_deadline -ltnNge.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched tsk_o : Task INo : tsk_o \in ts HEP : task_deadline tsk_o <=
task_deadline (job_task jlp) B : task_deadline (job_task jlp) - task_deadline tsk_o <
δ jo : Job IN : jo \in arrivals_between arr_seq t1 (t1 + δ) LE : t1 +
(task_deadline (job_task jlp) -
task_deadline tsk_o) <=
job_arrival jo EQ : job_task jo = tsk_o
job_arrival jlp + task_deadline (job_task jlp) <
job_arrival jo + task_deadline (job_task jo)
by subst tsk_o; rewrite /hep_job /EDF /job_deadline /job_deadline_from_task_deadline in LP; lia .
}
+ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
{in arrivals_between arr_seq t1 (t1 + δ),
forall j : Job, job_task j \in undup ts}
by move => jo IN; rewrite in_seq_equiv_undup;
apply : H_all_jobs_from_taskset; apply : in_arrivals_implies_arrived.
+ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
{in arrivals_between arr_seq t1 (t1 + δ),
forall j : Job,
hep_job j jlp ->
(fun i : Task =>
task_deadline i <= task_deadline (job_task jlp))
(job_task j)}
move => jo IN.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched jo : Job IN : jo \in arrivals_between arr_seq t1 (t1 + δ)
hep_job jo jlp ->
task_deadline (job_task jo) <=
task_deadline (job_task jlp)
have ARRjo : t1 <= job_arrival jo by apply : job_arrival_between_ge.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched jo : Job IN : jo \in arrivals_between arr_seq t1 (t1 + δ) ARRjo : t1 <= job_arrival jo
hep_job jo jlp ->
task_deadline (job_task jo) <=
task_deadline (job_task jlp)
rewrite /hep_job /D /EDF => T; move_neq_up LEQ; move_neq_down T.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched jo : Job IN : jo \in arrivals_between arr_seq t1 (t1 + δ) ARRjo : t1 <= job_arrival jo LEQ : task_deadline (job_task jlp) <
task_deadline (job_task jo)
job_deadline jlp < job_deadline jo
by rewrite /job_deadline /job_deadline_from_task_deadline; lia .
+ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
uniq (arrivals_between arr_seq t1 (t1 + δ))
by apply arrivals_uniq.
+ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts j : Job H_tsk_in_ts : job_task j \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched
(job_task j) SBF H_unit_SBF : unit_supply_bound_function SBF H_j_arrives : arrives_in arr_seq j H_job_of_tsk : job_of_task (job_task j) j H_job_cost_positive : job_cost_positive j t1, t2 : instant H_busy_prefix : busy_interval_prefix arr_seq sched j
t1 t2 δ : duration H_interval_in_busy_prefix : t1 + δ <= t2 H_positive_service_inversion : exists jlp : Job,
job_arrival jlp < t1 /\
~~ hep_job jlp j /\
cumulative_service_inversion
arr_seq sched j t1
(t1 + δ) =
service_during sched
jlp t1
(t1 + δ)PP : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + δ)jlp : Job ARR : job_arrival jlp < t1 LP : ~~ hep_job jlp j EQs : cumulative_service_inversion arr_seq sched j t1
(t1 + δ) =
service_during sched jlp t1 (t1 + δ) ARRj : t1 <= job_arrival j t_sched : nat SCHEDjlp : scheduled_at sched jlp t_sched
uniq (undup ts)
by apply undup_uniq.
Qed .
End LongestBusyIntervalWithPIIsValid .
(** We introduce the main assumption of this section. Let [L]
be any positive constant that satisfies two properties. *)
Variable L : duration.
Hypothesis H_L_positive : L > 0 .
(** First, we assume that [SBF L] bounds
[longest_busy_interval_with_pi ts tsk]. As discussed, when a
busy interval starts with service inversion, one can upper-bound
the total interfering workload that a job under analysis incurs
via [longest_busy_interval_with_pi ts tsk]. The time to consume
this workload is [SBF L]. *)
Hypothesis H_L_bounds_bi_with_pi : longest_busy_interval_with_pi ts tsk <= SBF L.
(** And second, we assume that [total_RBF L <= SBF L]. When there is
no service inversion at the beginning of a busy interval, one
can show that there is no carry-in workload (including the
lower-priority workload). This allows us to bound interfering
workload within a busy interval with [total_RBF L] without
adding an extra [+ blocking_bound] as in the case of the general
JLFP bound. *)
Hypothesis H_fixed_point : total_request_bound_function ts L <= SBF L.
(** In the following, we prove busy-interval boundedness via a case
analysis on two cases: (1) when the busy-interval prefix is at
least [L] time units long and (2) when the busy interval prefix
terminates earlier. In either case, we can show that the
busy-interval prefix is bounded. *)
Section StepByStepProof .
(** Consider any job [j] of task [tsk] that has a positive job
cost and is in the arrival sequence. *)
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.
(** As a preparation step, we show that [L] bounds the relative
arrival time of job [j]. *)
Section RelativeArrivalIsBounded .
(** Consider a time instant [t1] such that <<[t1, job_arrival
j]>> is a busy-interval prefix of [j]. *)
Variable t1 : instant.
Hypothesis H_arrives : t1 <= job_arrival j.
Hypothesis H_busy_prefix_arr : busy_interval_prefix arr_seq sched j t1 (job_arrival j).+1 .
(** From the properties of the workload (defined by hypotheses
[H_L_bounds_bi_with_pi] and [H_fixed_point]), we show that
[j]'s arrival time is necessarily less than [t1 + L]. *)
Local Lemma job_arrival_is_bounded :
job_arrival j < t1 + L.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1
job_arrival j < t1 + L
Proof .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1
job_arrival j < t1 + L
move_neq_up FF. Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j
False
move : (H_busy_prefix_arr) (H_busy_prefix_arr) => PREFIX PREFIXA.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIX, PREFIXA : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1
False
apply instantiated_busy_interval_prefix_equivalent_busy_interval_prefix in PREFIXA => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 PREFIXA : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1
False
move : (PREFIXA) => GTC.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1
False
eapply workload_exceeds_interval with (Δ := L) in PREFIX => //; last first .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIX : L <
workload_of_job arr_seq j t1 (t1 + L) +
cumulative_interfering_workload j t1 (t1 + L) PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1
False
move_neq_down PREFIX. Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1
workload_of_job arr_seq j t1 (t1 + L) +
cumulative_interfering_workload j t1 (t1 + L) <= L
rewrite (cumulative_interfering_workload_split _ _ _).Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1
workload_of_job arr_seq j t1 (t1 + L) +
(blackout_during sched t1 (t1 + L) +
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L)) <= L
rewrite (leqRW (blackout_during_bound _ _ _ _ _ _ _ _ (job_arrival j).+1 _ _ _)); (try apply H_valid_SBF) => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1
workload_of_job arr_seq j t1 (t1 + L) +
(L - SBF L +
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L)) <= L
rewrite addnC -!addnA.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1
L - SBF L +
(cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L))) <= L
have E: forall a b c , a <= c -> b <= c - a -> a + b <= c by move => ? ? ? ? ?; lia .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 E : forall a b c : nat,
a <= c -> b <= c - a -> a + b <= c
L - SBF L +
(cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L))) <= L
apply : E; first by lia .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <=
L - (L - SBF L)
rewrite subKn; last by apply : sbf_bounded_by_duration => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <= SBF L
have [ZERO|POS] := (posnP (cumulative_service_inversion arr_seq sched j t1 (t1 + L))).Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 ZERO : cumulative_service_inversion arr_seq sched j t1
(t1 + L) = 0
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <= SBF L
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 ZERO : cumulative_service_inversion arr_seq sched j t1
(t1 + L) = 0
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <= SBF L
rewrite ZERO add0n -(leqRW H_fixed_point).Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 ZERO : cumulative_service_inversion arr_seq sched j t1
(t1 + L) = 0
cumulative_other_hep_jobs_interfering_workload arr_seq
j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L) <=
total_request_bound_function ts L
rewrite addnC cumulative_iw_hep_eq_workload_of_ohep workload_job_and_ahep_eq_workload_hep //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 ZERO : cumulative_service_inversion arr_seq sched j t1
(t1 + L) = 0
workload_of_hep_jobs arr_seq j t1 (t1 + L) <=
total_request_bound_function ts L
have DD := hep_workload_le_total_rbf.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 ZERO : cumulative_service_inversion arr_seq sched j t1
(t1 + L) = 0 DD : forall (t : TaskType)
(t0 : TaskCost t)
(j : JobType)
(j0 : JobTask j t)
(j1 : JobCost j)
(j2 : JLFP_policy j)
(arr_seq : arrival_sequence j)
(ts : seq t),
arrivals_have_valid_job_costs arr_seq ->
all_jobs_from_taskset arr_seq ts ->
forall H4 : MaxArrivals t,
taskset_respects_max_arrivals arr_seq ts ->
forall (t1 : instant) (Δ : duration) (j3 : j),
workload_of_hep_jobs arr_seq j3 t1 (t1 + Δ) <=
total_request_bound_function ts Δ
workload_of_hep_jobs arr_seq j t1 (t1 + L) <=
total_request_bound_function ts L
by apply hep_workload_le_total_rbf. } Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 POS : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + L)
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <= SBF L
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 FF : t1 + L <= job_arrival j PREFIXA, GTC : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 POS : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + L)
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <= SBF L
by rewrite -(leqRW H_L_bounds_bi_with_pi); apply : longest_bi_with_pi_bound_is_valid. }
Qed .
End RelativeArrivalIsBounded .
(** We start with the first case, where the busy-interval prefix
continues until time instant [t1 + L]. *)
Section Case1 .
(** Consider a time instant [t1] such that <<[t1, job_arrival
j]>> and <<[t1, t1 + L)>> are both busy-interval prefixes of
job [j]. *)
Variable t1 : instant.
Hypothesis H_busy_prefix_arr : busy_interval_prefix arr_seq sched j t1 (job_arrival j).+1 .
Hypothesis H_busy_prefix_L : busy_interval_prefix arr_seq sched j t1 (t1 + L).
(** The crucial point to note is that the sum of the job's cost
(represented as [workload_of_job]) and the interfering
workload in the interval <<[t1, t1 + L)>> is bounded by [L]
due to hypotheses [H_L_bounds_bi_with_pi] and
[H_fixed_point]. *)
Local Lemma workload_is_bounded :
workload_of_job arr_seq j t1 (t1 + L) + cumulative_interfering_workload j t1 (t1 + L) <= L.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L)
workload_of_job arr_seq j t1 (t1 + L) +
cumulative_interfering_workload j t1 (t1 + L) <= L
Proof .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L)
workload_of_job arr_seq j t1 (t1 + L) +
cumulative_interfering_workload j t1 (t1 + L) <= L
rewrite (cumulative_interfering_workload_split _ _ _).Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L)
workload_of_job arr_seq j t1 (t1 + L) +
(blackout_during sched t1 (t1 + L) +
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L)) <= L
rewrite (leqRW (blackout_during_bound _ _ _ _ _ _ _ _ (t1 + L) _ _ _)); (try apply H_valid_SBF) => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L)
workload_of_job arr_seq j t1 (t1 + L) +
(L - SBF L +
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L)) <= L
rewrite // addnC -!addnA.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L)
L - SBF L +
(cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L))) <= L
have E: forall a b c , a <= c -> b <= c - a -> a + b <= c by move => ? ? ? ? ?; lia .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) E : forall a b c : nat,
a <= c -> b <= c - a -> a + b <= c
L - SBF L +
(cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L))) <= L
apply : E; first by lia .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L)
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <=
L - (L - SBF L)
rewrite subKn; last by apply : sbf_bounded_by_duration => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L)
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <= SBF L
have [ZERO|POS] := (posnP (cumulative_service_inversion arr_seq sched j t1 (t1 + L))).Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) ZERO : cumulative_service_inversion arr_seq sched j t1
(t1 + L) = 0
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <= SBF L
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) ZERO : cumulative_service_inversion arr_seq sched j t1
(t1 + L) = 0
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <= SBF L
rewrite ZERO add0n -(leqRW H_fixed_point).Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) ZERO : cumulative_service_inversion arr_seq sched j t1
(t1 + L) = 0
cumulative_other_hep_jobs_interfering_workload arr_seq
j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L) <=
total_request_bound_function ts L
rewrite addnC cumulative_iw_hep_eq_workload_of_ohep workload_job_and_ahep_eq_workload_hep //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) ZERO : cumulative_service_inversion arr_seq sched j t1
(t1 + L) = 0
workload_of_hep_jobs arr_seq j t1 (t1 + L) <=
total_request_bound_function ts L
by apply hep_workload_le_total_rbf => //; move : (H_busy_prefix_arr) => [LE _]; rewrite -ltnS. } Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) POS : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + L)
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <= SBF L
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) POS : 0 <
cumulative_service_inversion arr_seq sched j t1
(t1 + L)
cumulative_service_inversion arr_seq sched j t1
(t1 + L) +
(cumulative_other_hep_jobs_interfering_workload
arr_seq j t1 (t1 + L) +
workload_of_job arr_seq j t1 (t1 + L)) <= SBF L
by rewrite -(leqRW H_L_bounds_bi_with_pi); apply : longest_bi_with_pi_bound_is_valid => //;
move : (H_busy_prefix_arr) => [LE _]; rewrite -ltnS. }
Qed .
(** It follows that [t1 + L] is a quiet time, which means that
the busy prefix ends (i.e., it is bounded). *)
Local Lemma busy_prefix_is_bounded_case1 :
exists t2 ,
job_arrival j < t2
/\ t2 <= t1 + L
/\ busy_interval arr_seq sched j t1 t2.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
Proof .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
have PEND : pending sched j (job_arrival j) by apply job_pending_at_arrival => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) PEND : pending sched j (job_arrival j)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
enough (exists t2 , job_arrival j < t2 /\ t2 <= t1 + L /\ definitions.busy_interval sched j t1 t2) as BUSY.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) PEND : pending sched j (job_arrival j) BUSY : exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) PEND : pending sched j (job_arrival j) BUSY : exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
have [t2 [LE1 [LE2 BUSY2]]] := BUSY.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) PEND : pending sched j (job_arrival j) BUSY : exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2t2 : nat LE1 : job_arrival j < t2 LE2 : t2 <= t1 + L BUSY2 : definitions.busy_interval sched j t1 t2
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
eexists ; split ; first by exact : LE1.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) PEND : pending sched j (job_arrival j) BUSY : exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2t2 : nat LE1 : job_arrival j < t2 LE2 : t2 <= t1 + L BUSY2 : definitions.busy_interval sched j t1 t2
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
split ; first by done .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) PEND : pending sched j (job_arrival j) BUSY : exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2t2 : nat LE1 : job_arrival j < t2 LE2 : t2 <= t1 + L BUSY2 : definitions.busy_interval sched j t1 t2
busy_interval arr_seq sched j t1 t2
by apply instantiated_busy_interval_equivalent_busy_interval.
} Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) PEND : pending sched j (job_arrival j)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2
eapply busy_interval.busy_interval_is_bounded; eauto 2 => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) PEND : pending sched j (job_arrival j)
no_speculative_execution
- Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) PEND : pending sched j (job_arrival j)
no_speculative_execution
by eapply instantiated_i_and_w_no_speculative_execution; eauto 2 => //.
- Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) PEND : pending sched j (job_arrival j)
definitions.busy_interval_prefix sched j t1
(job_arrival j).+1
by apply instantiated_busy_interval_prefix_equivalent_busy_interval_prefix => //.
- Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_busy_prefix_L : busy_interval_prefix arr_seq sched j
t1 (t1 + L) PEND : pending sched j (job_arrival j)
workload_of_job arr_seq j t1 (t1 + L) +
cumulative_interfering_workload j t1 (t1 + L) <= L
by apply workload_is_bounded => //.
Qed .
End Case1 .
(** Next, we consider the case when the interval <<[t1, t1 + L)>>
is not a busy-interval prefix. *)
Section Case2 .
(** Consider a time instant [t1] such that <<[t1, job_arrival
j]>> is a busy-interval prefix of [j] and <<[t1, t1 + L)>>
is _not_. *)
Variable t1 : instant.
Hypothesis H_arrives : t1 <= job_arrival j.
Hypothesis H_busy_prefix_arr : busy_interval_prefix arr_seq sched j t1 (job_arrival j).+1 .
Hypothesis H_no_busy_prefix_L : ~ busy_interval_prefix arr_seq sched j t1 (t1 + L).
(** Lemma [job_arrival_is_bounded] implies that the
busy-interval prefix starts at time [t1], continues until
[job_arrival j + 1], and then terminates before [t1 + L].
Or, in other words, there is point in time [t2] such that
(1) [j]'s arrival is bounded by [t2], (2) [t2] is bounded by
[t1 + L], and (3) <<[t1, t2)>> is busy interval of job
[j]. *)
Local Lemma busy_prefix_is_bounded_case2 :
exists t2 ,
job_arrival j < t2
/\ t2 <= t1 + L
/\ busy_interval arr_seq sched j t1 t2.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
Proof .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
have LE: job_arrival j < t1 + L
by apply job_arrival_is_bounded => //; try apply instantiated_busy_interval_prefix_equivalent_busy_interval_prefix.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
move : (H_busy_prefix_arr) => PREFIX.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
move : (H_no_busy_prefix_L) => NOPREF.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
apply instantiated_busy_interval_prefix_equivalent_busy_interval_prefix in PREFIX => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
have BUSY := terminating_busy_prefix_is_busy_interval _ _ _ _ _ _ _ PREFIX.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L) BUSY : job_cost_positive j ->
forall n : nat,
job_arrival j < n ->
~ definitions.busy_interval_prefix sched j t1 n ->
exists t2'' : instant,
definitions.busy_interval sched j t1 t2''
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
edestruct BUSY as [t2 BUS]; clear BUSY; try apply TSK; eauto 2 => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L)
~ definitions.busy_interval_prefix sched j t1 (t1 + L)
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L)
~ definitions.busy_interval_prefix sched j t1 (t1 + L)
move => T; apply : NOPREF.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 T : definitions.busy_interval_prefix sched j t1
(t1 + L)
busy_interval_prefix arr_seq sched j t1 (t1 + L)
by apply instantiated_busy_interval_prefix_equivalent_busy_interval_prefix in T => //.
} Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L) t2 : instant BUS : definitions.busy_interval sched j t1 t2
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
exists t2 ; split ; last split .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L) t2 : instant BUS : definitions.busy_interval sched j t1 t2
job_arrival j < t2
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L) t2 : instant BUS : definitions.busy_interval sched j t1 t2
job_arrival j < t2
move : BUS => [[A _] _]; lia . } Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L) t2 : instant BUS : definitions.busy_interval sched j t1 t2
t2 <= t1 + L
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L) t2 : instant BUS : definitions.busy_interval sched j t1 t2
t2 <= t1 + L
move_neq_up FA. Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L) t2 : instant BUS : definitions.busy_interval sched j t1 t2 FA : t1 + L < t2
False
apply : NOPREF; split ; [lia | split ; first by apply H_busy_prefix_arr].Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 t2 : instant BUS : definitions.busy_interval sched j t1 t2 FA : t1 + L < t2
(forall t : nat,
t1 < t < t1 + L -> ~ quiet_time arr_seq sched j t) /\
t1 <= job_arrival j < t1 + L
split .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 t2 : instant BUS : definitions.busy_interval sched j t1 t2 FA : t1 + L < t2
forall t : nat,
t1 < t < t1 + L -> ~ quiet_time arr_seq sched j t
- Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 t2 : instant BUS : definitions.busy_interval sched j t1 t2 FA : t1 + L < t2
forall t : nat,
t1 < t < t1 + L -> ~ quiet_time arr_seq sched j t
move => t NEQ.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 t2 : instant BUS : definitions.busy_interval sched j t1 t2 FA : t1 + L < t2 t : nat NEQ : t1 < t < t1 + L
~ quiet_time arr_seq sched j t
apply abstract_busy_interval_classic_busy_interval_prefix in BUS => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 t2 : instant BUS : busy_interval_prefix arr_seq sched j t1 t2 FA : t1 + L < t2 t : nat NEQ : t1 < t < t1 + L
~ quiet_time arr_seq sched j t
by apply BUS; lia .
- Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 t2 : instant BUS : definitions.busy_interval sched j t1 t2 FA : t1 + L < t2
t1 <= job_arrival j < t1 + L
lia .
} Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L) t2 : instant BUS : definitions.busy_interval sched j t1 t2
busy_interval arr_seq sched j t1 t2
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L 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 : instant H_arrives : t1 <= job_arrival j H_busy_prefix_arr : busy_interval_prefix arr_seq sched
j t1 (job_arrival j).+1 H_no_busy_prefix_L : ~
busy_interval_prefix arr_seq
sched j t1
(t1 + L) LE : job_arrival j < t1 + L PREFIX : definitions.busy_interval_prefix sched j t1
(job_arrival j).+1 NOPREF : ~
busy_interval_prefix arr_seq sched j t1
(t1 + L) t2 : instant BUS : definitions.busy_interval sched j t1 t2
busy_interval arr_seq sched j t1 t2
by apply instantiated_busy_interval_equivalent_busy_interval => //. }
Qed .
End Case2 .
End StepByStepProof .
(** Combining the cases analyzed above, we conclude that busy
intervals of jobs released by task [tsk] are bounded by [L]. *)
Lemma busy_intervals_are_bounded_rs_edf :
busy_intervals_are_bounded_by arr_seq sched tsk L.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L
busy_intervals_are_bounded_by arr_seq sched tsk L
Proof .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L
busy_intervals_are_bounded_by arr_seq sched tsk L
move => j ARR TSK POS.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost j
exists t1 t2 : nat,
t1 <= job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2
have PEND : pending sched j (job_arrival j) by apply job_pending_at_arrival => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j)
exists t1 t2 : nat,
t1 <= job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2
edestruct ( busy_interval_prefix_exists) as [t1 [GE PREFIX]]; eauto 2 ; first by apply EDF_is_reflexive.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1
exists t1 t2 : nat,
t1 <= job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2
exists t1 .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1
exists t2 : nat,
t1 <= job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2
enough (exists t2 , job_arrival j < t2 /\ t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2) as BUSY.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 BUSY : exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\
busy_interval arr_seq sched j t1 t2
exists t2 : nat,
t1 <= job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 BUSY : exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\
busy_interval arr_seq sched j t1 t2
exists t2 : nat,
t1 <= job_arrival j < t2 /\
t2 <= t1 + L /\
definitions.busy_interval sched j t1 t2
move : BUSY => [t2 [LT [LE BUSY]]]; eexists ; split ; last first .Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 t2 : nat LT : job_arrival j < t2 LE : t2 <= t1 + L BUSY : busy_interval arr_seq sched j t1 t2
?t2 <= t1 + L /\
definitions.busy_interval sched j t1 ?t2
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 t2 : nat LT : job_arrival j < t2 LE : t2 <= t1 + L BUSY : busy_interval arr_seq sched j t1 t2
?t2 <= t1 + L /\
definitions.busy_interval sched j t1 ?t2
split ; first by exact : LE.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 t2 : nat LT : job_arrival j < t2 LE : t2 <= t1 + L BUSY : busy_interval arr_seq sched j t1 t2
definitions.busy_interval sched j t1 t2
by apply instantiated_busy_interval_equivalent_busy_interval. } Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 t2 : nat LT : job_arrival j < t2 LE : t2 <= t1 + L BUSY : busy_interval arr_seq sched j t1 t2
t1 <= job_arrival j < t2
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 t2 : nat LT : job_arrival j < t2 LE : t2 <= t1 + L BUSY : busy_interval arr_seq sched j t1 t2
t1 <= job_arrival j < t2
by apply /andP; split . }
} Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
have [LPREF|NOPREF] := busy_interval_prefix_case ltac :(eauto ) j t1 (t1 + L).Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 LPREF : definitions.busy_interval_prefix sched j t1
(t1 + L)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 LPREF : definitions.busy_interval_prefix sched j t1
(t1 + L)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
apply busy_prefix_is_bounded_case1 => //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 LPREF : definitions.busy_interval_prefix sched j t1
(t1 + L)
busy_interval_prefix arr_seq sched j t1 (t1 + L)
by apply instantiated_busy_interval_prefix_equivalent_busy_interval_prefix => //. } Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 NOPREF : ~
definitions.busy_interval_prefix sched j t1
(t1 + L)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
{ Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 NOPREF : ~
definitions.busy_interval_prefix sched j t1
(t1 + L)
exists t2 : nat,
job_arrival j < t2 /\
t2 <= t1 + L /\ busy_interval arr_seq sched j t1 t2
apply busy_prefix_is_bounded_case2=> //.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 NOPREF : ~
definitions.busy_interval_prefix sched j t1
(t1 + L)
~ busy_interval_prefix arr_seq sched j t1 (t1 + L)
move => NP; apply : NOPREF.Task : TaskType H : TaskCost Task H0 : TaskDeadline Task Job : JobType H1 : JobTask Job Task H2 : JobArrival Job H3 : JobCost Job D := [eta task_deadline] : Task -> duration PState : ProcessorState Job H_uniprocessor_proc_model : uniprocessor_model PState 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_arrival_sequence : valid_arrival_sequence
arr_seq sched : schedule PState JobReady0 : JobReady Job PState H_job_ready : work_bearing_readiness arr_seq sched H_sched_valid : valid_schedule sched arr_seq H4 : JobPreemptable Job H5 : TaskMaxNonpreemptiveSegment Task H_valid_preemption_model : valid_preemption_model
arr_seq sched H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments
arr_seq sched H_respects_policy : respects_JLFP_policy_at_preemption_point
arr_seq sched
(EDF Job) H_work_conserving : definitions.work_conserving
arr_seq sched ts : seq Task H_all_jobs_from_taskset : all_jobs_from_taskset
arr_seq ts H_valid_job_cost : arrivals_have_valid_job_costs
arr_seq H6 : MaxArrivals Task H_valid_arrival_curve : valid_taskset_arrival_curve ts
max_arrivals H_is_arrival_curve : taskset_respects_max_arrivals
arr_seq ts tsk : Task H_tsk_in_ts : tsk \in ts SBF : SupplyBoundFunction H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF H_unit_SBF : unit_supply_bound_function SBF L : duration H_L_positive : 0 < LH_L_bounds_bi_with_pi : longest_busy_interval_with_pi
ts tsk <=
SBF L H_fixed_point : total_request_bound_function ts L <=
SBF L j : Job ARR : arrives_in arr_seq j TSK : job_of_task tsk j POS : 0 < job_cost jPEND : pending sched j (job_arrival j) t1 : nat GE : t1 <= job_arrival j PREFIX : busy_interval_prefix arr_seq sched j t1
(job_arrival j).+1 NP : busy_interval_prefix arr_seq sched j t1 (t1 + L)
definitions.busy_interval_prefix sched j t1 (t1 + L)
by apply instantiated_busy_interval_prefix_equivalent_busy_interval_prefix => //.
}
}
Qed .
End BoundedBusyIntervals .