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
1 merge request!203sporadic arrival model
...@@ -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