Library prosa.analysis.facts.priority.elf

In this section, we state and prove some basic facts about the ELF scheduling policy.
Section ELFBasicFacts.

Consider any type of tasks with relative priority points...
  Context {Task : TaskType} `{PriorityPoint Task}.

...and jobs of these tasks.
  Context {Job : JobType} `{JobTask Job Task} `{JobCost Job} {AR : JobArrival Job}.

Consider any arbitrary FP policy ...
  Variable FP : FP_policy Task.

... that is reflexive, transitive, and total.

Basic properties of the ELF policy

We first note that, by definition, ELF reduces to GEL for equal-priority tasks.
  Remark hep_job_elf_gel :
     j j',
      ep_task (job_task j) (job_task j')
      (@hep_job _ (ELF FP) j j') = (@hep_job _ (GEL Job Task) j j').

We then show that if we are looking at two jobs of the same task, then hep_job is a statement about their respective arrival times.
  Fact hep_job_arrival_elf :
     j j',
      same_task j j'
      hep_job j j' = (job_arrival j job_arrival j').

ELF is reflexive.
ELF is transitive.
ELF is total.
The ELF policy is JLFP_FP_compatible.

Sequentiality under ELF

The ELF policy satisfies the sequential-tasks hypothesis.
In this section, we prove that tasks always execute sequentially in a uniprocessor schedule following the ELF policy.
Consider any valid arrival sequence.
    Variable arr_seq : arrival_sequence Job.
    Hypothesis H_valid_arrivals : valid_arrival_sequence arr_seq.

Allow for any uniprocessor model.
    Context {PState : ProcessorState Job}.
    Hypothesis H_uniproc : uniprocessor_model PState.

Next, consider any schedule of the arrival sequence, ...
    Variable sched : schedule PState.

... allow for any work-bearing notion of job readiness, ...
    Context `{@JobReady Job PState _ AR}.
    Hypothesis H_job_ready : work_bearing_readiness arr_seq sched.

... and assume that the schedule is valid.
    Hypothesis H_sched_valid : valid_schedule sched arr_seq.

Consider any valid preemption model.
Assume an ELF schedule.
To prove sequentiality, we use the lemma early_hep_job_is_scheduled. Clearly, under the ELF priority policy, jobs satisfy the conditions described by the lemma (i.e., given two jobs j1 and j2 from the same task, if j1 arrives earlier than j2, then j1 always has a higher priority than job j2, and hence completes before j2); therefore, ELF implies the sequential_tasks property.
We add the above facts into a "Hint Database" basic_rt_facts, so Coq will be able to apply them automatically where needed.
Global Hint Resolve
    ELF_is_reflexive
    ELF_is_transitive
    ELF_is_total
    ELF_is_JLFP_FP_compatible
    ELF_respects_sequential_tasks
    ELF_implies_sequential_tasks
 : basic_rt_facts.