Built with Alectryon, running Coq+SerAPI v8.20.0+0.20.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
[Loading ML file ssrmatching_plugin.cmxs (using legacy method) ... done]
[Loading ML file ssreflect_plugin.cmxs (using legacy method) ... done]
[Loading ML file ring_plugin.cmxs (using legacy method) ... done]
Serlib plugin: coq-elpi.elpi is not available: serlib support is missing.
Incremental checking for commands in this plugin will be impacted.
[Loading ML file coq-elpi.elpi ... done]
[Loading ML file zify_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_core_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_plugin.cmxs (using legacy method) ... done]
[Loading ML file btauto_plugin.cmxs (using legacy method) ... done]
Notation"_ + _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ - _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ <= _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ < _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ >= _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ > _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ <= _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ < _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ <= _ < _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ < _ < _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ * _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Require Export prosa.analysis.definitions.priority.classes.(** In this section, we prove some basic properties about priority relations. *)SectionBasicLemmas.(** Consider any type of tasks ... *)Context {Task : TaskType}.(** ... and any type of jobs associated with these tasks. *)Context {Job : JobType}.Context `{JobTask Job Task}.(** Consider a JLFP policy that indicates a higher-or-equal priority relation. *)Context `{JLFP_policy Job}.(** First, we prove that [another_hep_job] relation is anti-reflexive. *)
byapply/eqP.Qed.(** We show that [another_task_hep_job] is "task-wise" anti-reflexive; that is, given two jobs [j] and [j'] from the same task, [another_task_hep_job j' j] is false. *)
bymove: AA; rewrite TSK1 TSK2 => /negP A; apply: A.Qed.(** Alternative definition of [another_task_hep_job] using [another_hep_job] instead of [hep_job]. *)
bymove=> j1 j2; rewrite !negb_and negbK; case: eqP; rewrite /= !orbT.Qed.EndBasicLemmas.(** In the following section, we establish properties of [hp_task] and [ep_task ]auxiliary priority relations defined for FP policies. They are useful in proving properties of the ELF scheduling policy. *)SectionFPRelationsProperties.(** Consider any type of tasks and an FP policy that indicates a higher-or-equal priority relation on the tasks.*)Context {Task : TaskType} {FP_policy : FP_policy Task}.(** First, we prove some trivial lemmas about the [hep_task] and [ep_task] relations. *)SectionBasicProperties.(** [hp_task] is irreflexive. *)
bymove=> tsk; rewrite /hp_task; case: hep_task.Qed.(** If a task [tsk1] has higher priority than task [tsk2], then task [tsk1] has higher-or-equal priority than task [tsk2]. *)
byrewrite negb_and; apply/orP; right; apply/negPn.Qed.(** Task [tsk1] having equal priority as task [tsk2] is equivalent to task [tsk2] having equal priority as task [tsk1]. *)
bymove=> x y; rewrite /ep_task andbC.Qed.(** If a task [tsk1] has higher-or-equal priority than a task [tsk2], then [tsk1] either has strictly higher priority than [tsk2] or the two have equal priority. *)
bymove=> ? ?; rewrite /hp_task /ep_task -andb_orr orNb andbT.Qed.EndBasicProperties.(** In the following section, we establish a useful property about the equal priority relation, which follows when the FP policy is reflexive. *)SectionReflexiveProperties.(** Assuming that the FP policy is reflexive ... *)HypothesisH_reflexive : reflexive hep_task.(** ... it follows that the equal priority relation is reflexive. *)
bymove=> ?; apply /andP; split.Qed.EndReflexiveProperties.(** Now we establish useful properties about the higher priority relation, which follow when the FP policy is transitive. *)SectionTransitiveProperties.(** Assuming that the FP policy is transitive ... *)HypothesisH_transitive : transitive hep_task.(** ... it follows that the higher priority relation is also transitive. *)
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task y, x, z: Task hepxy: hep_task x y Nhepyx: ~~ hep_task y x hepyz: hep_task y z Nhepyz: ~~ hep_task z y
hep_task x z
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task y, x, z: Task hepxy: hep_task x y Nhepyx: ~~ hep_task y x hepyz: hep_task y z Nhepyz: ~~ hep_task z y
~~ hep_task z x
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task y, x, z: Task hepxy: hep_task x y Nhepyx: ~~ hep_task y x hepyz: hep_task y z Nhepyz: ~~ hep_task z y
hep_task x z
exact: H_transitive hepyz.
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task y, x, z: Task hepxy: hep_task x y Nhepyx: ~~ hep_task y x hepyz: hep_task y z Nhepyz: ~~ hep_task z y
~~ hep_task z x
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task y, x, z: Task hepxy: hep_task x y Nhepyx: ~~ hep_task y x hepyz: hep_task y z Nhepyz: ~~ hep_task z y
~~ hep_task z x
byapply: contraNN Nhepyx; exact: H_transitive.}Qed.(** If task [tsk1] has higher priority than task [tsk2], and task [tsk2] has higher-or-equal priority than task [tsk3], then task [tsk1] has higher priority than task [tsk3]. *)
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task x, y, z: Task hepxy: hep_task x y Nhepyx: ~~ hep_task y x hepyz: hep_task y z
hep_task x z
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task x, y, z: Task hepxy: hep_task x y Nhepyx: ~~ hep_task y x hepyz: hep_task y z
~~ hep_task z x
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task x, y, z: Task hepxy: hep_task x y Nhepyx: ~~ hep_task y x hepyz: hep_task y z
hep_task x z
exact: H_transitive hepyz.
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task x, y, z: Task hepxy: hep_task x y Nhepyx: ~~ hep_task y x hepyz: hep_task y z
~~ hep_task z x
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task x, y, z: Task hepxy: hep_task x y Nhepyx: ~~ hep_task y x hepyz: hep_task y z
~~ hep_task z x
byapply: contraNN Nhepyx; exact: H_transitive.}Qed.(** If task [tsk1] has higher-or-equal priority than task [tsk2], and task [tsk2] has strictly higher priority than task [tsk3], then task [tsk1] has higher priority than task [tsk3]. *)
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task x, y, z: Task hepxy: hep_task x y hepyz: hep_task y z Nhepzy: ~~ hep_task z y
hep_task x z
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task x, y, z: Task hepxy: hep_task x y hepyz: hep_task y z Nhepzy: ~~ hep_task z y
~~ hep_task z x
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task x, y, z: Task hepxy: hep_task x y hepyz: hep_task y z Nhepzy: ~~ hep_task z y
hep_task x z
exact: H_transitive hepyz.
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task x, y, z: Task hepxy: hep_task x y hepyz: hep_task y z Nhepzy: ~~ hep_task z y
~~ hep_task z x
Task: TaskType FP_policy: definitions.FP_policy Task H_transitive: transitive (T:=Task) hep_task x, y, z: Task hepxy: hep_task x y hepyz: hep_task y z Nhepzy: ~~ hep_task z y
~~ hep_task z x
apply: contraNN Nhepzy => hepzy; exact: H_transitive hepxy.}Qed.EndTransitiveProperties.(** Finally, we establish a useful property about the higher priority relation, which follows when the FP policy is total. *)SectionTotalProperties.(** We assume that the FP policy is total. *)HypothesisH_total : total hep_task.(** If a task [tsk1] does not have higher-or-equal priority than task [tsk2], then task [tsk2] has higher priority than task [tsk1]. *)
Task: TaskType FP_policy: definitions.FP_policy Task H_total: total (T:=Task) hep_task
bymove=> x y; rewrite -not_hep_hp_task negbK.Qed.(** If a task [tsk1] does not have higher priority than a task [tsk2], then [tsk1] either has lesser priority than [tsk2] or the two have equal priority. *)
Task: TaskType FP_policy: definitions.FP_policy Task H_total: total (T:=Task) hep_task
byrewrite hep_hp_ep_task ep_task_sym.Qed.EndTotalProperties.EndFPRelationsProperties.(** In the following section, we show that FP policies respect the sequential tasks hypothesis. It means that later-arrived jobs of a task don't have higher priority than earlier-arrived jobs of the same task (assuming that task priorities are reflexive).*)SectionFPRemarks.(** Consider any type of tasks ... *)Context {Task : TaskType}.Context `{TaskCost Task}.(** ... and any type of jobs associated with these tasks, ... *)Context {Job : JobType}.Context `{JobTask Job Task}.(** .. and assume that jobs have a cost and an arrival time. *)Context `{JobArrival Job}.Context `{JobCost Job}.(** Consider any FP policy. *)Context {FP : FP_policy Task}.
byrewrite /hep_job /FP_to_JLFP EQ.Qed.EndFPRemarks.SectionJLFPFP.(** Consider any type of tasks ... *)Context {Task : TaskType}.(** ... and any type of jobs associated with these tasks. *)Context {Job : JobType}.Context `{JobTask Job Task}.(** Consider any pair of JLFP and FP policies that are compatible. *)Context (JLFP : JLFP_policy Job) (FP : FP_policy Task).HypothesisH_compatible : JLFP_FP_compatible JLFP FP.(** We restate [JLFP_FP_compatible] to make it easier to discover with [Search]. Here is the first part... *)
exact: H_compatible.2.Qed.EndJLFPFP.(** We add a lemma into the "Hint Database" basic_rt_facts, so Coq will be able to apply it automatically. *)GlobalHint Resolve respects_sequential_tasks : basic_rt_facts.