Built with Alectryon, running Coq+SerAPI v8.15.0+0.15.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.
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "_ + _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ - _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ <= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ < _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ >= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ > _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ <= _ <= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ < _ <= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ <= _ < _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ < _ < _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ * _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
(** * RTA for EDF with Fixed Preemption Points *) (** In this module we prove the RTA theorem for EDF-schedulers with fixed preemption points. *) (** ** Setup and Assumptions *) Section RTAforFixedPreemptionPointsModelwithArrivalCurves. (** Consider any type of tasks ... *) Context {Task : TaskType}. Context `{TaskCost Task}. Context `{TaskDeadline Task}. (** ... and any type of jobs associated with these tasks. *) Context {Job : JobType}. Context `{JobTask Job Task}. Context `{JobArrival Job}. Context `{JobCost Job}. (** We assume the classic (i.e., Liu & Layland) model of readiness without jitter or self-suspensions, wherein pending jobs are always ready. *) #[local] Existing Instance basic_ready_instance. (** We assume that jobs are limited-preemptive. *) #[local] Existing Instance limited_preemptive_job_model. (** Consider any arrival sequence with consistent, non-duplicate arrivals. *) Variable arr_seq : arrival_sequence Job. Hypothesis H_arrival_times_are_consistent : consistent_arrival_times arr_seq. Hypothesis H_arr_seq_is_a_set : arrival_sequence_uniq arr_seq. (** Consider an arbitrary task set ts, ... *) Variable ts : list Task. (** ... assume that all jobs come from this task set, ... *) Hypothesis H_all_jobs_from_taskset : all_jobs_from_taskset arr_seq ts. (** ... and the cost of a job cannot be larger than the task cost. *) Hypothesis H_valid_job_cost: arrivals_have_valid_job_costs arr_seq. (** Next, we assume we have the model with fixed preemption points. I.e., each task is divided into a number of non-preemptive segments by inserting statically predefined preemption points. *) Context `{JobPreemptionPoints Job}. Context `{TaskPreemptionPoints Task}. Hypothesis H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts. (** Let max_arrivals be a family of valid arrival curves, i.e., for any task [tsk] in ts [max_arrival tsk] is (1) an arrival bound of [tsk], and (2) it is a monotonic function that equals 0 for the empty interval delta = 0. *) Context `{MaxArrivals Task}. Hypothesis H_valid_arrival_curve : valid_taskset_arrival_curve ts max_arrivals. Hypothesis H_is_arrival_curve : taskset_respects_max_arrivals arr_seq ts. (** Let [tsk] be any task in ts that is to be analyzed. *) Variable tsk : Task. Hypothesis H_tsk_in_ts : tsk \in ts. (** Next, consider any valid ideal uni-processor schedule with limited preemptions of this arrival sequence ... *) Variable sched : schedule (ideal.processor_state Job). Hypothesis H_sched_valid: valid_schedule sched arr_seq. Hypothesis H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched. (** Next, we assume that the schedule is a work-conserving schedule... *) Hypothesis H_work_conserving : work_conserving arr_seq sched. (** ... and the schedule respects the policy defined by the [job_preemptable] function (i.e., jobs have bounded non-preemptive segments). *) Hypothesis H_respects_policy : respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job). (** ** Total Workload and Length of Busy Interval *) (** We introduce the abbreviation [rbf] for the task request bound function, which is defined as [task_cost(T) × max_arrivals(T,Δ)] for a task T. *) Let rbf := task_request_bound_function. (** Next, we introduce [task_rbf] as an abbreviation for the task request bound function of task [tsk]. *) Let task_rbf := rbf tsk. (** Using the sum of individual request bound functions, we define the request bound function of all tasks (total request bound function). *) Let total_rbf := total_request_bound_function ts. (** We define a bound for the priority inversion caused by jobs with lower priority. *) Let blocking_bound A := \max_(tsk_other <- ts | (blocking_relevant tsk_other) && (task_deadline tsk_other > task_deadline tsk + A)) (task_max_nonpreemptive_segment tsk_other - ε). (** Next, we define an upper bound on interfering workload received from jobs of other tasks with higher-than-or-equal priority. *) Let bound_on_total_hep_workload A Δ := \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn ((A + ε) + task_deadline tsk - task_deadline tsk_o) Δ). (** Let L be any positive fixed point of the busy interval recurrence. *) Variable L : duration. Hypothesis H_L_positive : L > 0. Hypothesis H_fixed_point : L = total_rbf L. (** ** Response-Time Bound *) (** To reduce the time complexity of the analysis, recall the notion of search space. *) Let is_in_search_space := bounded_nps.is_in_search_space ts tsk L. (** Consider any value [R], and assume that for any given arrival offset [A] in the search space, there is a solution of the response-time bound recurrence which is bounded by [R]. *) Variable R : duration. Hypothesis H_R_is_maximum: forall (A : duration), is_in_search_space A -> exists (F : duration), A + F >= blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) /\ R >= F + (task_last_nonpr_segment tsk - ε). (** Now, we can leverage the results for the abstract model with bounded non-preemptive segments to establish a response-time bound for the more concrete model of fixed preemption points. *) Let response_time_bounded_by := task_response_time_bound arr_seq sched.
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop

response_time_bounded_by tsk R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop

response_time_bounded_by tsk R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts

response_time_bounded_by tsk R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq

response_time_bounded_by tsk R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
ZERO: task_cost tsk = 0

response_time_bounded_by tsk R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
response_time_bounded_by tsk R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
ZERO: task_cost tsk = 0

response_time_bounded_by tsk R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
ZERO: task_cost tsk = 0
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j

job_response_time_bound sched j R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
ZERO: task_cost tsk = 0
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POSt: valid_job_cost j

job_response_time_bound sched j R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
ZERO: task_cost tsk = 0
j: Job
ARR: arrives_in arr_seq j
TSK: job_task j = tsk
Z: job_cost j = 0

job_response_time_bound sched j R
by rewrite /job_response_time_bound /completed_by Z.
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

response_time_bounded_by tsk R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

consistent_arrival_times arr_seq
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
arrival_sequence_uniq arr_seq
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
valid_schedule sched arr_seq
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
valid_model_with_bounded_nonpreemptive_segments arr_seq sched
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
work_conserving arr_seq sched
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
all_jobs_from_taskset arr_seq ?ts
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
arrivals_have_valid_job_costs arr_seq
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
valid_taskset_arrival_curve ?ts max_arrivals
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
taskset_respects_max_arrivals arr_seq ?ts
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
tsk \in ?ts
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
valid_preemption_model arr_seq sched
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
valid_task_run_to_completion_threshold arr_seq tsk
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
0 < L
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
L = total_request_bound_function ?ts L
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
forall A : duration, bounded_nps.is_in_search_space ?ts tsk L A -> exists F : duration, bounded_nps.blocking_bound ?ts tsk A + (task_request_bound_function tsk (A + ε) - (task_cost tsk - task_rtct tsk)) + \sum_(tsk_o <- ?ts | tsk_o != tsk) task_request_bound_function tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) (A + F)) <= A + F /\ F + (task_cost tsk - task_rtct tsk) <= R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

forall A : duration, bounded_nps.is_in_search_space ts tsk L A -> exists F : duration, bounded_nps.blocking_bound ts tsk A + (task_request_bound_function tsk (A + ε) - (task_cost tsk - task_rtct tsk)) + \sum_(tsk_o <- ts | tsk_o != tsk) task_request_bound_function tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) (A + F)) <= A + F /\ F + (task_cost tsk - task_rtct tsk) <= R
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

task_last_nonpr_segment tsk - ε <= task_cost tsk
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

0 < last0 (distances (task_preemption_points tsk))
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
last0 (distances (task_preemption_points tsk)) <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

0 < last0 (distances (task_preemption_points tsk))
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
last0 (distances (task_preemption_points tsk)) <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

0 < nth 0 (distances (task_preemption_points tsk)) (size (distances (task_preemption_points tsk))).-1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
last0 (distances (task_preemption_points tsk)) <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

(size (distances (task_preemption_points tsk))).-1 < size (distances (task_preemption_points tsk))
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
last0 (distances (task_preemption_points tsk)) <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

0 < size (distances (task_preemption_points tsk))
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
last0 (distances (task_preemption_points tsk)) <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
Fact2: 1 < size (task_preemption_points tsk)

0 < size (distances (task_preemption_points tsk))
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
last0 (distances (task_preemption_points tsk)) <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
Fact2, Fact3: 1 < size (task_preemption_points tsk)

0 < size (distances (task_preemption_points tsk))
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
last0 (distances (task_preemption_points tsk)) <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

last0 (distances (task_preemption_points tsk)) <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

last0 (distances (task_preemption_points tsk)) <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

last0 (distances (task_preemption_points tsk)) <= task_max_nonpreemptive_segment tsk
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
task_max_nonpreemptive_segment tsk <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

last0 (distances (task_preemption_points tsk)) <= task_max_nonpreemptive_segment tsk
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk
task_max_nonpreemptive_segment tsk <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

task_max_nonpreemptive_segment tsk <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

task_max_nonpreemptive_segment tsk <= (task_cost tsk).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

task_max_nonpreemptive_segment tsk <= (last0 (task_preemption_points tsk)).+1
Task: TaskType
H: TaskCost Task
H0: TaskDeadline Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
H_arr_seq_is_a_set: arrival_sequence_uniq arr_seq
ts: seq Task
H_all_jobs_from_taskset: all_jobs_from_taskset arr_seq ts
H_valid_job_cost: arrivals_have_valid_job_costs arr_seq
H4: JobPreemptionPoints Job
H5: TaskPreemptionPoints Task
H_valid_model_with_fixed_preemption_points: valid_fixed_preemption_points_model arr_seq ts
H6: MaxArrivals Task
H_valid_arrival_curve: valid_taskset_arrival_curve ts max_arrivals
H_is_arrival_curve: taskset_respects_max_arrivals arr_seq ts
tsk: Task
H_tsk_in_ts: tsk \in ts
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H_schedule_with_limited_preemptions: schedule_respects_preemption_model arr_seq sched
H_work_conserving: work_conserving arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched (EDF Job)
rbf:= task_request_bound_function: Task -> duration -> nat
task_rbf:= rbf tsk: duration -> nat
total_rbf:= total_request_bound_function ts: duration -> nat
blocking_bound:= fun A : nat => \max_(tsk_other <- ts | blocking_relevant tsk_other && (task_deadline tsk + A < task_deadline tsk_other)) (task_max_nonpreemptive_segment tsk_other - ε): nat -> nat
bound_on_total_hep_workload:= fun A Δ : nat => \sum_(tsk_o <- ts | tsk_o != tsk) rbf tsk_o (minn (A + ε + task_deadline tsk - task_deadline tsk_o) Δ): nat -> nat -> nat
L: duration
H_L_positive: 0 < L
H_fixed_point: L = total_rbf L
is_in_search_space:= bounded_nps.is_in_search_space ts tsk L: duration -> bool
R: duration
H_R_is_maximum: forall A : duration, is_in_search_space A -> exists F : duration, blocking_bound A + (task_rbf (A + ε) - (task_last_nonpr_segment tsk - ε)) + bound_on_total_hep_workload A (A + F) <= A + F /\ F + (task_last_nonpr_segment tsk - ε) <= R
response_time_bounded_by:= task_response_time_bound arr_seq sched: Task -> duration -> Prop
MLP: valid_limited_preemptions_job_model arr_seq
BEG: task_beginning_of_execution_in_preemption_points ts
END: task_end_of_execution_in_preemption_points ts
INCR: nondecreasing_task_preemption_points ts
HYP1: consistent_job_segment_count arr_seq
HYP2: job_respects_segment_lengths arr_seq
HYP3: task_segments_are_nonempty ts
BEGj: beginning_of_execution_in_preemption_points arr_seq
ENDj: end_of_execution_in_preemption_points arr_seq
POSt: 0 < task_cost tsk

task_max_nonpreemptive_segment tsk <= last0 (task_preemption_points tsk)
by apply max_distance_in_seq_le_last_element_of_seq; eauto 2. Qed. End RTAforFixedPreemptionPointsModelwithArrivalCurves.