Skip to content
Snippets Groups Projects
Commit f7a31570 authored by Björn Brandenburg's avatar Björn Brandenburg
Browse files

sporadic tasks analysis: remove unnecessary offset parameter

Arguments about sporadic tasks do not reason about offsets as future
arrival times are unknown.
parent fb8be0fa
No related branches found
No related tags found
No related merge requests found
...@@ -3,68 +3,61 @@ Require Export prosa.analysis.facts.job_index. ...@@ -3,68 +3,61 @@ Require Export prosa.analysis.facts.job_index.
(** * The Sporadic Model *) (** * The Sporadic Model *)
(** In this section we prove a few basic properties involving (** In this section we prove a few basic properties involving
job indices in context of the sporadic model. *) job indices in context of the sporadic model. *)
Section SporadicModelIndexLemmas. Section SporadicModelIndexLemmas.
(** Consider sporadic tasks with an offset ... *) (** Consider sporadic tasks ... *)
Context {Task : TaskType}. Context {Task : TaskType} `{SporadicModel Task}.
Context `{TaskOffset Task}.
Context `{TaskMaxInterArrival Task}.
Context `{SporadicModel Task}.
(** ... and any type of jobs associated with these tasks. *) (** ... and any type of jobs associated with these tasks. *)
Context {Job : JobType}. Context {Job : JobType} `{JobTask Job Task} `{JobArrival Job}.
Context `{JobTask Job Task}.
Context `{JobArrival Job}.
(** Consider any unique arrival sequence with consistent arrivals, ... *) (** Consider any unique arrival sequence with consistent arrivals, ... *)
Variable arr_seq : arrival_sequence Job. Variable arr_seq : arrival_sequence Job.
Hypothesis H_consistent_arrivals: consistent_arrival_times arr_seq. Hypothesis H_consistent_arrivals: consistent_arrival_times arr_seq.
Hypothesis H_uniq_arrseq: arrival_sequence_uniq arr_seq. Hypothesis H_uniq_arrseq: arrival_sequence_uniq arr_seq.
(** ... and any sporadic task [tsk] that is to be analyzed. *) (** ... and any sporadic task [tsk] that is to be analyzed. *)
Variable tsk : Task. Variable tsk : Task.
Hypothesis H_sporadic_model: respects_sporadic_task_model arr_seq tsk. Hypothesis H_sporadic_model: respects_sporadic_task_model arr_seq tsk.
Hypothesis H_valid_inter_min_arrival: valid_task_min_inter_arrival_time tsk. Hypothesis H_valid_inter_min_arrival: valid_task_min_inter_arrival_time tsk.
(** Consider any two jobs from the arrival sequence that stem (** Consider any two jobs from the arrival sequence that stem
from task [tsk]. *) from task [tsk]. *)
Variable j1 : Job. Variable j1 : Job.
Variable j2 : Job. Variable j2 : Job.
Hypothesis H_j1_from_arrseq: arrives_in arr_seq j1. Hypothesis H_j1_from_arrseq: arrives_in arr_seq j1.
Hypothesis H_j2_from_arrseq: arrives_in arr_seq j2. Hypothesis H_j2_from_arrseq: arrives_in arr_seq j2.
Hypothesis H_j1_task: job_task j1 = tsk. Hypothesis H_j1_task: job_task j1 = tsk.
Hypothesis H_j2_task: job_task j2 = tsk. Hypothesis H_j2_task: job_task j2 = tsk.
(** We first show that for any two jobs [j1] and [j2], [j2] arrives after [j1] (** We first show that for any two jobs [j1] and [j2], [j2] arrives after [j1]
provided [job_index] of [j2] strictly exceeds the [job_index] of [j1]. *) provided [job_index] of [j2] strictly exceeds the [job_index] of [j1]. *)
Lemma lower_index_implies_earlier_arrival: Lemma lower_index_implies_earlier_arrival:
job_index arr_seq j1 < job_index arr_seq j2 -> job_index arr_seq j1 < job_index arr_seq j2 ->
job_arrival j1 < job_arrival j2. job_arrival j1 < job_arrival j2.
Proof. Proof.
intro IND. move=> LT_IND.
move: (H_sporadic_model j1 j2) => SPORADIC; feed_n 6 SPORADIC => //. move: (H_sporadic_model j1 j2) => SPORADIC; feed_n 6 SPORADIC => //.
- rewrite -> diff_jobs_iff_diff_indices => //; eauto. - rewrite -> diff_jobs_iff_diff_indices => //; eauto; first by lia.
+ now lia. by subst.
+ now rewrite H_j1_task.
- apply (index_lte_implies_arrival_lte arr_seq); try eauto. - apply (index_lte_implies_arrival_lte arr_seq); try eauto.
now rewrite H_j1_task. by subst.
- have POS_IA : task_min_inter_arrival_time tsk > 0 by auto. - have POS_IA : task_min_inter_arrival_time tsk > 0 by auto.
now lia. by lia.
Qed. Qed.
End SporadicModelIndexLemmas. End SporadicModelIndexLemmas.
(** ** Different jobs have different arrival times. *) (** ** Different jobs have different arrival times. *)
Section DifferentJobsImplyDifferentArrivalTimes. Section DifferentJobsImplyDifferentArrivalTimes.
(** Consider sporadic tasks with an offset ... *) (** Consider sporadic tasks ... *)
Context {Task : TaskType}. Context {Task : TaskType}.
Context `{TaskOffset Task}.
Context `{TaskMaxInterArrival Task}. Context `{TaskMaxInterArrival Task}.
Context `{SporadicModel Task}. Context `{SporadicModel Task}.
(** ... and any type of jobs associated with these tasks. *) (** ... and any type of jobs associated with these tasks. *)
Context {Job : JobType}. Context {Job : JobType}.
Context `{JobTask Job Task}. Context `{JobTask Job Task}.
...@@ -74,7 +67,7 @@ Section DifferentJobsImplyDifferentArrivalTimes. ...@@ -74,7 +67,7 @@ Section DifferentJobsImplyDifferentArrivalTimes.
Variable arr_seq : arrival_sequence Job. Variable arr_seq : arrival_sequence Job.
Hypothesis H_consistent_arrivals: consistent_arrival_times arr_seq. Hypothesis H_consistent_arrivals: consistent_arrival_times arr_seq.
Hypothesis H_uniq_arrseq: arrival_sequence_uniq arr_seq. Hypothesis H_uniq_arrseq: arrival_sequence_uniq arr_seq.
(** ... and any sporadic task [tsk] that is to be analyzed. *) (** ... and any sporadic task [tsk] that is to be analyzed. *)
Variable tsk : Task. Variable tsk : Task.
Hypothesis H_sporadic_model: respects_sporadic_task_model arr_seq tsk. Hypothesis H_sporadic_model: respects_sporadic_task_model arr_seq tsk.
...@@ -98,7 +91,7 @@ Section DifferentJobsImplyDifferentArrivalTimes. ...@@ -98,7 +91,7 @@ Section DifferentJobsImplyDifferentArrivalTimes.
rewrite -> diff_jobs_iff_diff_indices in UNEQ => //; eauto; last by rewrite H_j1_task. rewrite -> diff_jobs_iff_diff_indices in UNEQ => //; eauto; last by rewrite H_j1_task.
move /neqP: UNEQ; rewrite neq_ltn => /orP [LT|LT]. move /neqP: UNEQ; rewrite neq_ltn => /orP [LT|LT].
all: try ( now apply lower_index_implies_earlier_arrival with (tsk0 := tsk) in LT => //; lia ) || all: try ( now apply lower_index_implies_earlier_arrival with (tsk0 := tsk) in LT => //; lia ) ||
now apply lower_index_implies_earlier_arrival with (tsk := tsk) in LT => //; lia. now apply lower_index_implies_earlier_arrival with (tsk := tsk) in LT => //; lia.
Qed. Qed.
(** We prove a stronger version of the above lemma by showing (** We prove a stronger version of the above lemma by showing
...@@ -115,23 +108,18 @@ Section DifferentJobsImplyDifferentArrivalTimes. ...@@ -115,23 +108,18 @@ Section DifferentJobsImplyDifferentArrivalTimes.
move /neqP: NEQ; rewrite neq_ltn => /orP [LT|LT]. move /neqP: NEQ; rewrite neq_ltn => /orP [LT|LT].
all: try ( now apply lower_index_implies_earlier_arrival with (tsk0 := tsk) in LT => //; lia ) || now apply lower_index_implies_earlier_arrival with (tsk := tsk) in LT => //; lia. all: try ( now apply lower_index_implies_earlier_arrival with (tsk0 := tsk) in LT => //; lia ) || now apply lower_index_implies_earlier_arrival with (tsk := tsk) in LT => //; lia.
Qed. Qed.
End DifferentJobsImplyDifferentArrivalTimes. End DifferentJobsImplyDifferentArrivalTimes.
(** In this section we prove a few properties regarding task arrivals (** In this section we prove a few properties regarding task arrivals
in context of the sporadic task model. *) in context of the sporadic task model. *)
Section SporadicArrivals. Section SporadicArrivals.
(** Consider sporadic tasks with an offset ... *) (** Consider sporadic tasks ... *)
Context {Task : TaskType}. Context {Task : TaskType} `{SporadicModel Task} `{TaskMaxInterArrival Task}.
Context `{TaskOffset Task}.
Context `{SporadicModel Task}.
Context `{TaskMaxInterArrival Task}.
(** ... and any type of jobs associated with these tasks. *) (** ... and any type of jobs associated with these tasks. *)
Context {Job : JobType}. Context {Job : JobType} `{JobTask Job Task} `{JobArrival Job}.
Context `{JobTask Job Task}.
Context `{JobArrival Job}.
(** Consider any unique arrival sequence with consistent arrivals, ... *) (** Consider any unique arrival sequence with consistent arrivals, ... *)
Variable arr_seq : arrival_sequence Job. Variable arr_seq : arrival_sequence Job.
...@@ -140,15 +128,14 @@ Section SporadicArrivals. ...@@ -140,15 +128,14 @@ Section SporadicArrivals.
(** ... and any sporadic task [tsk] to be analyzed. *) (** ... and any sporadic task [tsk] to be analyzed. *)
Variable tsk : Task. Variable tsk : Task.
(** Assume all tasks have valid minimum inter-arrival times, valid offsets, and respect the (** Assume all tasks have valid minimum inter-arrival times, valid offsets, and respect the
sporadic task model. *) sporadic task model. *)
Hypothesis H_sporadic_model: respects_sporadic_task_model arr_seq tsk. Hypothesis H_sporadic_model: respects_sporadic_task_model arr_seq tsk.
Hypothesis H_valid_inter_min_arrival: valid_task_min_inter_arrival_time tsk. Hypothesis H_valid_inter_min_arrival: valid_task_min_inter_arrival_time tsk.
Hypothesis H_valid_offset: valid_offset arr_seq tsk.
(** Consider any two jobs from the arrival sequence that stem (** Consider any two jobs from the arrival sequence that stem
from task [tsk]. *) from task [tsk]. *)
Variable j1 j2 : Job. Variable j1 j2 : Job.
Hypothesis H_j1_from_arrival_sequence: arrives_in arr_seq j1. Hypothesis H_j1_from_arrival_sequence: arrives_in arr_seq j1.
Hypothesis H_j2_from_arrival_sequence: arrives_in arr_seq j2. Hypothesis H_j2_from_arrival_sequence: arrives_in arr_seq j2.
...@@ -180,7 +167,7 @@ Section SporadicArrivals. ...@@ -180,7 +167,7 @@ Section SporadicArrivals.
(** We show that no jobs of the task [tsk] other than [j1] arrive at (** We show that no jobs of the task [tsk] other than [j1] arrive at
the same time as [j1], and thus the task arrivals at [job arrival j1] the same time as [j1], and thus the task arrivals at [job arrival j1]
consists only of job [j1]. *) consists only of job [j1]. *)
Lemma only_j_in_task_arrivals_at_j: Lemma only_j_in_task_arrivals_at_j:
task_arrivals_at_job_arrival arr_seq j1 = [::j1]. task_arrivals_at_job_arrival arr_seq j1 = [::j1].
Proof. Proof.
...@@ -190,7 +177,7 @@ Section SporadicArrivals. ...@@ -190,7 +177,7 @@ Section SporadicArrivals.
by intros; now destruct (size seq) as [ | [ | ]]; try auto. by intros; now destruct (size seq) as [ | [ | ]]; try auto.
move: SIZE_CASE => [Z|[ONE|GTONE]]. move: SIZE_CASE => [Z|[ONE|GTONE]].
- apply size0nil in Z. - apply size0nil in Z.
now rewrite Z in J_IN_FILTER. now rewrite Z in J_IN_FILTER.
- repeat (destruct seq; try by done). - repeat (destruct seq; try by done).
rewrite mem_seq1 in J_IN_FILTER; move : J_IN_FILTER => /eqP J1_S. rewrite mem_seq1 in J_IN_FILTER; move : J_IN_FILTER => /eqP J1_S.
now rewrite J1_S. now rewrite J1_S.
...@@ -202,35 +189,35 @@ Section SporadicArrivals. ...@@ -202,35 +189,35 @@ Section SporadicArrivals.
(** We show that no jobs of the task [tsk] other than [j1] arrive at (** We show that no jobs of the task [tsk] other than [j1] arrive at
the same time as [j1], and thus the task arrivals at [job arrival j1] the same time as [j1], and thus the task arrivals at [job arrival j1]
consists only of job [j1]. *) consists only of job [j1]. *)
Lemma only_j_at_job_arrival_j: Lemma only_j_at_job_arrival_j:
forall t, forall t,
job_arrival j1 = t -> job_arrival j1 = t ->
task_arrivals_at arr_seq tsk t = [::j1]. task_arrivals_at arr_seq tsk t = [::j1].
Proof. Proof.
intros t ARR. intros t ARR.
rewrite -ARR. rewrite -ARR.
specialize (only_j_in_task_arrivals_at_j) => J_AT. specialize (only_j_in_task_arrivals_at_j) => J_AT.
now rewrite /task_arrivals_at_job_arrival H_j1_task in J_AT. now rewrite /task_arrivals_at_job_arrival H_j1_task in J_AT.
Qed. Qed.
(** We show that a job [j1] is the first job that arrives (** We show that a job [j1] is the first job that arrives
in task arrivals at [job_arrival j1] by showing that the in task arrivals at [job_arrival j1] by showing that the
index of job [j1] in [task_arrivals_at_job_arrival arr_seq j1] is 0. *) index of job [j1] in [task_arrivals_at_job_arrival arr_seq j1] is 0. *)
Lemma index_j_in_task_arrivals_at: Lemma index_j_in_task_arrivals_at:
index j1 (task_arrivals_at_job_arrival arr_seq j1) = 0. index j1 (task_arrivals_at_job_arrival arr_seq j1) = 0.
Proof. Proof.
now rewrite only_j_in_task_arrivals_at_j //= eq_refl. now rewrite only_j_in_task_arrivals_at_j //= eq_refl.
Qed. Qed.
(** We observe that for any job [j] the arrival time of [prev_job j] is (** We observe that for any job [j] the arrival time of [prev_job j] is
strictly less than the arrival time of [j] in context of periodic tasks. *) strictly less than the arrival time of [j] in context of periodic tasks. *)
Lemma prev_job_arr_lt: Lemma prev_job_arr_lt:
job_index arr_seq j1 > 0 -> job_index arr_seq j1 > 0 ->
job_arrival (prev_job arr_seq j1) < job_arrival j1. job_arrival (prev_job arr_seq j1) < job_arrival j1.
Proof. Proof.
intros IND. intros IND.
have PREV_ARR_LTE : job_arrival (prev_job arr_seq j1) <= job_arrival j1 by apply prev_job_arr_lte => //. have PREV_ARR_LTE : job_arrival (prev_job arr_seq j1) <= job_arrival j1 by apply prev_job_arr_lte => //.
rewrite ltn_neqAle; apply /andP. rewrite ltn_neqAle; apply /andP.
split => //; apply /eqP. split => //; apply /eqP.
try ( apply uneq_job_uneq_arr with (arr_seq0 := arr_seq) (tsk0 := job_task j1) => //; try by rewrite H_j1_task ) || try ( apply uneq_job_uneq_arr with (arr_seq0 := arr_seq) (tsk0 := job_task j1) => //; try by rewrite H_j1_task ) ||
...@@ -242,8 +229,8 @@ Section SporadicArrivals. ...@@ -242,8 +229,8 @@ Section SporadicArrivals.
now lia. now lia.
Qed. Qed.
(** We show that task arrivals at [job_arrival j1] is the (** We show that task arrivals at [job_arrival j1] is the
same as task arrivals that arrive between [job_arrival j1] same as task arrivals that arrive between [job_arrival j1]
and [job_arrival j1 + 1]. *) and [job_arrival j1 + 1]. *)
Lemma task_arrivals_at_as_task_arrivals_between: Lemma task_arrivals_at_as_task_arrivals_between:
task_arrivals_at_job_arrival arr_seq j1 = task_arrivals_between arr_seq tsk (job_arrival j1) (job_arrival j1).+1. task_arrivals_at_job_arrival arr_seq j1 = task_arrivals_between arr_seq tsk (job_arrival j1) (job_arrival j1).+1.
...@@ -251,9 +238,9 @@ Section SporadicArrivals. ...@@ -251,9 +238,9 @@ Section SporadicArrivals.
rewrite /task_arrivals_at_job_arrival /task_arrivals_at /task_arrivals_between /arrivals_between. rewrite /task_arrivals_at_job_arrival /task_arrivals_at /task_arrivals_between /arrivals_between.
now rewrite big_nat1 H_j1_task. now rewrite big_nat1 H_j1_task.
Qed. Qed.
(** We show that the task arrivals up to the previous job [j1] concatenated with (** We show that the task arrivals up to the previous job [j1] concatenated with
the sequence [::j1] (the sequence containing only the job [j1]) is same as the sequence [::j1] (the sequence containing only the job [j1]) is same as
task arrivals up to [job_arrival j1]. *) task arrivals up to [job_arrival j1]. *)
Lemma prev_job_cat: Lemma prev_job_cat:
job_index arr_seq j1 > 0 -> job_index arr_seq j1 > 0 ->
...@@ -268,5 +255,5 @@ Section SporadicArrivals. ...@@ -268,5 +255,5 @@ Section SporadicArrivals.
rewrite no_jobs_between_consecutive_jobs => //. rewrite no_jobs_between_consecutive_jobs => //.
now rewrite cat0s H_j1_task. now rewrite cat0s H_j1_task.
Qed. Qed.
End SporadicArrivals. End SporadicArrivals.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment