Library prosa.implementation.priority.gel

Require Import prosa.util.int.
Require Export prosa.model.priority.gel.
Require Export prosa.analysis.facts.hyperperiod.

GEL Priority Policy

We introduce the canonical GEL priority policy, under which jobs are scheduled in order of their absolute priority points. The GEL policy belongs to the class of JLFP policies.
#[local] Instance GEL (Job : JobType) `{JobPriorityPoint Job} : JLFP_policy Job :=
{
  hep_job (j1 j2 : Job) := (job_priority_point j1 ≤ job_priority_point j2)%R
}.

In this section, we prove a few properties about the concrete GEL policy.
Section PropertiesOfGEL.

Consider any type of jobs with absolute priority points.
  Context {Job : JobType} `{JobPriorityPoint Job}.

Under the concrete GEL implementation, hep_job is exactly priority-point order.
  Fact GEL_hep_job :
    ∀ j1 j2,
      @hep_job Job (GEL Job) j1 j2
      = (job_priority_point j1 ≤ job_priority_point j2)%R.

GEL is reflexive.
GEL is transitive.
GEL is total.
The concrete GEL implementation is indeed a GEL policy.
GEL's priority-point order repeats with a periodic workload.
Consider periodic tasks with relative priority points ...
... and jobs whose absolute priority points are derived from their tasks.
  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 priority-point order.
We add the above facts into the basic_rt_facts hint database so Rocq can apply them automatically where needed.
Global Hint Resolve
  GEL_is_GEL_policy
  GEL_is_reflexive
  GEL_is_transitive
  GEL_is_total
  GEL_priorities_consistent_across_hyperperiods
  : basic_rt_facts.