From 3ebb171f478d9dfdabe1d80c3fd59ccc9082ecfb Mon Sep 17 00:00:00 2001 From: Sergei Bozhko <sbozhko@mpi-sws.org> Date: Fri, 25 Sep 2020 13:08:21 +0200 Subject: [PATCH] add two helper lemmas on processor service --- analysis/facts/behavior/service.v | 37 +++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/analysis/facts/behavior/service.v b/analysis/facts/behavior/service.v index 5e25d2d48..8afab05fe 100644 --- a/analysis/facts/behavior/service.v +++ b/analysis/facts/behavior/service.v @@ -156,11 +156,20 @@ Section UnitService. by move=> t; rewrite /service_at. Qed. - (** ...which implies that the cumulative service received by job [j] in any - interval of length delta is at most delta. *) + (** ... which implies that the instantaneous service always equals to 0 or 1. *) + Corollary service_is_zero_or_one: + forall t, service_at sched j t = 0 \/ service_at sched j t = 1. + Proof. + intros. + have Lewf := service_at_most_one t. + remember (service_at sched j t) as Ï. + by destruct Ï; last destruct Ï; [left| right | exfalso]. + Qed. + + (** Next we prove that the cumulative service received by job [j] in + any interval of length [delta] is at most [delta]. *) Lemma cumulative_service_le_delta: - forall t delta, - service_during sched j t (t + delta) <= delta. + forall t delta, service_during sched j t (t + delta) <= delta. Proof. unfold service_during; intros t delta. apply leq_trans with (n := \sum_(t <= t0 < t + delta) 1); @@ -168,6 +177,26 @@ Section UnitService. by apply: leq_sum => t' _; apply: service_at_most_one. Qed. + (** Conversely, we prove that if the cumulative service received by + job [j] in an interval of length [delta] is greater than or + equal to [Ï], then [Ï â‰¤ delta]. *) + Lemma cumulative_service_ge_delta : + forall t delta Ï, + Ï <= service_during sched j t (t + delta) -> + Ï <= delta. + Proof. + induction delta; intros ? LE. + - by rewrite service_during_geq in LE; ssrlia. + - rewrite addnS -service_during_last_plus_before in LE; last by ssrlia. + destruct (service_is_zero_or_one (t + delta)) as [EQ|EQ]; rewrite EQ in LE. + + rewrite addn0 in LE. + by apply IHdelta in LE; rewrite (leqRW LE). + + rewrite addn1 in LE. + destruct Ï; first by done. + by rewrite ltnS in LE; apply IHdelta in LE; rewrite (leqRW LE). + Qed. + + Section ServiceIsAStepFunction. (** We show that the service received by any job [j] is a step function. *) -- GitLab