Library prosa.implementation.priority.fifo

FIFO Priority Policy

We define a basic FIFO priority policy, under which jobs are prioritized in order of their arrival times. The FIFO policy belongs to the class of JLFP policies.
#[local] Instance FIFO (Job : JobType) `{JobArrival Job} : JLFP_policy Job :=
{
  hep_job (j1 j2 : Job) := job_arrival j1 ≤ job_arrival j2
}.

In this section, we prove a few basic properties of the FIFO policy.
Section Properties.

Consider any type of jobs with arrival times.
  Context {Job : JobType} `{JobArrival Job}.

Under the concrete FIFO implementation, hep_job is exactly arrival order.
  Fact FIFO_hep_job :
    ∀ j1 j2,
      @hep_job Job (FIFO Job) j1 j2 = (job_arrival j1 ≤ job_arrival j2).

FIFO is reflexive.
FIFO is transitive.
FIFO is total.
  Fact FIFO_is_total :
    total_job_priorities (FIFO Job).

The concrete FIFO implementation is indeed a FIFO policy.
FIFO's arrival order repeats with a periodic workload.
Consider periodic tasks and their jobs.
  Context {Task : TaskType} `{PeriodicModel Task}.
  Context {Job : JobType} `{JobTask Job Task} `{JobArrival Job}.

Consider a task set with valid periods ...
  Variable ts : TaskSet Task.
  Hypothesis H_valid_periods : valid_periods ts.

... generating a valid arrival sequence of jobs of these tasks ...
... with periodic releases continuing indefinitely.
Shifting two jobs by one hyperperiod preserves their arrival order.
We add the above lemmas into a "Hint Database" basic_rt_facts, so Rocq will be able to apply them automatically.
Global Hint Resolve
  FIFO_is_FIFO_policy
  FIFO_is_reflexive
  FIFO_is_transitive
  FIFO_is_total
  FIFO_priorities_consistent_across_hyperperiods
  : basic_rt_facts.