diff --git a/analysis/facts/model/rbf.v b/analysis/facts/model/rbf.v index 6fbe51739ba0755fb5a153884a8d2ee6e3fb994a..5489c130d532991a2e5f5cdcd2b8a1d210cc9381 100644 --- a/analysis/facts/model/rbf.v +++ b/analysis/facts/model/rbf.v @@ -22,79 +22,76 @@ Section ProofWorkloadBound. Context `{JobArrival Job}. Context `{JobCost Job}. - (** Consider any arrival sequence with consistent, non-duplicate arrivals... *) + (** 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. - (** ... and any schedule corresponding to this arrival sequence. *) + (** ... any schedule corresponding to this arrival sequence, ... *) Context {PState : Type} `{ProcessorState Job PState}. Variable sched : schedule PState. - Hypothesis H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence sched arr_seq. + Hypothesis H_jobs_come_from_arrival_sequence : + jobs_come_from_arrival_sequence sched arr_seq. - (** Consider an FP policy that indicates a higher-or-equal priority relation. *) + (** ... and an FP policy that indicates a higher-or-equal priority relation. *) Context `{FP_policy Task}. Let jlfp_higher_eq_priority := FP_to_JLFP Job Task. - (** Consider a task set ts... *) + (** Further, consider a task set [ts]... *) Variable ts : list Task. - (** ...and let [tsk] be any task in ts. *) + (** ... and let [tsk] be any task in [ts]. *) Variable tsk : Task. Hypothesis H_tsk_in_ts : tsk \in ts. - (** Assume that the job costs are no larger than the task costs. *) + (** Assume that the job costs are no larger than the task costs ... *) Hypothesis H_valid_job_cost : arrivals_have_valid_job_costs arr_seq. - (** Next, we assume that all jobs come from the task set. *) + (** ... and that all jobs come from the task set. *) Hypothesis H_all_jobs_from_taskset : all_jobs_from_taskset arr_seq ts. - (** Let max_arrivals be any arrival bound for task-set [ts]. *) + (** Let [max_arrivals] be any arrival bound for task-set [ts]. *) Context `{MaxArrivals Task}. Hypothesis H_is_arrival_bound : taskset_respects_max_arrivals arr_seq ts. - (** Next, we recall the notions of total workload of jobs... *) + (** Next, recall the notions of total workload of jobs... *) Let total_workload t1 t2 := workload_of_jobs predT (arrivals_between arr_seq t1 t2). (** ... and the workload of jobs of the same task as job j. *) Let task_workload t1 t2 := - workload_of_jobs (job_of_task tsk) (arrivals_between arr_seq t1 t2). + workload_of_jobs (job_of_task tsk) (arrivals_between arr_seq t1 t2). - (** Let's define some local names for clarity. *) + (** Finally, let us define some local names for clarity. *) Let task_rbf := task_request_bound_function tsk. Let total_rbf := total_request_bound_function ts. Let total_hep_rbf := total_hep_request_bound_function_FP ts tsk. Let total_ohep_rbf := total_ohep_request_bound_function_FP ts tsk. - (** In this section, we prove that the workload of any jobs is + (** In this section, we prove that the workload of all jobs is no larger than the request bound function. *) Section WorkloadIsBoundedByRBF. - (** Consider any time t and any interval of length delta. *) + (** Consider any time [t] and any interval of length [Δ]. *) Variable t : instant. - Variable delta : instant. + Variable Δ : instant. (** First, we show that workload of task [tsk] is bounded by the number of arrivals of the task times the cost of the task. *) Lemma task_workload_le_num_of_arrivals_times_cost: - task_workload t (t + delta) - <= task_cost tsk * number_of_task_arrivals arr_seq tsk t (t + delta). + task_workload t (t + Δ) + <= task_cost tsk * number_of_task_arrivals arr_seq tsk t (t + Δ). Proof. - rewrite /task_workload /workload_of_jobs/ number_of_task_arrivals /task_arrivals_between -big_filter /job_of_task. - rewrite // /number_of_task_arrivals -sum1_size big_distrr /= big_filter. - rewrite /task_workload_between /workload.task_workload_between /task_workload /workload_of_jobs. - destruct (task_arrivals_between arr_seq tsk t (t + delta)) eqn: TASK; unfold task_arrivals_between in TASK. - { by rewrite -big_filter !TASK !big_nil. } - { rewrite big_filter. - rewrite big_seq_cond. - rewrite [in X in _ <= X]big_seq_cond. + rewrite /task_workload /workload_of_jobs/ number_of_task_arrivals + /task_arrivals_between -big_filter -sum1_size big_distrr big_filter. + destruct (task_arrivals_between arr_seq tsk t (t + Δ)) eqn:TASK. + { unfold task_arrivals_between in TASK. + by rewrite -big_filter !TASK !big_nil. } + { rewrite //= big_filter big_seq_cond [in X in _ <= X]big_seq_cond. apply leq_sum. move => j' /andP [IN TSKj']. rewrite muln1. - unfold arrivals_have_valid_job_costs, valid_job_cost in H_valid_job_cost. - move : TSKj' => /eqP TSKj'. - rewrite -TSKj'. + move: TSKj' => /eqP TSKj'; rewrite -TSKj'. apply H_valid_job_cost. by apply in_arrivals_implies_arrived in IN. } Qed. @@ -102,25 +99,21 @@ Section ProofWorkloadBound. (** As a corollary, we prove that workload of task is no larger the than task request bound function. *) Corollary task_workload_le_task_rbf: - task_workload t (t + delta) <= task_rbf delta. + task_workload t (t + Δ) <= task_rbf Δ. Proof. - apply leq_trans with - (task_cost tsk * number_of_task_arrivals arr_seq tsk t (t + delta)); - first by apply task_workload_le_num_of_arrivals_times_cost. + eapply leq_trans; first by apply task_workload_le_num_of_arrivals_times_cost. rewrite leq_mul2l; apply/orP; right. - rewrite -{2}[delta](addKn t). + rewrite -{2}[Δ](addKn t). by apply H_is_arrival_bound; last rewrite leq_addr. Qed. (** Next, we prove that total workload of tasks is no larger than the total request bound function. *) - Lemma total_workload_le_total_rbf'': - total_workload t (t + delta) <= total_rbf delta. + Lemma total_workload_le_total_rbf: + total_workload t (t + Δ) <= total_rbf Δ. Proof. - set l := arrivals_between arr_seq t (t + delta). - apply leq_trans with - (n := \sum_(tsk' <- ts) - (\sum_(j0 <- l | job_task j0 == tsk') job_cost j0)). + set l := arrivals_between arr_seq t (t + Δ). + apply (@leq_trans (\sum_(tsk' <- ts) (\sum_(j0 <- l | job_task j0 == tsk') job_cost j0))). { rewrite /total_workload. have EXCHANGE := exchange_big_dep predT. rewrite EXCHANGE /=; clear EXCHANGE; last by done. @@ -128,113 +121,94 @@ Section ProofWorkloadBound. apply leq_sum; move => j0 /andP [IN0 HP0]. rewrite big_mkcond (big_rem (job_task j0)) /=. rewrite eq_refl; apply leq_addr. - by apply in_arrivals_implies_arrived in IN0; - apply H_all_jobs_from_taskset. - } + by apply in_arrivals_implies_arrived in IN0; apply H_all_jobs_from_taskset. } apply leq_sum_seq; intros tsk0 INtsk0 HP0. - apply leq_trans with - (task_cost tsk0 * size (task_arrivals_between arr_seq tsk0 t (t + delta))). - { rewrite -sum1_size big_distrr /= big_filter. - rewrite -/l /workload_of_jobs. - rewrite muln1. - apply leq_sum_seq; move => j0 IN0 /eqP EQ. - rewrite -EQ. + apply (@leq_trans (task_cost tsk0 * size (task_arrivals_between arr_seq tsk0 t (t + Δ)))). + { rewrite -sum1_size big_distrr /= big_filter -/l /workload_of_jobs muln1. + apply leq_sum_seq => j0 IN0 /eqP <-. apply H_valid_job_cost. - by apply in_arrivals_implies_arrived in IN0. - } + by apply in_arrivals_implies_arrived in IN0. } { rewrite leq_mul2l; apply/orP; right. - rewrite -{2}[delta](addKn t). - by apply H_is_arrival_bound; last rewrite leq_addr. - } + rewrite -{2}[Δ](addKn t). + by apply H_is_arrival_bound; last rewrite leq_addr. } Qed. - (** Next, we consider any job [j] of [tsk]. *) - Variable j : Job. - Hypothesis H_j_arrives : arrives_in arr_seq j. - Hypothesis H_job_of_tsk : job_task j = tsk. - - (** We say that two jobs [j1] and [j2] are in relation + (** Next, we consider any job [j] of [tsk]. *) + Variable j : Job. + Hypothesis H_j_arrives : arrives_in arr_seq j. + Hypothesis H_job_of_tsk : job_task j = tsk. + + (** We say that two jobs [j1] and [j2] are in relation [other_higher_eq_priority], iff [j1] has higher or equal priority than [j2] and is produced by a different task. *) - Let other_higher_eq_priority j1 j2 := jlfp_higher_eq_priority j1 j2 && (~~ same_task j1 j2). + Let other_higher_eq_priority j1 j2 := + jlfp_higher_eq_priority j1 j2 && (~~ same_task j1 j2). + (** Recall the notion of workload of higher or equal priority jobs... *) + Let total_hep_workload t1 t2 := + workload_of_jobs (fun j_other => jlfp_higher_eq_priority j_other j) + (arrivals_between arr_seq t1 t2). - (** Recall the notion of workload of higher or equal priority jobs... *) - Let total_hep_workload t1 t2 := - workload_of_jobs (fun j_other => jlfp_higher_eq_priority j_other j) (arrivals_between arr_seq t1 t2). + (** ... and workload of other higher or equal priority jobs. *) + Let total_ohep_workload t1 t2 := + workload_of_jobs (fun j_other => other_higher_eq_priority j_other j) + (arrivals_between arr_seq t1 t2). - (** ... and, workload of other higher or equal priority jobs. *) - Let total_ohep_workload t1 t2 := - workload_of_jobs (fun j_other => other_higher_eq_priority j_other j) (arrivals_between arr_seq t1 t2). - - - (** We prove that total workload of other tasks with higher-or-equal + (** We prove that total workload of other tasks with higher-or-equal priority is no larger than the total request bound function. *) - Lemma total_workload_le_total_rbf: - total_ohep_workload t (t + delta) <= total_ohep_rbf delta. - Proof. - set l := arrivals_between arr_seq t (t + delta). - apply leq_trans with - (\sum_(tsk' <- ts | hep_task tsk' tsk && (tsk' != tsk)) - (\sum_(j0 <- l | job_task j0 == tsk') job_cost j0)). - { intros. - rewrite /total_ohep_workload /workload_of_jobs /other_higher_eq_priority. - rewrite /jlfp_higher_eq_priority /FP_to_JLFP /same_task H_job_of_tsk. - have EXCHANGE := exchange_big_dep (fun x => hep_task (job_task x) tsk && (job_task x != tsk)). - rewrite EXCHANGE /=; last by move => tsk0 j0 HEP /eqP JOB0; rewrite JOB0. - rewrite /workload_of_jobs -/l big_seq_cond [X in _ <= X]big_seq_cond. - apply leq_sum; move => j0 /andP [IN0 HP0]. - rewrite big_mkcond (big_rem (job_task j0)) /=; first by rewrite HP0 andTb eq_refl; apply leq_addr. - by apply in_arrivals_implies_arrived in IN0; apply H_all_jobs_from_taskset. - } - apply leq_sum_seq; intros tsk0 INtsk0 HP0. - apply leq_trans with - (task_cost tsk0 * size (task_arrivals_between arr_seq tsk0 t (t + delta))). - { rewrite -sum1_size big_distrr /= big_filter. - rewrite /workload_of_jobs. - rewrite muln1 /l /arrivals_between /arrival_sequence.arrivals_between. - apply leq_sum_seq; move => j0 IN0 /eqP EQ. - by rewrite -EQ; apply H_valid_job_cost; apply in_arrivals_implies_arrived in IN0. - } - { rewrite leq_mul2l; apply/orP; right. - rewrite -{2}[delta](addKn t). - by apply H_is_arrival_bound; last rewrite leq_addr. - } - Qed. + Lemma total_workload_le_total_ohep_rbf: + total_ohep_workload t (t + Δ) <= total_ohep_rbf Δ. + Proof. + set l := arrivals_between arr_seq t (t + Δ). + apply (@leq_trans (\sum_(tsk' <- ts | hep_task tsk' tsk && (tsk' != tsk)) + (\sum_(j0 <- l | job_task j0 == tsk') job_cost j0))). + { rewrite /total_ohep_workload /workload_of_jobs /other_higher_eq_priority. + rewrite /jlfp_higher_eq_priority /FP_to_JLFP /same_task H_job_of_tsk. + set P := fun x => hep_task (job_task x) tsk && (job_task x != tsk). + rewrite (exchange_big_dep P) //=; last by rewrite /P; move => ???/eqP->. + rewrite /P /workload_of_jobs -/l big_seq_cond [X in _ <= X]big_seq_cond. + apply leq_sum; move => j0 /andP [IN0 HP0]. + rewrite big_mkcond (big_rem (job_task j0)). + - by rewrite HP0 andTb eq_refl; apply leq_addr. + - by apply in_arrivals_implies_arrived in IN0; apply H_all_jobs_from_taskset. } + apply leq_sum_seq; intros tsk0 INtsk0 HP0. + apply (@leq_trans (task_cost tsk0 * size (task_arrivals_between arr_seq tsk0 t (t + Δ)))). + { rewrite -sum1_size big_distrr /= big_filter /workload_of_jobs. + rewrite muln1 /l /arrivals_between /arrival_sequence.arrivals_between. + apply leq_sum_seq; move => j0 IN0 /eqP EQ. + by rewrite -EQ; apply H_valid_job_cost; apply in_arrivals_implies_arrived in IN0. } + { rewrite leq_mul2l; apply/orP; right. + rewrite -{2}[Δ](addKn t). + by apply H_is_arrival_bound; last rewrite leq_addr. } + Qed. - (** Next, we prove that total workload of tasks with higher-or-equal + (** Next, we prove that total workload of all tasks with higher-or-equal priority is no larger than the total request bound function. *) - Lemma total_workload_le_total_rbf': - total_hep_workload t (t + delta) <= total_hep_rbf delta. - Proof. - set l := arrivals_between arr_seq t (t + delta). - apply leq_trans with - (n := \sum_(tsk' <- ts | hep_task tsk' tsk) - (\sum_(j0 <- l | job_task j0 == tsk') job_cost j0)). - { rewrite /total_hep_workload /jlfp_higher_eq_priority /FP_to_JLFP H_job_of_tsk. - have EXCHANGE := exchange_big_dep (fun x => hep_task (job_task x) tsk). - rewrite EXCHANGE /=; clear EXCHANGE; last by move => tsk0 j0 HEP /eqP JOB0; rewrite JOB0. - rewrite /workload_of_jobs -/l big_seq_cond [X in _ <= X]big_seq_cond. - apply leq_sum; move => j0 /andP [IN0 HP0]. - rewrite big_mkcond (big_rem (job_task j0)) /=; first by rewrite HP0 andTb eq_refl; apply leq_addr. - by apply in_arrivals_implies_arrived in IN0; apply H_all_jobs_from_taskset. - } - apply leq_sum_seq; intros tsk0 INtsk0 HP0. - apply leq_trans with - (task_cost tsk0 * size (task_arrivals_between arr_seq tsk0 t (t + delta))). - { rewrite -sum1_size big_distrr /= big_filter. - rewrite -/l /workload_of_jobs. - rewrite muln1. - apply leq_sum_seq; move => j0 IN0 /eqP EQ. - rewrite -EQ. - apply H_valid_job_cost. - by apply in_arrivals_implies_arrived in IN0. - } - { rewrite leq_mul2l; apply/orP; right. - rewrite -{2}[delta](addKn t). - by apply H_is_arrival_bound; last rewrite leq_addr. - } - Qed. + Lemma total_workload_le_total_hep_rbf: + total_hep_workload t (t + Δ) <= total_hep_rbf Δ. + Proof. + set l := arrivals_between arr_seq t (t + Δ). + apply(@leq_trans (\sum_(tsk' <- ts | hep_task tsk' tsk) + (\sum_(j0 <- l | job_task j0 == tsk') job_cost j0))). + { rewrite /total_hep_workload /jlfp_higher_eq_priority /FP_to_JLFP H_job_of_tsk. + have EXCHANGE := exchange_big_dep (fun x => hep_task (job_task x) tsk). + rewrite EXCHANGE /=; clear EXCHANGE; last by move => tsk0 j0 HEP /eqP JOB0; rewrite JOB0. + rewrite /workload_of_jobs -/l big_seq_cond [X in _ <= X]big_seq_cond. + apply leq_sum; move => j0 /andP [IN0 HP0]. + rewrite big_mkcond (big_rem (job_task j0)). + - by rewrite HP0 andTb eq_refl; apply leq_addr. + - by apply in_arrivals_implies_arrived in IN0; apply H_all_jobs_from_taskset. } + apply leq_sum_seq; intros tsk0 INtsk0 HP0. + apply (@leq_trans (task_cost tsk0 * size (task_arrivals_between arr_seq tsk0 t (t + Δ)))). + { rewrite -sum1_size big_distrr /= big_filter. + rewrite -/l /workload_of_jobs muln1. + apply leq_sum_seq; move => j0 IN0 /eqP <-. + apply H_valid_job_cost. + by apply in_arrivals_implies_arrived in IN0. } + { rewrite leq_mul2l; apply/orP; right. + rewrite -{2}[Δ](addKn t). + by apply H_is_arrival_bound; last rewrite leq_addr. } + Qed. End WorkloadIsBoundedByRBF. @@ -261,9 +235,9 @@ Section RequestBoundFunctions. (** Let [tsk] be any task. *) Variable tsk : Task. - (** Let max_arrivals be a family of valid arrival curves, i.e., for any task [tsk] in 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. *) + that equals 0 for the empty interval Δ = 0. *) Context `{MaxArrivals Task}. Hypothesis H_valid_arrival_curve : valid_arrival_curve (max_arrivals tsk). Hypothesis H_is_arrival_curve : respects_max_arrivals arr_seq tsk (max_arrivals tsk). @@ -271,13 +245,13 @@ Section RequestBoundFunctions. (** Let's define some local names for clarity. *) Let task_rbf := task_request_bound_function tsk. - (** We prove that [task_rbf 0] is equal to 0. *) + (** We prove that [task_rbf 0] is equal to [0]. *) Lemma task_rbf_0_zero: task_rbf 0 = 0. Proof. rewrite /task_rbf /task_request_bound_function. apply/eqP; rewrite muln_eq0; apply/orP; right; apply/eqP. - by move: H_valid_arrival_curve => [T1 T2]. + by move: H_valid_arrival_curve => [T1 T2]. Qed. (** We prove that [task_rbf] is monotone. *) @@ -287,10 +261,10 @@ Section RequestBoundFunctions. rewrite /monotone; intros ? ? LE. rewrite /task_rbf /task_request_bound_function leq_mul2l. apply/orP; right. - by move: H_valid_arrival_curve => [_ T]; apply T. + by move: H_valid_arrival_curve => [_ T]; apply T. Qed. - (** Consider any job j of [tsk]. This guarantees that there exists at least one + (** Consider any job [j] of [tsk]. This guarantees that there exists at least one job of task [tsk]. *) Variable j : Job. Hypothesis H_j_arrives : arrives_in arr_seq j. @@ -300,30 +274,44 @@ Section RequestBoundFunctions. Lemma task_rbf_1_ge_task_cost: task_rbf 1 >= task_cost tsk. Proof. - have ALT: forall n, n = 0 \/ n > 0 - by clear; intros n; destruct n; [left | right]. + have ALT: forall n, n = 0 \/ n > 0 by clear; intros n; destruct n; [left | right]. specialize (ALT (task_cost tsk)); destruct ALT as [Z | POS]; first by rewrite Z. rewrite leqNgt; apply/negP; intros CONTR. move: H_is_arrival_curve => ARRB. specialize (ARRB (job_arrival j) (job_arrival j + 1)). feed ARRB; first by rewrite leq_addr. - rewrite addKn in ARRB. - move: CONTR; rewrite /task_rbf /task_request_bound_function; move => CONTR. - move: CONTR; rewrite -{2}[task_cost tsk]muln1 ltn_mul2l; move => /andP [_ CONTR]. - move: CONTR; rewrite -addn1 -{3}[1]add0n leq_add2r leqn0; move => /eqP CONTR. - move: ARRB; rewrite CONTR leqn0 eqn0Ngt; move => /negP T; apply: T. - rewrite /number_of_task_arrivals -has_predT. - rewrite /task_arrivals_between. + move: CONTR; rewrite /task_rbf /task_request_bound_function. + rewrite -{2}[task_cost tsk]muln1 ltn_mul2l => /andP [_ CONTR]. + move: CONTR; rewrite -addn1 -{3}[1]add0n leq_add2r leqn0 => /eqP CONTR. + move: ARRB; rewrite addKn CONTR leqn0 eqn0Ngt => /negP T; apply: T. + rewrite /number_of_task_arrivals -has_predT /task_arrivals_between. apply/hasP; exists j; last by done. rewrite /arrivals_between addn1 big_nat_recl; last by done. - rewrite big_geq ?cats0; last by done. - rewrite mem_filter. - apply/andP; split. - - by apply/eqP. - - move: H_j_arrives => [t ARR]. - move: (ARR) => CONS. - apply H_arrival_times_are_consistent in CONS. - by rewrite CONS. + rewrite big_geq ?cats0 //= mem_filter. + apply/andP; split; first by apply/eqP. + move: H_j_arrives => [t ARR]; move: (ARR) => CONS. + apply H_arrival_times_are_consistent in CONS. + by rewrite CONS. + Qed. + + (** Consider a set of tasks [ts] containing the task [tsk]. *) + Variable ts : seq Task. + Hypothesis H_tsk_in_ts : tsk \in ts. + + (** Next, we prove that cost of [tsk] is less than or equal to the + [total_request_bound_function]. *) + Lemma task_cost_le_sum_rbf : + forall t, + t > 0 -> + task_cost tsk <= total_request_bound_function ts t. + Proof. + move => t GE. + destruct t; first by done. + eapply leq_trans; first by apply task_rbf_1_ge_task_cost; eauto with basic_facts. + rewrite /total_request_bound_function. + erewrite big_rem; last by exact H_tsk_in_ts. + apply leq_trans with (task_request_bound_function tsk t.+1); last by apply leq_addr. + by apply task_rbf_monotone. Qed. End RequestBoundFunctions. diff --git a/results/edf/rta/bounded_pi.v b/results/edf/rta/bounded_pi.v index c20649a01ec1a7157ef33bd4e155c00970b6854d..bf82c7bf621befe8f445e1507670d27913ca0419 100644 --- a/results/edf/rta/bounded_pi.v +++ b/results/edf/rta/bounded_pi.v @@ -287,10 +287,10 @@ Section AbstractRTAforEDFwithArrivalCurves. move: H_sched_valid => [CARR MBR]. edestruct exists_busy_interval_from_total_workload_bound with (Δ := L) as [t1 [t2 [T1 [T2 GGG]]]]; eauto 2 with basic_facts. - { by intros; rewrite {2}H_fixed_point; apply total_workload_le_total_rbf''. } + { by intros; rewrite {2}H_fixed_point; apply total_workload_le_total_rbf. } exists t1, t2; split; first by done. split; first by done. - by eapply instantiated_busy_interval_equivalent_busy_interval; eauto 2 with basic_facts. + by eapply instantiated_busy_interval_equivalent_busy_interval; eauto 2 with basic_facts. Qed. (** Next, we prove that [IBF_other] is indeed an interference bound. *) diff --git a/results/fixed_priority/rta/bounded_pi.v b/results/fixed_priority/rta/bounded_pi.v index 1e79c835fc50ad9b4dd73354db31e1a9a2bfa523..e9182e7f9ad257e066ff3a07c3918ef093688178 100644 --- a/results/fixed_priority/rta/bounded_pi.v +++ b/results/fixed_priority/rta/bounded_pi.v @@ -244,7 +244,7 @@ Section AbstractRTAforFPwithArrivalCurves. move: H_sched_valid => [CARR MBR]. edestruct (exists_busy_interval) with (delta := L) as [t1 [t2 [T1 [T2 GGG]]]]; eauto 2 with basic_facts. - { by intros; rewrite {2}H_fixed_point leq_add //; apply total_workload_le_total_rbf'. } + { by intros; rewrite {2}H_fixed_point leq_add //; apply total_workload_le_total_hep_rbf. } exists t1, t2; split; first by done. split; first by done. by eapply instantiated_busy_interval_equivalent_busy_interval; eauto 2 with basic_facts. @@ -295,7 +295,7 @@ Section AbstractRTAforFPwithArrivalCurves. { apply service_of_jobs_le_workload; first apply ideal_proc_model_provides_unit_service. by apply (valid_schedule_implies_completed_jobs_dont_execute sched arr_seq). } { rewrite /workload_of_jobs /total_ohep_rbf /total_ohep_request_bound_function_FP. - by rewrite -TSK; apply total_workload_le_total_rbf. } + by rewrite -TSK; apply total_workload_le_total_ohep_rbf. } all: eauto 2 using arr_seq with basic_facts. } Qed.