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]
(** ** Automatic FP ➔ JLFP ➔ JLDP Conversion *)(** Since there are natural interpretations of FP and JLFP policies as JLFP and JLDP policies, respectively, we define conversions that express these generalizations. In practice, this means that Coq will be able to automatically satisfy a JLDP assumption if a JLFP or FP policy is in scope. *)(** First, any FP policy can be interpreted as an JLFP policy by comparing jobs according to the priorities of their respective tasks. The priority is lowered to 10 in order to avoid conflict with other instances of JLFP policies which take FP policies as argument.*)#[global]
InstanceFP_to_JLFP {Job : JobType} {Task : TaskType} {tasks : JobTask Job Task}
(FP : FP_policy Task) : JLFP_policy Job | 10 :=
funj1j2 => hep_task (job_task j1) (job_task j2).(** Second, any JLFP policy implies a JLDP policy that simply ignores the time parameter. Analogously, priority is lowered to 10 in order to avoid conflict with other instances of JLDP policies which take JLFP policies as argument.*)#[global]
InstanceJLFP_to_JLDP {Job : JobType}
(JLFP : JLFP_policy Job) : JLDP_policy Job | 10 :=
fun_j1j2 => hep_job j1 j2.(** We add coercions to enable automatic conversion from [JLFP] to [JLDP]... *)CoercionJLFP_to_JLDP : JLFP_policy >-> JLDP_policy.(** ...and from [FP] to [JLFP]. *)#[warning="-uniform-inheritance"]
CoercionFP_to_JLFP : FP_policy >-> JLFP_policy.(** We now prove lemmas about conversions between the properties of these priority classes. *)SectionPriorityRelationsConversion.(** Consider any type of tasks ... *)Context {Task : TaskType}.(** ... and any type of jobs associated with these tasks. *)Context {Job : JobType}.Context `{JobTask Job Task}.(** To simplify later proofs, we make two trivial remarks on the FP->JLFP->JLDP coercion. *)(** First, when considering a JLFP policy, [hep_job_at] and [hep_job] are by definition equivalent. *)
bymove=> ? j j' t; rewrite /hep_job_at/JLFP_to_JLDP.Qed.(** Second, when considering an FP policy, [hep_job_at] and [hep_task] are by definition equivalent. *)
bymove=> ? j j' t; rewrite hep_job_at_jlfp/hep_job/FP_to_JLFP.Qed.(** We observe that lifting an [FP_policy] to a [JLFP_policy] trivially maintains reflexivity,... *)
bymove=> ? tran_fp ? ?; apply: tran_fp.Qed.EndPriorityRelationsConversion.(** We add the above lemmas into the "Hint Database" basic_rt_facts, so Coq will be able to apply them automatically. *)GlobalHint Resolve
reflexive_priorities_FP_implies_JLFP
reflexive_priorities_JLFP_implies_JLDP
transitive_priorities_FP_implies_JLFP
transitive_priorities_JLFP_implies_JLDP
total_priorities_FP_implies_JLFP
total_priorities_JLFP_implies_JLDP
: basic_rt_facts.