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.model.task.preemption.parameters.Require Export prosa.analysis.definitions.sbf.busy.Require Export prosa.analysis.abstract.restricted_supply.search_space.fifo.(** * Concrete to Abstract Fixpoint Reduction *)(** In this file, we show that a solution to a concrete fixpoint equation under the FIFO policy implies a solution to the abstract fixpoint equation required by aRSA. *)SectionConcreteToAbstractFixpointReduction.(** Consider any type of tasks, each characterized by a WCET [task_cost], an arrival curve [max_arrivals], a run-to-completion threshold [task_rtct], and a bound on the task's maximum non-preemptive segment [task_max_nonpreemptive_segment] ... *)Context {Task : TaskType}.Context `{TaskCost Task}.Context `{MaxArrivals Task}.Context `{TaskRunToCompletionThreshold Task}.Context `{TaskMaxNonpreemptiveSegment Task}.(** ... and any type of jobs associated with these tasks, where each job has a task [job_task], a cost [job_cost], an arrival time [job_arrival], and a predicate indicating when the job is preemptable [job_preemptable]. *)Context {Job : JobType}.Context `{JobTask Job Task}.Context `{JobCost Job}.Context `{JobArrival Job}.Context `{JobPreemptable Job}.(** Consider any processor model ... *)Context `{PState : ProcessorState Job}.(** ... where the minimum amount of supply is defined via a monotone unit-supply-bound function [SBF]. *)Context {SBF : SupplyBoundFunction}.HypothesisH_SBF_monotone : sbf_is_monotone SBF.HypothesisH_unit_SBF : unit_supply_bound_function SBF.(** We consider an arbitrary task set [ts]. *)Variablets : seq Task.(** Let [tsk] be any task in [ts] that is to be analyzed. *)Variabletsk : Task.HypothesisH_tsk_in_ts : tsk \in ts.(** Consider any arrival sequence ... *)Variablearr_seq : arrival_sequence Job.(** ... and assume that [max_arrivals] defines a valid arrival curve for each task. *)HypothesisH_valid_arrival_curve : valid_taskset_arrival_curve ts max_arrivals.(** Consider any schedule. *)Variablesched : schedule PState.(** Next, we assume that [SBF] properly characterizes all busy intervals (w.r.t. task [tsk]) in [sched]. That is, (1) [SBF 0 = 0] and (2) for any duration [Δ], at least [SBF Δ] supply is available in any busy-interval prefix of length [Δ]. *)HypothesisH_valid_SBF : valid_busy_sbf arr_seq sched tsk SBF.(** We assume that [tsk] is described by a valid task run-to-completion threshold_ *)HypothesisH_valid_run_to_completion_threshold :
valid_task_run_to_completion_threshold arr_seq tsk.(** Let [L] be an arbitrary positive constant. Typically, [L] denotes an upper bound on the length of a busy interval of a job of [tsk]. In this file, however, [L] can be any positive constant. *)VariableL : duration.HypothesisH_L_positive : 0 < L.(** To rule out pathological cases with the search space, we assume that the task cost is positive and the arrival curve is non-pathological. *)HypothesisH_task_cost_pos : 0 < task_cost tsk.HypothesisH_arrival_curve_pos : 0 < max_arrivals tsk ε.(** For brevity, we define the intra-supply interference bound function ([intra_IBF]). Note that in the case of FIFO, intra-supply IBF does not depend on the second argument. *)Local Definitionintra_IBF (A_Δ : duration) :=
total_request_bound_function ts (A + ε) - task_cost tsk.(** Ultimately, we seek to apply aRSA to prove the correctness of the following [R]. *)VariableR : duration.HypothesisH_R_is_maximum :
forall (A : duration),
is_in_search_space ts L A ->
exists (F : duration),
A <= F <= A + R
/\ total_request_bound_function ts (A + ε) <= SBF F.(** However, in order to connect the definition of [R] with aRSA, we must first restate the bound in the shape of the abstract response-time bound equation that aRSA expects, which we do next. *)(** We know that: - if [A] is in the abstract search space, then it is also in the concrete search space; and - if [A] is in the concrete search space, then there exists a solution that satisfies the inequalities stated in [H_R_is_maximum]. Using these facts, we prove that, if [A] is in the abstract search space, then there also exists a solution [F] to the response-time equation as expected by aRSA. *)
forallA : duration,
search_space.is_in_search_space L (fifo.IBF ts tsk) A ->
existsF : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <= SBF F /\
SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
forallA : duration,
search_space.is_in_search_space L (fifo.IBF ts tsk) A ->
existsF : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <= SBF F /\
SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
total_request_bound_function ts
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A MAX: is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
total_request_bound_function ts (A + 1) <=
SBF F
existsF : duration,
F <= A + R /\
task_rtct tsk + intra_IBF A F <= SBF F /\
SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
total_request_bound_function ts
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A MAX: is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
total_request_bound_function ts (A + 1) <=
SBF F
existsF : duration,
F <= A + R /\
task_rtct tsk +
(total_request_bound_function ts (A + 1) -
task_cost tsk) <= SBF F /\
SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
total_request_bound_function ts
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A MAX: existsF : duration,
A <= F <= A + R /\
total_request_bound_function ts (A + 1) <=
SBF F
existsF : duration,
F <= A + R /\
task_rtct tsk +
(total_request_bound_function ts (A + 1) -
task_cost tsk) <= SBF F /\
SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
total_request_bound_function ts
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: total_request_bound_function ts (A + 1) <=
SBF F'
existsF : duration,
F <= A + R /\
task_rtct tsk +
(total_request_bound_function ts (A + 1) -
task_cost tsk) <= SBF F /\
SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
total_request_bound_function ts
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: total_request_bound_function ts (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R)
existsF : duration,
F <= A + R /\
task_rtct tsk +
(total_request_bound_function ts (A + 1) -
task_cost tsk) <= SBF F /\
SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
total_request_bound_function ts
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: total_request_bound_function ts (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
total_request_bound_function ts (A + 1)
existsF : duration,
F <= A + R /\
task_rtct tsk +
(total_request_bound_function ts (A + 1) -
task_cost tsk) <= SBF F /\
SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
total_request_bound_function ts
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: total_request_bound_function ts (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
total_request_bound_function ts (A + 1) Leq3: task_rtct tsk <= task_cost tsk
existsF : duration,
F <= A + R /\
task_rtct tsk +
(total_request_bound_function ts (A + 1) -
task_cost tsk) <= SBF F /\
SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
\sum_(tsk <- ts)
task_request_bound_function tsk
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: \sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) Leq3: task_rtct tsk <= task_cost tsk
existsF : duration,
F <= A + R /\
task_rtct tsk +
(\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) -
task_cost tsk) <= SBF F /\
SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
\sum_(tsk <- ts)
task_request_bound_function tsk
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: \sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) Leq3: task_rtct tsk <= task_cost tsk
existsF'' : nat,
0 <= F'' <= A + R /\
SBF F'' =
SBF (A + R) - (task_cost tsk - task_rtct tsk)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
\sum_(tsk <- ts)
task_request_bound_function tsk
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: \sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) Leq3: task_rtct tsk <= task_cost tsk F'': nat LE: 0 <= F'' <= A + R EX: SBF F'' =
SBF (A + R) - (task_cost tsk - task_rtct tsk)
existsF : duration,
F <= A + R /\
task_rtct tsk +
(\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) -
task_cost tsk) <=
SBF F /\
SBF F + (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
\sum_(tsk <- ts)
task_request_bound_function tsk
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: \sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) Leq3: task_rtct tsk <= task_cost tsk
existsF'' : nat,
0 <= F'' <= A + R /\
SBF F'' =
SBF (A + R) - (task_cost tsk - task_rtct tsk)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
\sum_(tsk <- ts)
task_request_bound_function tsk
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: \sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) Leq3: task_rtct tsk <= task_cost tsk
unit_growth_function SBF
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
\sum_(tsk <- ts)
task_request_bound_function tsk
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: \sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) Leq3: task_rtct tsk <= task_cost tsk
0 <= A + R
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
\sum_(tsk <- ts)
task_request_bound_function tsk
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: \sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) Leq3: task_rtct tsk <= task_cost tsk
SBF 0 <=
SBF (A + R) - (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
\sum_(tsk <- ts)
task_request_bound_function tsk
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: \sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) Leq3: task_rtct tsk <= task_cost tsk
unit_growth_function SBF
bymove=> t; rewrite !addn1; apply H_unit_SBF.
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
\sum_(tsk <- ts)
task_request_bound_function tsk
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: \sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) Leq3: task_rtct tsk <= task_cost tsk
0 <= A + R
lia.
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
\sum_(tsk <- ts)
task_request_bound_function tsk
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: \sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) Leq3: task_rtct tsk <= task_cost tsk
SBF 0 <=
SBF (A + R) - (task_cost tsk - task_rtct tsk) <=
SBF (A + R)
Task: TaskType H: TaskCost Task H0: MaxArrivals Task H1: TaskRunToCompletionThreshold Task H2: TaskMaxNonpreemptiveSegment Task Job: JobType H3: JobTask Job Task H4: JobCost Job H5: JobArrival Job H6: JobPreemptable Job PState: ProcessorState Job SBF: SupplyBoundFunction H_SBF_monotone: sbf_is_monotone SBF H_unit_SBF: unit_supply_bound_function SBF ts: seq Task tsk: Task H_tsk_in_ts: tsk \in ts arr_seq: arrival_sequence Job H_valid_arrival_curve: valid_taskset_arrival_curve ts
max_arrivals sched: schedule PState H_valid_SBF: valid_busy_sbf arr_seq sched tsk SBF H_valid_run_to_completion_threshold: valid_task_run_to_completion_threshold
arr_seq tsk L: duration H_L_positive: 0 < L H_task_cost_pos: 0 < task_cost tsk H_arrival_curve_pos: 0 < max_arrivals tsk 1 R: duration H_R_is_maximum: forallA : duration,
is_in_search_space ts L A ->
existsF : duration,
A <= F <= A + R /\
\sum_(tsk <- ts)
task_request_bound_function tsk
(A + 1) <=
SBF F A: duration SP: search_space.is_in_search_space L
(fifo.IBF ts tsk) A F': duration FE: A <= F' <= A + R LGL: \sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) <=
SBF F' Leq1: SBF F' <= SBF (A + R) Leq2: task_cost tsk <=
\sum_(tsk <- ts)
task_request_bound_function tsk (A + 1) Leq3: task_rtct tsk <= task_cost tsk