Library prosa.model.priority.numeric_fixed_priority
Numeric Fixed Task Priorities
Based on this parameter, we define the corresponding FP policy.
Instance NumericFP (Task : TaskType) `{TaskPriority Task} : FP_policy Task :=
{
hep_task (tsk1 tsk2 : Task) := task_priority tsk1 ≥ task_priority tsk2
}.
{
hep_task (tsk1 tsk2 : Task) := task_priority tsk1 ≥ task_priority tsk2
}.
In this section, we prove a few basic properties of numeric fixed priorities.
Consider any kind of tasks with specified priorities...
...and jobs stemming from these tasks.
The resulting priority policy is reflexive.
Lemma NFP_is_reflexive : reflexive_priorities.
Proof. by move⇒ ?; rewrite /hep_job_at /JLFP_to_JLDP /hep_job /FP_to_JLFP /hep_task /NumericFP. Qed.
Proof. by move⇒ ?; rewrite /hep_job_at /JLFP_to_JLDP /hep_job /FP_to_JLFP /hep_task /NumericFP. Qed.
The resulting priority policy is transitive.
Lemma NFP_is_transitive : transitive_priorities.
Proof.
move⇒ t y x z.
rewrite /hep_job_at /JLFP_to_JLDP /hep_job /FP_to_JLFP /hep_task /NumericFP.
by move⇒ PRIO_yx PRIO_zy; apply leq_trans with (n := task_priority (job_task y)).
Qed.
Proof.
move⇒ t y x z.
rewrite /hep_job_at /JLFP_to_JLDP /hep_job /FP_to_JLFP /hep_task /NumericFP.
by move⇒ PRIO_yx PRIO_zy; apply leq_trans with (n := task_priority (job_task y)).
Qed.
The resulting priority policy is total.
Lemma NFP_is_total : total_priorities.
Proof. by move⇒ t j1 j2; apply leq_total. Qed.
End Properties.
Proof. by move⇒ t j1 j2; apply leq_total. Qed.
End Properties.
We add the above lemmas into a "Hint Database" basic_facts, so Coq
will be able to apply them automatically.
Hint Resolve
NFP_is_reflexive
NFP_is_transitive
NFP_is_total
: basic_facts.
NFP_is_reflexive
NFP_is_transitive
NFP_is_total
: basic_facts.