Built with Alectryon, running Coq+SerAPI v8.20.0+0.20.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
[Loading ML file ssrmatching_plugin.cmxs (using legacy method) ... done]
[Loading ML file ssreflect_plugin.cmxs (using legacy method) ... done]
[Loading ML file ring_plugin.cmxs (using legacy method) ... done]
Serlib plugin: coq-elpi.elpi is not available: serlib support is missing. Incremental checking for commands in this plugin will be impacted.
[Loading ML file coq-elpi.elpi ... done]
[Loading ML file zify_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_core_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_plugin.cmxs (using legacy method) ... done]
[Loading ML file btauto_plugin.cmxs (using legacy method) ... done]
Notation "_ + _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ - _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ <= _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ < _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ >= _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ > _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ <= _ <= _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ < _ <= _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ <= _ < _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ < _ < _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ * _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Require Export prosa.analysis.facts.SBF. Require Export prosa.analysis.abstract.abstract_rta. Require Export prosa.analysis.abstract.iw_auxiliary. Require Export prosa.analysis.abstract.IBF.supply. Require Export prosa.analysis.abstract.restricted_supply.busy_sbf. (** * Abstract Response-Time Analysis for Restricted-Supply Processors (aRSA) *) (** In this section we propose a general framework for response-time analysis ([RTA]) for real-time tasks with arbitrary arrival models under uni-processor scheduling subject to supply restrictions, characterized by a given [SBF]. *) (** We prove that the maximum (with respect to the set of offsets) among the solutions of the response-time bound recurrence is a response-time bound for [tsk]. Note that in this section we add additional restrictions on the processor state. These assumptions allow us to eliminate the second equation from [aRTA+]'s recurrence since jobs experience delays only due to the lack of supply while executing non-preemptively. *) Section AbstractRTARestrictedSupply. (** Consider any type of tasks with a run-to-completion threshold ... *) Context {Task : TaskType}. Context `{TaskCost Task}. Context `{TaskRunToCompletionThreshold Task}. (** ... and any type of jobs associated with these tasks. *) Context {Job : JobType}. Context `{JobTask Job Task}. Context `{JobArrival Job}. Context `{JobCost Job}. Context `{JobPreemptable Job}. (** Consider any kind of fully supply-consuming unit-supply processor state model. *) Context `{PState : ProcessorState Job}. Hypothesis H_unit_supply_proc_model : unit_supply_proc_model PState. Hypothesis H_consumed_supply_proc_model : fully_consuming_proc_model PState. (** Consider any valid arrival sequence. *) Variable arr_seq : arrival_sequence Job. Hypothesis H_valid_arrivals : valid_arrival_sequence arr_seq. (** Consider any restricted supply uniprocessor schedule of this arrival sequence ...*) Variable sched : schedule PState. Hypothesis H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence sched arr_seq. (** ... where jobs do not execute before their arrival nor after completion. *) Hypothesis H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute sched. Hypothesis H_completed_jobs_dont_execute : completed_jobs_dont_execute sched. (** Assume we are given valid WCETs for all tasks. *) Hypothesis H_valid_job_cost : arrivals_have_valid_job_costs arr_seq. (** Consider a task set [ts]... *) Variable ts : list Task. (** ... and a task [tsk] of [ts] that is to be analyzed. *) Variable tsk : Task. Hypothesis H_tsk_in_ts : tsk \in ts. (** Consider a valid preemption model ... *) Hypothesis H_valid_preemption_model : valid_preemption_model arr_seq sched. (** ...and a valid task run-to-completion threshold function. That is, [task_rtc tsk] is (1) no bigger than [tsk]'s cost and (2) for any job [j] of task [tsk] [job_rtct j] is bounded by [task_rtct tsk]. *) Hypothesis H_valid_run_to_completion_threshold : valid_task_run_to_completion_threshold arr_seq tsk. (** Assume we are provided with abstract functions for Interference and Interfering Workload. *) Context `{Interference Job}. Context `{InterferingWorkload Job}. (** We assume that the scheduler is work-conserving. *) Hypothesis H_work_conserving : work_conserving arr_seq sched. (** Let [L] be a constant that bounds any busy interval of task [tsk]. *) Variable L : duration. Hypothesis H_busy_interval_exists : busy_intervals_are_bounded_by arr_seq sched tsk L. (** Consider a unit SBF valid in busy intervals (w.r.t. task [tsk]). That is, (1) [SBF 0 = 0], (2) for any duration [Δ], the supply produced during a busy-interval prefix of length [Δ] is at least [SBF Δ], and (3) [SBF] makes steps of at most one. *) Context {SBF : SupplyBoundFunction}. Hypothesis H_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF. Hypothesis H_unit_SBF : unit_supply_bound_function SBF. (** Next, we assume that [intra_IBF] is a bound on the intra-supply interference incurred by task [tsk]. *) Variable intra_IBF : duration -> duration -> duration. Hypothesis H_intra_supply_interference_is_bounded : intra_interference_is_bounded_by arr_seq sched tsk intra_IBF. (** Given any job [j] of task [tsk] that arrives exactly [A] units after the beginning of the busy interval, the bound on the interference incurred by [j] within an interval of length [Δ] is no greater than [(Δ - SBF Δ) + intra_IBF A Δ]. *) Let IBF_P (A Δ : duration) := (Δ - SBF Δ) + intra_IBF A Δ. (** Next, we instantiate function [IBF_NP], which is a function that bounds interference in a non-preemptive stage of execution. We prove that this function can be instantiated as [λ tsk F Δ ⟹ (F - task_rtct tsk) + (Δ - SBF Δ - (F - SBF F))]. *) (** Let us reiterate on the intuitive interpretation of this function. Since [F] is a solution to the first equation [task_rtct tsk + IBF_P A F <= F], we know that by time instant [t1 + F] a job receives [task_rtct tsk] units of service and, hence, it becomes non-preemptive. Knowing this information, how can we bound the job's interference in an interval <<[t1, t1 + Δ)>>? Note that this interval starts with the beginning of the busy interval. We know that the job receives [F - task_rtct tsk] units of interference. In the non-preemptive mode, a job under analysis can still experience some interference due to a lack of supply. This interference is bounded by [(Δ - SBF Δ) - (F - SBF F)] since part of this interference has already been accounted for in the preemptive part of the execution ([F - SBF F]). *) Let IBF_NP (F Δ : duration) := (F - task_rtct tsk) + (Δ - SBF Δ - (F - SBF F)). (** In the next section, we prove a few helper lemmas. *) Section AuxiliaryLemmas. (** Consider any job [j] of [tsk]. *) Variable j : Job. Hypothesis H_j_arrives : arrives_in arr_seq j. Hypothesis H_job_of_tsk : job_of_task tsk j. Hypothesis H_job_cost_positive : job_cost_positive j. (** Consider the busy interval <<[t1, t2)>> of job [j]. *) Variable t1 t2 : instant. Hypothesis H_busy_interval : busy_interval_prefix sched j t1 t2. (** Let's define [A] as a relative arrival time of job [j] (with respect to time [t1]). *) Let A : duration := job_arrival j - t1. (** Consider an arbitrary time [Δ] ... *) Variable Δ : duration. (** ... such that [t1 + Δ] is inside the busy interval... *) Hypothesis H_inside_busy_interval : t1 + Δ < t2. (** ... the job [j] is not completed by time [(t1 + Δ)]. *) Hypothesis H_job_j_is_not_completed : ~~ completed_by sched j (t1 + Δ). (** First, we show that blackout is counted as interference. *)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)

forall t : nat, t1 <= t < t2 -> is_blackout sched t -> interference j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)

forall t : nat, t1 <= t < t2 -> is_blackout sched t -> interference j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
t: nat
LE1: t1 <= t
LE2: t < t2

is_blackout sched t -> interference j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
t: nat
LE1: t1 <= t
LE2: t < t2
INT: ~ interference j t

~~ is_blackout sched t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
t: nat
LE1: t1 <= t
LE2: t < t2
INT: receives_service_at sched j t

~~ is_blackout sched t
by apply/negPn; eapply pos_service_impl_pos_supply. Qed. (** Next, we show that interference is equal to a sum of two functions: [is_blackout] and [intra_interference]. *)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)

forall t : nat, t1 <= t < t2 -> is_blackout sched t + intra_interference sched j t = interference j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)

forall t : nat, t1 <= t < t2 -> is_blackout sched t + intra_interference sched j t = interference j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
t: nat
t_INT: t1 <= t < t2

is_blackout sched t + intra_interference sched j t = interference j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
t: nat
t_INT: t1 <= t < t2

is_blackout sched t + has_supply sched t && interference j t = interference j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
t: nat
t_INT: t1 <= t < t2
BLACKOUT: is_blackout sched t = true

true + ~~ true && interference j t = interference j t
by rewrite blackout_impl_interference. Qed. (** As a corollary, cumulative interference during a time interval <<[t1, t1 + Δ)>> can be split into a sum of total blackouts in <<[t1, t1 + Δ)>> and cumulative intra-supply interference during <<[t1, t1 + Δ)>>. *)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)

blackout_during sched t1 (t1 + Δ) + cumul_intra_interference sched j t1 (t1 + Δ) = cumulative_interference j t1 (t1 + Δ)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)

blackout_during sched t1 (t1 + Δ) + cumul_intra_interference sched j t1 (t1 + Δ) = cumulative_interference j t1 (t1 + Δ)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)

forall i : nat, t1 <= i < t1 + Δ -> is_blackout sched i + cond_interference (fun=> [eta has_supply sched]) j i = cond_interference (fun=> xpredT) j i
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
t: nat
t_GEQ: t1 <= t
t_LTN_td: t < t1 + Δ

is_blackout sched t + cond_interference (fun=> [eta has_supply sched]) j t = cond_interference (fun=> xpredT) j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
t: nat
t_GEQ: t1 <= t
t_LTN_td: t < t1 + Δ
t_LTN_t2: t < t2

is_blackout sched t + cond_interference (fun=> [eta has_supply sched]) j t = cond_interference (fun=> xpredT) j t
by apply blackout_plus_local_is_interference; apply /andP. Qed. (** Moreover, since the total blackout duration in an interval of length [Δ] is bounded by [Δ - SBF Δ], the cumulative interference during the time interval <<[t1, t1 + Δ)>> is bounded by the sum of [Δ - SBF Δ] and cumulative intra-supply interference during <<[t1, t1 + Δ)>>. *)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)

cumulative_interference j t1 (t1 + Δ) <= Δ - SBF Δ + cumul_intra_interference sched j t1 (t1 + Δ)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)

cumulative_interference j t1 (t1 + Δ) <= Δ - SBF Δ + cumul_intra_interference sched j t1 (t1 + Δ)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)

blackout_during sched t1 (t1 + Δ) <= Δ - SBF Δ
by eapply blackout_during_bound with (t2 := t2) => //. Qed. (** Next, consider a duration [F] such that [F <= Δ] and job [j] has enough service to become non-preemptive by time instant [t1 + F]. *) Variable F : duration. Hypothesis H_F_le_Δ : F <= Δ. Hypothesis H_enough_service : task_rtct tsk <= service sched j (t1 + F). (** Then, we show that job [j] does not experience any intra-supply interference in the time interval <<[t1 + F, t1 + Δ)>>. *)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)

cumul_intra_interference sched j (t1 + F) (t1 + Δ) = 0
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)

cumul_intra_interference sched j (t1 + F) (t1 + Δ) = 0
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)

\sum_(t1 + F <= i < t1 + Δ | t1 + F <= i < t1 + Δ) cond_interference (fun=> [eta has_supply sched]) j i = 0
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ

cond_interference (fun=> [eta has_supply sched]) j t = 0
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ

~ cond_interference (fun=> [eta has_supply sched]) j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t

~ interference j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t

t1 <= t < t2
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t
receives_service_at sched j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t

t1 <= t < t2
by apply/andP; split; lia.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t

receives_service_at sched j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t

scheduled_at sched j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t

job_rtct j <= service sched j (t1 + F)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t
~~ completed_by sched j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t

job_rtct j <= service sched j (t1 + F)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t

job_rtct j <= task_rtct tsk
by apply H_valid_run_to_completion_threshold.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t

~~ completed_by sched j t
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_of_tsk: job_of_task tsk j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval: busy_interval_prefix sched j t1 t2
A:= job_arrival j - t1: duration
Δ: duration
H_inside_busy_interval: t1 + Δ < t2
H_job_j_is_not_completed: ~~ completed_by sched j (t1 + Δ)
F: duration
H_F_le_Δ: F <= Δ
H_enough_service: task_rtct tsk <= service sched j (t1 + F)
t: nat
GE__t: t1 + F <= t
LT__t: t < t1 + Δ
P: has_supply sched t

completed_by sched j t -> completed_by sched j (t1 + Δ)
by apply completion_monotonic; lia. Qed. End AuxiliaryLemmas. (** For clarity, let's define a local name for the search space. *) Let is_in_search_space_rs := is_in_search_space L IBF_P. (** We use the following equation to bound the response-time of a job of task [tsk]. Consider any value [R] that upper-bounds the solution of each response-time recurrence, i.e., for any relative arrival time [A] in the search space, there exists a corresponding solution [F] such that (1) [F <= A + R], (2) [task_rtct tsk + intra_IBF tsk A F <= SBF F] and [SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)]. Note that, compared to "ideal RTA," there is an additional requirement [F <= A + R]. Intuitively, it is needed to rule out a nonsensical situation when the non-preemptive stage completes earlier than the preemptive stage. *) Variable R : duration. Hypothesis H_R_is_maximum_rs : forall (A : duration), is_in_search_space_rs A -> exists (F : duration), F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R). (** In the following section we prove that all the premises of abstract RTA are satisfied. *) Section RSaRTAPremises. (** First, we show that [IBF_P] correctly upper-bounds interference in the preemptive stage of execution. *)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

job_interference_is_bounded_by arr_seq sched tsk IBF_P (relative_arrival_time_of_job_is_A sched)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

job_interference_is_bounded_by arr_seq sched tsk IBF_P (relative_arrival_time_of_job_is_A sched)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
A: nat
PAR: relative_arrival_time_of_job_is_A sched j A
EQ: A = job_arrival j - t1

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) <= IBF_P A Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
A: nat
PAR: relative_arrival_time_of_job_is_A sched j A
EQ: A = job_arrival j - t1

cumulative_interference j t1 (t1 + Δ) <= IBF_P A Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
A: nat
PAR: relative_arrival_time_of_job_is_A sched j A
EQ: A = job_arrival j - t1

Δ - SBF Δ + cumul_intra_interference sched j t1 (t1 + Δ) <= IBF_P A Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
A: nat
PAR: relative_arrival_time_of_job_is_A sched j A
EQ: A = job_arrival j - t1
job_cost_positive j
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
A: nat
PAR: relative_arrival_time_of_job_is_A sched j A
EQ: A = job_arrival j - t1
busy_interval_prefix sched j t1 t2
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
A: nat
PAR: relative_arrival_time_of_job_is_A sched j A
EQ: A = job_arrival j - t1

Δ - SBF Δ + cumul_intra_interference sched j t1 (t1 + Δ) <= IBF_P A Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
A: nat
PAR: relative_arrival_time_of_job_is_A sched j A
EQ: A = job_arrival j - t1

cumul_cond_interference (fun=> [eta has_supply sched]) j t1 (t1 + Δ) <= intra_IBF A Δ
by apply: H_intra_supply_interference_is_bounded => //.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
A: nat
PAR: relative_arrival_time_of_job_is_A sched j A
EQ: A = job_arrival j - t1

job_cost_positive j
by eapply incomplete_implies_positive_cost => //.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
A: nat
PAR: relative_arrival_time_of_job_is_A sched j A
EQ: A = job_arrival j - t1

busy_interval_prefix sched j t1 t2
by apply BUSY. Qed. (** Next, we prove that [IBF_NP] correctly bounds interference in the non-preemptive stage given a solution to the preemptive stage [F]. *)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

job_interference_is_bounded_by arr_seq sched tsk IBF_NP (relative_time_to_reach_rtct sched tsk IBF_P)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

job_interference_is_bounded_by arr_seq sched tsk IBF_NP (relative_time_to_reach_rtct sched tsk IBF_P)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState

job_interference_is_bounded_by arr_seq sched tsk IBF_NP (relative_time_to_reach_rtct sched tsk IBF_P)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) <= IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) <= IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) <= IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2

task_rtct tsk <= F
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) <= IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2

task_rtct tsk <= F
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2

task_rtct tsk <= service_during sched j t1 (t1 + F)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2

task_rtct tsk <= 0 + service_during sched j t1 (t1 + F)
by erewrite <-cumulative_service_before_job_arrival_zero; first erewrite service_during_cat with (t1 := 0) => //; auto; lia.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) <= IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t2 <= t1 + F

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ
cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: Δ < F
cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t2 <= t1 + F

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t2 - t1 <= F

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t2 - t1 <= F

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + job_cost j <= t2 - t1 + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t2 - t1 <= F

cumul_cond_interference (fun=> xpredT) j t1 t2 + job_cost j <= t2 - t1 + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t2 - t1 <= F

cumul_cond_interference (fun=> xpredT) j t1 t2 + service_during sched j t1 t2 <= t2 - t1 + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t2 - t1 <= F
LLL: t1 < t2

cumul_cond_interference (fun=> xpredT) j t1 t2 + service_during sched j t1 t2 <= t2 - t1 + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
k: nat
LT: t1 + Δ < t1 + k
BUSY: busy_interval sched j t1 (t1 + k)
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t1 + k
RleF: task_rtct tsk <= F
NEQ1: t1 + k - t1 <= F

cumul_cond_interference (fun=> xpredT) j t1 (t1 + k) + service_during sched j t1 (t1 + k) <= t1 + k - t1 + (Δ - SBF Δ - (F - SBF F))
by rewrite addnC (leqRW (service_and_interference_bound _ _ _ _ _ _ _ _ _ _ _ _)) => //; lia.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: Δ < F
cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) <= F - SBF F + intra_IBF (job_arrival j - t1) F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) <= intra_IBF (job_arrival j - t1) F + (Δ - SBF Δ)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

cumulative_interference j t1 (t1 + Δ) <= intra_IBF (job_arrival j - t1) F + (Δ - SBF Δ)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

blackout_during sched t1 (t1 + Δ) + cumul_intra_interference sched j t1 (t1 + Δ) <= intra_IBF (job_arrival j - t1) F + (Δ - SBF Δ)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

blackout_during sched t1 (t1 + Δ) <= Δ - SBF Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ
cumul_intra_interference sched j t1 (t1 + Δ) <= intra_IBF (job_arrival j - t1) F
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

blackout_during sched t1 (t1 + Δ) <= Δ - SBF Δ
by eapply blackout_during_bound with (t2 := t2) => //; split; [ | apply BUSY].
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

cumul_intra_interference sched j t1 (t1 + Δ) <= intra_IBF (job_arrival j - t1) F
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

cumul_cond_interference (fun=> [eta has_supply sched]) j t1 (t1 + F) + cumul_cond_interference (fun=> [eta has_supply sched]) j (t1 + F) (t1 + Δ) <= intra_IBF (job_arrival j - t1) F
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

cumul_intra_interference sched j t1 (t1 + F) + cumul_intra_interference sched j (t1 + F) (t1 + Δ) <= intra_IBF (job_arrival j - t1) F
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

cumul_intra_interference sched j t1 (t1 + F) + 0 <= intra_IBF (job_arrival j - t1) F
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

~~ completed_by sched j (t1 + F)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ
relative_arrival_time_of_job_is_A sched j (job_arrival j - t1)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

~~ completed_by sched j (t1 + F)
by move : NCOM; apply contra, completion_monotonic; lia.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ

relative_arrival_time_of_job_is_A sched j (job_arrival j - t1)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ
t1', t2': instant
BUSY': busy_interval sched j t1' t2'

job_arrival j - t1 = job_arrival j - t1'
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: F <= Δ
t1', t2': instant
BUSY': busy_interval sched j t1' t2'
EQ1: t1 = t1'
E2: t2 = t2'

job_arrival j - t1 = job_arrival j - t1'
by subst; lia.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: Δ < F

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: Δ < F

cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) + task_rtct tsk <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: Δ < F

service sched j (t1 + F) + cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) <= ?n
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: Δ < F
?n <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: Δ < F

service sched j (t1 + F) + cumul_cond_interference (fun=> xpredT) j t1 (t1 + Δ) <= ?n
by erewrite leq_add2l; apply cumulative_interference_sub with (bl := t1) (br := t1 + F); lia.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: Δ < F

service sched j (t1 + F) + cumul_cond_interference (fun=> xpredT) j t1 (t1 + F) <= F + (Δ - SBF Δ - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
USER: unit_service_proc_model PState
t1, t2: instant
Δ: nat
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
BUSY: busy_interval sched j t1 t2
LT: t1 + Δ < t2
NCOM: ~~ completed_by sched j (t1 + Δ)
F: nat
RT: relative_time_to_reach_rtct sched tsk IBF_P j F
POS: job_cost_positive j
FIX: task_rtct tsk + IBF_P (job_arrival j - t1) F <= F
RTC: task_rtct tsk <= service sched j (t1 + F)
LE1: t1 <= job_arrival j
LE2: job_arrival j < t2
RleF: task_rtct tsk <= F
NEQ1: t1 + F < t2
NEQ2: Δ < F

service_during sched j t1 (t1 + F) + cumul_cond_interference (fun=> xpredT) j t1 (t1 + F) <= F + (Δ - SBF Δ - (F - SBF F))
by rewrite (leqRW (service_and_interference_bound _ _ _ _ _ _ _ _ _ _ _ _)) => //; lia. } Qed. (** Next, we prove that [F] is bounded by [task_cost tsk + IBF_NP F Δ] for any [F] and [Δ]. As explained in file [analysis/abstract/abstract_rta], this shows that the second stage indeed takes into account service received in the first stage. *)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

forall F Δ : duration, F <= task_cost tsk + IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

forall F Δ : duration, F <= task_cost tsk + IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
F, Δ: duration

F <= task_cost tsk + IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
F, Δ: duration
NEQ: F <= task_rtct tsk

F <= task_cost tsk + IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
F, Δ: duration
NEQ: task_rtct tsk < F
F <= task_cost tsk + IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
F, Δ: duration
NEQ: F <= task_rtct tsk

F <= task_cost tsk + IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
F, Δ: duration
NEQ: F <= task_rtct tsk

task_rtct tsk <= task_cost tsk + IBF_NP F Δ
by apply: leq_trans; [apply H_valid_run_to_completion_threshold | lia].
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
F, Δ: duration
NEQ: task_rtct tsk < F

F <= task_cost tsk + IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
F, Δ: duration
NEQ: task_rtct tsk < F

task_rtct tsk <= task_cost tsk
by apply H_valid_run_to_completion_threshold; lia. Qed. (** Next we prove that [H_R_is_maximum_rs] implies [H_R_is_maximum]. *)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

forall A : duration, is_in_search_space L IBF_P A -> exists F : duration, task_rtct tsk + (F - SBF F + intra_IBF A F) <= F /\ task_cost tsk + (F - task_rtct tsk + (A + R - SBF (A + R) - (F - SBF F))) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

forall A : duration, is_in_search_space L IBF_P A -> exists F : duration, task_rtct tsk + (F - SBF F + intra_IBF A F) <= F /\ task_cost tsk + (F - task_rtct tsk + (A + R - SBF (A + R) - (F - SBF F))) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A

exists F : duration, task_rtct tsk + (F - SBF F + intra_IBF A F) <= F /\ task_cost tsk + (F - task_rtct tsk + (A + R - SBF (A + R) - (F - SBF F))) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

exists F : duration, task_rtct tsk + (F - SBF F + intra_IBF A F) <= F /\ task_cost tsk + (F - task_rtct tsk + (A + R - SBF (A + R) - (F - SBF F))) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

task_rtct tsk + (F - SBF F + intra_IBF A F) <= F
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
task_cost tsk + (F - task_rtct tsk + (A + R - SBF (A + R) - (F - SBF F))) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

task_rtct tsk + (F - SBF F + intra_IBF A F) <= F
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

task_rtct tsk + intra_IBF A F + (F - SBF F) <= F
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

task_rtct tsk + intra_IBF A F <= F - (F - SBF F)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
LE: SBF F <= F

task_rtct tsk + intra_IBF A F <= F - (F - SBF F)
by rewrite (leqRW EQ1); lia.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

task_cost tsk + (F - task_rtct tsk + (A + R - SBF (A + R) - (F - SBF F))) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

task_cost tsk + (F - task_rtct tsk + (A + R - SBF (A + R) - (F - SBF F))) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
JJ: F <= task_cost tsk + (F - task_rtct tsk + (A + R - SBF (A + R) - (F - SBF F)))

task_cost tsk + (F - task_rtct tsk + (A + R - SBF (A + R) - (F - SBF F))) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
JJ: F <= task_cost tsk + (F - task_rtct tsk) + (A + R - SBF (A + R) - (F - SBF F))

task_cost tsk + (F - task_rtct tsk) + (A + R - SBF (A + R) - (F - SBF F)) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
JJ: F <= task_cost tsk + (F - task_rtct tsk) + (A + R - SBF (A + R) - (F - SBF F))

task_cost tsk + (F - task_rtct tsk) <= A + R - (A + R - SBF (A + R) - (F - SBF F))
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
JJ: F <= task_cost tsk + (F - task_rtct tsk) + (A + R - SBF (A + R) - (F - SBF F))

task_cost tsk + (F - task_rtct tsk) <= A + R - (A + R - SBF (A + R)) + (F - SBF F)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
JJ: F <= task_cost tsk + (F - task_rtct tsk) + (A + R - SBF (A + R) - (F - SBF F))
LE: forall Δ : duration, SBF Δ <= Δ

task_cost tsk + (F - task_rtct tsk) <= A + R - (A + R - SBF (A + R)) + (F - SBF F)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
JJ: F <= task_cost tsk + (F - task_rtct tsk) + (A + R - SBF (A + R) - (F - SBF F))
LE: forall Δ : duration, SBF Δ <= Δ

task_cost tsk + (F - task_rtct tsk) <= SBF (A + R) + (F - SBF F)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
JJ: F <= task_cost tsk + (F - task_rtct tsk) + (A + R - SBF (A + R) - (F - SBF F))
LE: forall Δ : duration, SBF Δ <= Δ
T: forall a b c d e : nat, e <= b -> c <= b -> e + (a - c) <= d -> a + (b - c) <= d + (b - e)

task_cost tsk + (F - task_rtct tsk) <= SBF (A + R) + (F - SBF F)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
JJ: F <= task_cost tsk + (F - task_rtct tsk) + (A + R - SBF (A + R) - (F - SBF F))
LE: forall Δ : duration, SBF Δ <= Δ

task_rtct tsk <= F
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
A: duration
SP: is_in_search_space L IBF_P A
F: duration
EQ0: F <= A + R
EQ1: task_rtct tsk + intra_IBF A F <= SBF F
EQ2: SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
JJ: F <= task_cost tsk + (F - task_rtct tsk) + (A + R - SBF (A + R) - (F - SBF F))
LE: forall Δ : duration, SBF Δ <= Δ

task_rtct tsk <= SBF F
by rewrite -(leqRW EQ1); lia. } Qed. End RSaRTAPremises. (** Finally, we apply the [uniprocessor_response_time_bound] theorem, and using the lemmas above, we prove that all the requirements are satisfied. So, [R] is a response time bound. *)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

task_response_time_bound arr_seq sched tsk R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

task_response_time_bound arr_seq sched tsk R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

job_interference_is_bounded_by arr_seq sched tsk ?IBF_P (relative_arrival_time_of_job_is_A sched)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
job_interference_is_bounded_by arr_seq sched tsk ?IBF_NP (relative_time_to_reach_rtct sched tsk ?IBF_P)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
forall (F : nat) (Δ : duration), F <= task_cost tsk + ?IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
forall A : duration, is_in_search_space L ?IBF_P A -> exists F : duration, task_rtct tsk + ?IBF_P A F <= F /\ task_cost tsk + ?IBF_NP F (A + R) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

job_interference_is_bounded_by arr_seq sched tsk ?IBF_P (relative_arrival_time_of_job_is_A sched)
by apply IBF_P_bounds_interference.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

job_interference_is_bounded_by arr_seq sched tsk ?IBF_NP (relative_time_to_reach_rtct sched tsk IBF_P)
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
forall (F : nat) (Δ : duration), F <= task_cost tsk + ?IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
forall A : duration, is_in_search_space L IBF_P A -> exists F : duration, task_rtct tsk + IBF_P A F <= F /\ task_cost tsk + ?IBF_NP F (A + R) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

job_interference_is_bounded_by arr_seq sched tsk ?IBF_NP (relative_time_to_reach_rtct sched tsk IBF_P)
by apply IBF_NP_bounds_interference.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

forall (F : nat) (Δ : duration), F <= task_cost tsk + IBF_NP F Δ
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)
forall A : duration, is_in_search_space L IBF_P A -> exists F : duration, task_rtct tsk + IBF_P A F <= F /\ task_cost tsk + IBF_NP F (A + R) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

forall (F : nat) (Δ : duration), F <= task_cost tsk + IBF_NP F Δ
by apply IBF_P_sol_le_IBF_NP.
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

forall A : duration, is_in_search_space L IBF_P A -> exists F : duration, task_rtct tsk + IBF_P A F <= F /\ task_cost tsk + IBF_NP F (A + R) <= A + R
Task: TaskType
H: TaskCost Task
H0: TaskRunToCompletionThreshold Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
H4: JobPreemptable Job
PState: ProcessorState Job
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
ts: seq Task
tsk: Task
H_tsk_in_ts: tsk \in ts
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold arr_seq tsk
H5: Interference Job
H6: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
L: duration
H_busy_interval_exists: busy_intervals_are_bounded_by arr_seq sched tsk L
SBF: SupplyBoundFunction
H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF
H_unit_SBF: unit_supply_bound_function SBF
intra_IBF: duration -> duration -> duration
H_intra_supply_interference_is_bounded: intra_interference_is_bounded_by arr_seq sched tsk intra_IBF
IBF_P:= fun A Δ : duration => Δ - SBF Δ + intra_IBF A Δ: duration -> duration -> nat
IBF_NP:= fun F Δ : duration => F - task_rtct tsk + (Δ - SBF Δ - (F - SBF F)): duration -> duration -> nat
is_in_search_space_rs:= is_in_search_space L IBF_P: nat -> Prop
R: duration
H_R_is_maximum_rs: forall A : duration, is_in_search_space_rs A -> exists F : duration, F <= A + R /\ task_rtct tsk + intra_IBF A F <= SBF F /\ SBF F + (task_cost tsk - task_rtct tsk) <= SBF (A + R)

forall A : duration, is_in_search_space L IBF_P A -> exists F : duration, task_rtct tsk + IBF_P A F <= F /\ task_cost tsk + IBF_NP F (A + R) <= A + R
by apply max_in_rs_hypothesis_impl_max_in_arta_hypothesis. } Qed. End AbstractRTARestrictedSupply.