Library probsa.rt.analysis.arrivals
From prosa.model Require Import task.arrival.curves.
From prosa.analysis Require Export facts.behavior.arrivals.
From probsa.probability Require Export law_of_total_prob.
From probsa.rt.model Require Export events.
Local Open Scope nat_scope.
Section PrArrivalLemmas.
From prosa.analysis Require Export facts.behavior.arrivals.
From probsa.probability Require Export law_of_total_prob.
From probsa.rt.model Require Export events.
Local Open Scope nat_scope.
Section PrArrivalLemmas.
Consider any type of tasks and their jobs.
Context {Task : TaskType}
{α : MaxArrivals Task}.
Context {Job : finType}
{job_cost : JobCostRV Job Ω μ}
{job_arrival : JobArrivalRV Job Ω μ}
{job_task : JobTask Job Task}.
{α : MaxArrivals Task}.
Context {Job : finType}
{job_cost : JobCostRV Job Ω μ}
{job_arrival : JobArrivalRV Job Ω μ}
{job_task : JobTask Job Task}.
Consider an arbitrary task set ts...
... and let ξ denote a positive-probability element of such a
partition.
Variable ξ : I ξpart.
Context {ρ : PosProb μ (ξpart◁{ξ})}.
Lemma pr_arrivals_between_eq :
∀ (t1 t2 : instant) (ω1 ω2 : Ω),
ξpart◁{ξ} ω1 →
ξpart◁{ξ} ω2 →
pr_arrivals_between t1 t2 ω1 = pr_arrivals_between t1 t2 ω2.
Proof.
intros × INω1 INω2.
inversion INω1 as [EQ1]; move: EQ1 ⇒ /eqP EQ1.
inversion INω2 as [EQ2]; move: EQ2 ⇒ /eqP EQ2.
rewrite -EQ1 in EQ2; rewrite /pr_arrivals_between //=.
by f_equal; symmetry.
Qed.
Lemma pr_arrivals_task_between_eq :
∀ (t1 t2 : instant) (ω1 ω2 : Ω),
ξpart◁{ξ} ω1 →
ξpart◁{ξ} ω2 →
pr_arrivals_task_between tsk t1 t2 ω1 = pr_arrivals_task_between tsk t1 t2 ω2.
Proof.
intros × INω1 INω2.
rewrite /pr_arrivals_task_between //=.
by f_equal; apply pr_arrivals_between_eq.
Qed.
Lemma pr_arrivals_between_fixed_in_partition :
∀ (t1 t2 : instant),
∃ (jobs : seq Job), ∀ (ω : Ω),
ξpart◁{ξ} ω →
[seq x <- arrivals_between (arr_seq ω) t1 t2 | job_of_task tsk x] = jobs.
Proof.
intros × ; apply pr_pos_inv in ρ; destruct ρ as [ω [IN _]].
∃ ([seq j <- arrivals_between (arr_seq ω) t1 t2 | job_of_task tsk j]).
by intros ω' IN'; f_equal; apply pr_arrivals_between_eq.
Qed.
Hypothesis H_respects_arrival_curve :
∀ ω, taskset_respects_max_arrivals (arr_seq ω) ts.
Hypothesis H_valid_arrival_curve :
valid_taskset_arrival_curve ts α.
Lemma pr_arrivals_task_between_respect_arrival_curve :
∀ (t1 t2 : instant) (ω : Ω),
size (pr_arrivals_task_between tsk t1 t2 ω) ≤ α tsk (t2 - t1).
Proof.
intros.
have [LE|LE] := leqP t1 t2; last first.
{ apply leq_trans with 0%nat ⇒ //.
by rewrite leqn0 size_eq0 /pr_arrivals_task_between //=
arrivals_between_geq // ltnW.
}
{ apply: leq_trans; last first.
{ by apply (H_respects_arrival_curve ω tsk H_tsk_in_ts t1 t2) ⇒ //. }
{ by done. }
}
Qed.
Corollary pr_arrivals_task_between_respect_arrival_curve_mid :
∀ (t1 t2 A : instant) (ω : Ω),
size (pr_arrivals_task_between tsk (A - t1) (A + t2) ω) ≤ α tsk (t1 + t2).
Proof.
intros; apply: leq_trans; first by apply pr_arrivals_task_between_respect_arrival_curve.
apply H_valid_arrival_curve ⇒ //.
have [LE|LE] := leqP A t1.
{ move: (LE); rewrite -subn_eq0 ⇒ /eqP →.
by rewrite subn0 leq_add2r. }
{ rewrite subnBA; last by apply ltnW.
by rewrite -addnA addKn addnC. }
Qed.
End PrArrivalLemmas.
Context {ρ : PosProb μ (ξpart◁{ξ})}.
Lemma pr_arrivals_between_eq :
∀ (t1 t2 : instant) (ω1 ω2 : Ω),
ξpart◁{ξ} ω1 →
ξpart◁{ξ} ω2 →
pr_arrivals_between t1 t2 ω1 = pr_arrivals_between t1 t2 ω2.
Proof.
intros × INω1 INω2.
inversion INω1 as [EQ1]; move: EQ1 ⇒ /eqP EQ1.
inversion INω2 as [EQ2]; move: EQ2 ⇒ /eqP EQ2.
rewrite -EQ1 in EQ2; rewrite /pr_arrivals_between //=.
by f_equal; symmetry.
Qed.
Lemma pr_arrivals_task_between_eq :
∀ (t1 t2 : instant) (ω1 ω2 : Ω),
ξpart◁{ξ} ω1 →
ξpart◁{ξ} ω2 →
pr_arrivals_task_between tsk t1 t2 ω1 = pr_arrivals_task_between tsk t1 t2 ω2.
Proof.
intros × INω1 INω2.
rewrite /pr_arrivals_task_between //=.
by f_equal; apply pr_arrivals_between_eq.
Qed.
Lemma pr_arrivals_between_fixed_in_partition :
∀ (t1 t2 : instant),
∃ (jobs : seq Job), ∀ (ω : Ω),
ξpart◁{ξ} ω →
[seq x <- arrivals_between (arr_seq ω) t1 t2 | job_of_task tsk x] = jobs.
Proof.
intros × ; apply pr_pos_inv in ρ; destruct ρ as [ω [IN _]].
∃ ([seq j <- arrivals_between (arr_seq ω) t1 t2 | job_of_task tsk j]).
by intros ω' IN'; f_equal; apply pr_arrivals_between_eq.
Qed.
Hypothesis H_respects_arrival_curve :
∀ ω, taskset_respects_max_arrivals (arr_seq ω) ts.
Hypothesis H_valid_arrival_curve :
valid_taskset_arrival_curve ts α.
Lemma pr_arrivals_task_between_respect_arrival_curve :
∀ (t1 t2 : instant) (ω : Ω),
size (pr_arrivals_task_between tsk t1 t2 ω) ≤ α tsk (t2 - t1).
Proof.
intros.
have [LE|LE] := leqP t1 t2; last first.
{ apply leq_trans with 0%nat ⇒ //.
by rewrite leqn0 size_eq0 /pr_arrivals_task_between //=
arrivals_between_geq // ltnW.
}
{ apply: leq_trans; last first.
{ by apply (H_respects_arrival_curve ω tsk H_tsk_in_ts t1 t2) ⇒ //. }
{ by done. }
}
Qed.
Corollary pr_arrivals_task_between_respect_arrival_curve_mid :
∀ (t1 t2 A : instant) (ω : Ω),
size (pr_arrivals_task_between tsk (A - t1) (A + t2) ω) ≤ α tsk (t1 + t2).
Proof.
intros; apply: leq_trans; first by apply pr_arrivals_task_between_respect_arrival_curve.
apply H_valid_arrival_curve ⇒ //.
have [LE|LE] := leqP A t1.
{ move: (LE); rewrite -subn_eq0 ⇒ /eqP →.
by rewrite subn0 leq_add2r. }
{ rewrite subnBA; last by apply ltnW.
by rewrite -addnA addKn addnC. }
Qed.
End PrArrivalLemmas.