Library prosa.classic.model.arrival.curves.bounds
Require Import prosa.classic.util.all.
Require Import prosa.classic.model.arrival.basic.arrival_sequence
prosa.classic.model.arrival.basic.task_arrival.
From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq div.
Module ArrivalCurves.
Import ArrivalSequence TaskArrival.
Section DefiningArrivalCurves.
Context {Task: eqType}.
Context {Job: eqType}.
Variable job_task: Job → Task.
Variable arr_seq: arrival_sequence Job.
Let arrivals_of_tsk tsk := arrivals_of_task_between job_task arr_seq tsk.
Let num_arrivals_of_tsk tsk := num_arrivals_of_task job_task arr_seq tsk.
Section ArrivalBound.
Variable max_arrivals: Task → time → nat.
Definition is_arrival_bound (tsk: Task) :=
∀ (t1 t2: time),
t1 ≤ t2 →
num_arrivals_of_tsk tsk t1 t2 ≤ max_arrivals tsk (t2 - t1).
Definition is_arrival_bound_for_taskset (ts: seq Task) :=
∀ (tsk: Task), tsk \in ts → is_arrival_bound tsk.
Definition zero_arrival_curve (tsk: Task) :=
max_arrivals tsk 0 = 0.
Definition monotonic_arrival_curve (tsk: Task) :=
monotone (max_arrivals tsk) leq.
Definition proper_arrival_curve (tsk: Task) :=
is_arrival_bound tsk ∧
zero_arrival_curve tsk ∧
monotonic_arrival_curve tsk.
Definition family_of_proper_arrival_curves (ts: seq Task) :=
∀ (tsk: Task), tsk \in ts → proper_arrival_curve tsk.
End ArrivalBound.
Section SeparationBound.
Variable min_length: Task → nat → time.
Definition is_separation_bound tsk :=
∀ t1 t2,
t1 ≤ t2 →
min_length tsk (num_arrivals_of_tsk tsk t1 t2) ≤ t2 - t1.
End SeparationBound.
End DefiningArrivalCurves.
End ArrivalCurves.
Require Import prosa.classic.model.arrival.basic.arrival_sequence
prosa.classic.model.arrival.basic.task_arrival.
From mathcomp Require Import ssreflect ssrbool eqtype ssrnat seq div.
Module ArrivalCurves.
Import ArrivalSequence TaskArrival.
Section DefiningArrivalCurves.
Context {Task: eqType}.
Context {Job: eqType}.
Variable job_task: Job → Task.
Variable arr_seq: arrival_sequence Job.
Let arrivals_of_tsk tsk := arrivals_of_task_between job_task arr_seq tsk.
Let num_arrivals_of_tsk tsk := num_arrivals_of_task job_task arr_seq tsk.
Section ArrivalBound.
Variable max_arrivals: Task → time → nat.
Definition is_arrival_bound (tsk: Task) :=
∀ (t1 t2: time),
t1 ≤ t2 →
num_arrivals_of_tsk tsk t1 t2 ≤ max_arrivals tsk (t2 - t1).
Definition is_arrival_bound_for_taskset (ts: seq Task) :=
∀ (tsk: Task), tsk \in ts → is_arrival_bound tsk.
Definition zero_arrival_curve (tsk: Task) :=
max_arrivals tsk 0 = 0.
Definition monotonic_arrival_curve (tsk: Task) :=
monotone (max_arrivals tsk) leq.
Definition proper_arrival_curve (tsk: Task) :=
is_arrival_bound tsk ∧
zero_arrival_curve tsk ∧
monotonic_arrival_curve tsk.
Definition family_of_proper_arrival_curves (ts: seq Task) :=
∀ (tsk: Task), tsk \in ts → proper_arrival_curve tsk.
End ArrivalBound.
Section SeparationBound.
Variable min_length: Task → nat → time.
Definition is_separation_bound tsk :=
∀ t1 t2,
t1 ≤ t2 →
min_length tsk (num_arrivals_of_tsk tsk t1 t2) ≤ t2 - t1.
End SeparationBound.
End DefiningArrivalCurves.
End ArrivalCurves.