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]
(** * Deadlines *)(** In this file, we observe basic properties of the behavioral job model w.r.t. deadlines. *)SectionDeadlineFacts.(** Consider any given type of jobs with costs and deadlines... *)Context {Job : JobType} `{JobCost Job} `{JobDeadline Job}.(** ... any given type of processor states. *)Context {PState: ProcessorState Job}.(** First, we derive two properties from the fact that a job is incomplete at some point in time. *)SectionIncompletion.(** Consider any given schedule. *)Variablesched: schedule PState.(** Trivially, a job that both meets its deadline and is incomplete at a time [t] must have a deadline later than [t]. *)
exact: incompletion_monotonic INCOMP.Qed.(** Furthermore, a job that both meets its deadline and is incomplete at a time [t] must be scheduled at some point between [t] and its deadline. *)
service sched j t < service sched j (job_deadline j)
byapply: leq_trans MET; rewrite less_service_than_cost_is_incomplete.Qed.EndIncompletion.(** Next, we look at schedules / processor models in which scheduled jobs always receive service. *)SectionIdealProgressSchedules.(** Consider a given reference schedule... *)Variablesched: schedule PState.(** ...in which complete jobs don't execute... *)HypothesisH_completed_jobs: completed_jobs_dont_execute sched.(** ...and scheduled jobs always receive service. *)HypothesisH_scheduled_implies_serviced: ideal_progress_proc_model PState.(** We observe that if a job meets its deadline and is scheduled at time [t], then then its deadline is at a time later than t. *)
exact: scheduled_implies_not_completed.Qed.EndIdealProgressSchedules.(** In the following section, we observe that it is sufficient to establish that service is invariant across two schedules at a job's deadline to establish that it either meets its deadline in both schedules or none. *)SectionEqualProgress.(** Consider any two schedules [sched] and [sched']. *)Variableschedsched': schedule PState.(** We observe that, if the service is invariant at the time of a job's absolute deadline, and if the job meets its deadline in one of the schedules, then it meets its deadline also in the other schedule. *)