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.preemption.rtc_threshold.job_preemptable. Require Export prosa.analysis.abstract.definitions. Require Export prosa.analysis.abstract.busy_interval. (** * Lower Bound On Job Service *) (** In this section we prove that if the cumulative interference inside a busy interval is bounded by a certain constant then a job executes long enough to reach a specified amount of service. *) Section LowerBoundOnService. (** Consider any type of tasks ... *) Context {Task : TaskType}. Context `{TaskCost Task}. (** ... and any type of jobs associated with these tasks. *) Context {Job : JobType}. Context `{JobTask Job Task}. Context `{JobArrival Job}. Context `{JobCost Job}. (** In addition, we assume existence of a function mapping jobs to their preemption points. *) Context `{JobPreemptable Job}. (** Consider _any_ kind of processor state model. *) Context {PState : ProcessorState Job}. (** Consider any arrival sequence with consistent arrivals ... *) Variable arr_seq : arrival_sequence Job. Hypothesis H_arrival_times_are_consistent : consistent_arrival_times arr_seq. (** ... and any schedule of this arrival sequence. *) Variable sched : schedule PState. (** Assume that the job costs are no larger than the task costs. *) Hypothesis H_jobs_respect_taskset_costs : arrivals_have_valid_job_costs arr_seq. (** Let [tsk] be any task that is to be analyzed. *) Variable tsk : Task. (** Assume we are provided with abstract functions for interference and interfering workload. *) Context `{Interference Job}. Context `{InterferingWorkload Job}. (** We assume that the schedule is work-conserving. *) Hypothesis H_work_conserving : work_conserving arr_seq sched. (** Let [j] be any job of task [tsk] with positive cost. *) 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. (** In this section, we show that the cumulative interference is a complement to the total time where job [j] is scheduled inside a busy interval prefix. *) Section InterferenceIsComplement. (** Consider any busy interval prefix <<[t1, t2)>> of job [j]. *) Variable t1 t2 : instant. Hypothesis H_busy_interval : busy_interval_prefix sched j t1 t2. (** Consider any sub-interval <<[t, t + δ)>> inside the busy interval <<[t1, t2)>>. *) Variables (t : instant) (δ : duration). Hypothesis H_t1_le_t : t1 <= t. Hypothesis H_tδ_le_t2 : t + δ <= t2. (** We prove that sum of cumulative service and cumulative interference in the interval <<[t, t + δ)>> is equal to [δ]. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2

δ <= service_during sched j t (t + δ) + cumulative_interference j t (t + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2

δ <= service_during sched j t (t + δ) + cumulative_interference j t (t + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2

δ <= \sum_(t <= t < t + δ) service_in j (sched t) + \sum_(t <= t < t + δ) cond_interference (fun=> xpredT) j t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
x: nat
Lo: t <= x
Hi: x < t + δ

0 < service_in j (sched x) + cond_interference (fun=> xpredT) j x
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: arrives_in arr_seq j -> 0 < job_cost j -> busy_interval_prefix sched j t1 t2 -> t1 <= x < t2 -> ~ interference j x <-> receives_service_at sched j x

0 < service_in j (sched x) + cond_interference (fun=> xpredT) j x
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: ~ interference j x <-> receives_service_at sched j x

0 < service_in j (sched x) + cond_interference (fun=> xpredT) j x
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: ~ interference j x <-> receives_service_at sched j x

0 < service_in j (sched x) + interference j x
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: ~ interference j x <-> receives_service_at sched j x
INT: interference j x = false

0 < service_in j (sched x) + false
by rewrite // addn0; apply Workj; rewrite INT. Qed. (** Also, note that under the unit-service processor model assumption, the sum of service within the interval <<[t, t + δ)>> and the cumulative interference within the same interval is bounded by the length of the interval (i.e., [δ]). *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2

unit_service_proc_model PState -> service_during sched j t (t + δ) + cumulative_interference j t (t + δ) <= δ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2

unit_service_proc_model PState -> service_during sched j t (t + δ) + cumulative_interference j t (t + δ) <= δ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState

service_during sched j t (t + δ) + cumulative_interference j t (t + δ) <= δ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState

\sum_(t <= i < t + δ) (service_in j (sched i) + cond_interference (fun=> xpredT) j i) <= δ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState

\sum_(t <= i < t + δ) (service_in j (sched i) + cond_interference (fun=> xpredT) j i) <= \sum_(t <= x < t + δ) 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ

service_in j (sched x) + cond_interference (fun=> xpredT) j x <= 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: arrives_in arr_seq j -> 0 < job_cost j -> busy_interval_prefix sched j t1 t2 -> t1 <= x < t2 -> ~ interference j x <-> receives_service_at sched j x

service_in j (sched x) + cond_interference (fun=> xpredT) j x <= 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: t1 <= x < t2 -> ~ interference j x <-> receives_service_at sched j x

t1 <= x < t2
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: ~ interference j x <-> receives_service_at sched j x
service_in j (sched x) + cond_interference (fun=> xpredT) j x <= 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: t1 <= x < t2 -> ~ interference j x <-> receives_service_at sched j x

t1 <= x < t2
by apply/andP; split; lia.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: ~ interference j x <-> receives_service_at sched j x

service_in j (sched x) + cond_interference (fun=> xpredT) j x <= 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: ~ interference j x <-> receives_service_at sched j x

service_in j (sched x) + interference j x <= 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: ~ true <-> receives_service_at sched j x

service_in j (sched x) + true <= 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: ~ false <-> receives_service_at sched j x
service_in j (sched x) + false <= 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: ~ true <-> receives_service_at sched j x

service_in j (sched x) + true <= 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: ~ true <-> receives_service_at sched j x

service_in j (sched x) <= 0
by move_neq_up NE; apply Workj.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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
t: instant
δ: duration
H_t1_le_t: t1 <= t
H_tδ_le_t2: t + δ <= t2
UNIT: unit_service_proc_model PState
x: nat
Lo: t <= x
Hi: x < t + δ
Workj: ~ false <-> receives_service_at sched j x

service_in j (sched x) + false <= 1
by rewrite addn0; apply UNIT. Qed. End InterferenceIsComplement. (** In this section, we prove a sufficient condition under which job [j] receives enough service. *) Section InterferenceBoundedImpliesEnoughService. (** Consider any busy interval <<[t1, t2)>> of job [j]. *) Variable t1 t2 : instant. Hypothesis H_busy_interval : busy_interval sched j t1 t2. (** Let [progress_of_job] be the desired service of job [j]. *) Variable progress_of_job : duration. Hypothesis H_progress_le_job_cost : progress_of_job <= job_cost j. (** Assume that for some [δ] the sum of desired progress and cumulative interference is bounded by [δ]. *) Variable δ : duration. Hypothesis H_total_workload_is_bounded : progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ. (** Then, it must be the case that the job has received no less service than [progress_of_job]. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ

progress_of_job <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ

progress_of_job <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t2 < t1 + δ

progress_of_job <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
progress_of_job <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t2 < t1 + δ

progress_of_job <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t2 < t1 + δ
COMPL: completed_by sched j t2

progress_of_job <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t2 < t1 + δ
COMPL: completed_by sched j t2

job_cost j <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t2 < t1 + δ
COMPL: completed_by sched j t2

job_cost j <= service_during sched j 0 t2 + service_during sched j t2 (t1 + δ)
by apply leq_trans with (service_during sched j 0 t2); [| rewrite leq_addr].
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2

progress_of_job <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2

progress_of_job <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ

progress_of_job <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job <= δ - cumulative_interference j t1 (t1 + δ)

progress_of_job <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job <= δ - cumulative_interference j t1 (t1 + δ)

δ - cumulative_interference j t1 (t1 + δ) <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job <= δ - cumulative_interference j t1 (t1 + δ)

δ - cumulative_interference j t1 (t1 + δ) <= service_during sched j t1 (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job <= δ - cumulative_interference j t1 (t1 + δ)
service_during sched j t1 (t1 + δ) <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job <= δ - cumulative_interference j t1 (t1 + δ)

δ - cumulative_interference j t1 (t1 + δ) <= service_during sched j t1 (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job <= δ - cumulative_interference j t1 (t1 + δ)

δ - cumulative_interference j t1 (t1 + δ) <= ?n
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job <= δ - cumulative_interference j t1 (t1 + δ)
?n <= service_during sched j t1 (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job <= δ - cumulative_interference j t1 (t1 + δ)

δ - cumulative_interference j t1 (t1 + δ) <= ?n
by apply leq_sub2r, (interference_is_complement_to_schedule t1 t2); [apply H_busy_interval | apply leqnn | apply NEQ].
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job <= δ - cumulative_interference j t1 (t1 + δ)

service_during sched j t1 (t1 + δ) + cumulative_interference j t1 (t1 + δ) - cumulative_interference j t1 (t1 + δ) <= service_during sched j t1 (t1 + δ)
by rewrite -addnBA // subnn addn0 //.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job <= δ - cumulative_interference j t1 (t1 + δ)

service_during sched j t1 (t1 + δ) <= service sched j (t1 + δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
H3: JobPreemptable Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_respect_taskset_costs: arrivals_have_valid_job_costs arr_seq
tsk: Task
H4: Interference Job
H5: InterferingWorkload Job
H_work_conserving: work_conserving arr_seq sched
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 sched j t1 t2
progress_of_job: duration
H_progress_le_job_cost: progress_of_job <= job_cost j
δ: duration
H_total_workload_is_bounded: progress_of_job + cumulative_interference j t1 (t1 + δ) <= δ
NEQ: t1 + δ <= t2
BOUND: progress_of_job <= δ - cumulative_interference j t1 (t1 + δ)

0 <= t1 <= t1 + δ
by apply/andP; split; last rewrite leq_addr. } Qed. End InterferenceBoundedImpliesEnoughService. End LowerBoundOnService.