Library prosa.analysis.definitions.progress

Job Progress (or Lack Thereof)

In the following section, we define a notion of "job progress", and conversely a notion of a lack of progress.

Section Progress.

Consider any type of jobs with a known cost...
  Context {Job : JobType}.
  Context `{JobCost Job}.

... and any kind of schedule.
  Context {PState : ProcessorState Job}.

For a given job and a given schedule...
  Variable sched : schedule PState.
  Variable j : Job.

  Section NotionsOfProgress.

...and two ordered points in time...
    Variable : .
    Hypothesis H_t1_before_t2: .

... we say that the job has progressed between the two points iff its total received service has increased.
    Definition job_has_progressed := service sched j < service sched j .

Conversely, if the accumulated service does not change, there is no progress.
    Definition no_progress := service sched j == service sched j .

We note that the negation of the former is equivalent to the latter definition.
    Lemma no_progress_equiv: ~~ job_has_progressed no_progress.
    Proof.
      rewrite /job_has_progressed /no_progress.
      split.
      { rewrite -leqNgt leq_eqVlt ⇒ /orP [EQ|LT]; first by rewrite eq_sym.
        exfalso.
        have MONO: service sched j service sched j
          by apply service_monotonic.
        have NOT_MONO: ~~ (service sched j service sched j )
          by apply /negPf; apply ltn_geF.
        move: NOT_MONO ⇒ /negP NOT_MONO.
        contradiction. }
      { move ⇒ /eqP →.
        rewrite -leqNgt.
        by apply service_monotonic. }
    Qed.


  End NotionsOfProgress.

For convenience, we define a lack of progress also in terms of given reference point t and the length of the preceding interval of inactivity , meaning that no progress has been made for at least time units.
  Definition no_progress_for (t : instant) (delta : duration) := no_progress (t - ) t.

End Progress.