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.behavior.all.Require Export prosa.model.task.arrivals.Require Export prosa.util.all.Require Export prosa.analysis.facts.behavior.all.(** * Task Offset *)(** We define a task-model parameter [task_offset] that maps each task to its corresponding offset, that is the instant when its first job arrives. *)ClassTaskOffset (Task : TaskType) := task_offset : Task -> instant.(** In the following section, we define two important properties that an offset of any task should satisfy. *)SectionValidTaskOffset.(** Consider any type of tasks with offsets, ... *)Context {Task : TaskType}.Context `{TaskOffset Task}.(** ... any type of jobs associated with these tasks, ... *)Context {Job : JobType}.Context `{JobTask Job Task}.Context `{JobArrival Job}.(** ... and any arrival sequence. *)Variablearr_seq : arrival_sequence Job.(** No jobs of a task [tsk] arrive before [task_offset tsk]. *)Definitionno_jobs_before_offset (tsk : Task) :=
forallj,
job_task j = tsk ->
job_arrival j >= task_offset tsk.(** Furthermore for a task [tsk], there exists a job that arrives exactly at the offset. *)Definitionjob_released_at_offset (tsk : Task) :=
existsj',
arrives_in arr_seq j' /\
job_task j' = tsk /\
job_arrival j' = task_offset tsk.(** An offset is valid iff it satisfies both of the above conditions. *)Definitionvalid_offset (tsk : Task) := no_jobs_before_offset tsk /\ job_released_at_offset tsk.(** In the context of a set of tasks [ts], ... *)Variablets : TaskSet Task.(** ... all tasks in the set must have valid offsets. *)Definitionvalid_offsets := foralltsk, tsk \in ts -> valid_offset tsk.EndValidTaskOffset.(** In this section we define the notion of a maximum task offset. *)SectionMaxTaskOffset.(** Consider any type of tasks with offsets, ... *)Context {Task : TaskType}.Context `{TaskOffset Task}.(** ... and any task set. *)Variablets : TaskSet Task.(** We define the sequence of task offsets of all tasks in [ts], ... *)Definitiontask_offsets := map task_offset ts.(** ... and the maximum among all the task offsets. *)Definitionmax_task_offset := max0 task_offsets.EndMaxTaskOffset.