Library prosa.model.task.arrival.periodic
Require Export prosa.model.task.arrival.sporadic.
Require Export prosa.model.task.arrival.task_max_inter_arrival.
Require Export prosa.model.task.offset.
Require Export prosa.analysis.facts.job_index.
Require Export prosa.model.task.arrival.task_max_inter_arrival.
Require Export prosa.model.task.offset.
Require Export prosa.analysis.facts.job_index.
The Periodic Task Model
Task Model Parameter for Periods
Consider any type of periodic tasks. 
A valid periodic task has a non-zero period. 
Next, consider any type of jobs stemming from these tasks ... 
... and an arbitrary arrival sequence of such jobs. 
We say that a task respects the periodic task model if every job j 
      (except the first one) has a predecessor j' that arrives exactly one 
      task period before it. 
  Definition respects_periodic_task_model (tsk : Task) := 
∀ j,
arrives_in arr_seq j →
job_index arr_seq j > 0 →
job_task j = tsk →
∃ j',
arrives_in arr_seq j' ∧
job_index arr_seq j' = job_index arr_seq j - 1 ∧
job_task j' = tsk ∧
job_arrival j = job_arrival j' + task_period tsk.
∀ j,
arrives_in arr_seq j →
job_index arr_seq j > 0 →
job_task j = tsk →
∃ j',
arrives_in arr_seq j' ∧
job_index arr_seq j' = job_index arr_seq j - 1 ∧
job_task j' = tsk ∧
job_arrival j = job_arrival j' + task_period tsk.
Further, in the context of a set of periodic tasks, ... 
... every task in the set must have a valid period ... 
... and all jobs of every task in a set of periodic tasks must 
      respect the period constraint on arrival times. 
  Definition taskset_respects_periodic_task_model :=
∀ tsk, tsk \in ts → respects_periodic_task_model tsk.
End ValidPeriodicTaskModel.
∀ tsk, tsk \in ts → respects_periodic_task_model tsk.
End ValidPeriodicTaskModel.