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.facts.periodic.task_arrivals_size.Require Export prosa.model.task.concept.Require Export prosa.analysis.facts.hyperperiod.(** In this file we define a new function for job costs in an observation interval and prove its validity. *)SectionValidJobCostsShifted.(** Consider any type of periodic tasks ... *)Context {Task : TaskType}.Context `{TaskOffset Task}.Context `{PeriodicModel Task}.Context `{TaskCost Task}.(** ... and any type of jobs. *)Context {Job : JobType}.Context `{JobTask Job Task}.Context `{JobArrival Job}.Context `{JobCost Job}.Context `{JobDeadline Job}.(** Consider a consistent arrival sequence with non-duplicate arrivals. *)Variablearr_seq : arrival_sequence Job.HypothesisH_valid_arrival_sequence : valid_arrival_sequence arr_seq.(** Furthermore, assume that arrivals have valid job costs. *)HypothesisH_arrivals_have_valid_job_costs: arrivals_have_valid_job_costs arr_seq.(** Consider a periodic task set [ts] such that all tasks in [ts] have valid periods and offsets. *)Variablets : TaskSet Task.HypothesisH_periodic_taskset: taskset_respects_periodic_task_model arr_seq ts.HypothesisH_valid_periods_in_taskset: valid_periods ts.HypothesisH_valid_offsets_in_taskset: valid_offsets arr_seq ts.(** Consider a job [j] that stems from the arrival sequence. *)Variablej : Job.HypothesisH_j_from_arrival_sequence: arrives_in arr_seq j.(** Let [O_max] denote the maximum task offset of all tasks in [ts] ... *)LetO_max := max_task_offset ts.(** ... and let [HP] denote the hyperperiod of all tasks in [ts]. *)LetHP := hyperperiod ts.(** We now define a new function for job costs in the observation interval. *)(** Given that job [j] arrives after [O_max], the cost of a job [j'] that arrives in the interval <<[O_max + HP, O_max + 2HP)>> is defined to be the same as the job cost of its corresponding job in [j]'s hyperperiod. *)Definitionjob_costs_shifted (j' : Job) :=
if (job_arrival j >= O_max) && (O_max + HP <= job_arrival j' < O_max + 2 * HP) then
job_cost (corresponding_job_in_hyperperiod ts arr_seq j' (starting_instant_of_corresponding_hyperperiod ts j) (job_task j'))
else job_cost j'.(** Assume that we have an infinite sequence of jobs. *)HypothesisH_infinite_jobs: infinite_jobs arr_seq.(** Assume all jobs in the arrival sequence [arr_seq] belong to some task in [ts]. *)HypothesisH_jobs_from_taskset: all_jobs_from_taskset arr_seq ts.(** We assign the job costs as defined by the [job_costs_shifted] function. *)Instancejob_costs_in_oi : JobCost Job :=
job_costs_shifted.(** We show that the [job_costs_shifted] function is valid. *)