Library prosa.implementation.priority.edf
EDF Priority Policy
#[local] Instance EDF (Job : JobType) `{JobDeadline Job} : JLFP_policy Job :=
{
hep_job (j1 j2 : Job) := job_deadline j1 ≤ job_deadline j2
}.
{
hep_job (j1 j2 : Job) := job_deadline j1 ≤ job_deadline j2
}.
In this section, we prove a few properties about EDF policy.
Consider any type of jobs with deadlines.
Consider any arrival sequence.
Fact EDF_hep_job :
∀ j1 j2,
@hep_job Job (EDF Job) j1 j2
= (job_deadline j1 ≤ job_deadline j2).
Proof. by []. Qed.
∀ j1 j2,
@hep_job Job (EDF Job) j1 j2
= (job_deadline j1 ≤ job_deadline j2).
Proof. by []. Qed.
EDF is reflexive.
EDF is transitive.
Fact EDF_is_transitive : transitive_job_priorities (EDF Job).
Proof. by move⇒ y x z; apply: leq_trans. Qed.
Proof. by move⇒ y x z; apply: leq_trans. Qed.
EDF is total.
The concrete EDF implementation is indeed an EDF policy.
Fact EDF_is_EDF_policy :
policy_is_EDF (EDF Job).
Proof.
repeat split.
- by move⇒ j1 j2; rewrite EDF_hep_job.
- exact: EDF_is_reflexive.
- exact: EDF_is_transitive.
- exact: EDF_is_total.
Qed.
End PropertiesOfEDF.
policy_is_EDF (EDF Job).
Proof.
repeat split.
- by move⇒ j1 j2; rewrite EDF_hep_job.
- exact: EDF_is_reflexive.
- exact: EDF_is_transitive.
- exact: EDF_is_total.
Qed.
End PropertiesOfEDF.
We add the above lemmas into a "Hint Database" basic_rt_facts, so Coq
will be able to apply them automatically.
Global Hint Resolve
EDF_is_EDF_policy
EDF_is_reflexive
EDF_is_transitive
EDF_is_total
: basic_rt_facts.
EDF_is_EDF_policy
EDF_is_reflexive
EDF_is_transitive
EDF_is_total
: basic_rt_facts.