Library prosa.analysis.definitions.schedulability
Require Export prosa.analysis.facts.behavior.completion.
Require Import prosa.model.task.absolute_deadline.
Require Import prosa.model.task.absolute_deadline.
Consider any type of tasks, ... 
... any type of jobs associated with these tasks, ... 
  Context {Job: JobType}.
Context `{JobArrival Job}.
Context `{JobCost Job}.
Context `{JobDeadline Job}.
Context `{JobTask Job Task}.
Context `{JobArrival Job}.
Context `{JobCost Job}.
Context `{JobDeadline Job}.
Context `{JobTask Job Task}.
... and any kind of processor state. 
Consider any job arrival sequence... 
...and any schedule of these jobs. 
Let tsk be any task that is to be analyzed. 
Then, we say that R is a response-time bound of tsk in this schedule ... 
  Definition task_response_time_bound :=
∀ j,
arrives_in arr_seq j →
job_of_task tsk j →
job_response_time_bound sched j R.
∀ j,
arrives_in arr_seq j →
job_of_task tsk j →
job_response_time_bound sched j R.
We say that a task is schedulable if all its jobs meet their deadline 
  Definition schedulable_task :=
∀ j,
arrives_in arr_seq j →
job_of_task tsk j →
job_meets_deadline sched j.
End Task.
∀ j,
arrives_in arr_seq j →
job_of_task tsk j →
job_meets_deadline sched j.
End Task.
In this section we infer schedulability from a response-time bound
    of a task. 
Consider any type of tasks, ... 
... any type of jobs associated with these tasks, ... 
  Context {Job: JobType}.
Context `{JobArrival Job}.
Context `{JobCost Job}.
Context `{JobTask Job Task}.
Context `{JobArrival Job}.
Context `{JobCost Job}.
Context `{JobTask Job Task}.
... and any kind of processor state. 
Consider any job arrival sequence... 
...and any schedule of these jobs. 
Assume that jobs don't execute after completion. 
Let tsk be any task that is to be analyzed. 
Given  a response-time bound of tsk in this schedule no larger than its deadline, ... 
  Variable R: duration.
Hypothesis H_R_le_deadline: R ≤ task_deadline tsk.
Hypothesis H_response_time_bounded: task_response_time_bound arr_seq sched tsk R.
Hypothesis H_R_le_deadline: R ≤ task_deadline tsk.
Hypothesis H_response_time_bounded: task_response_time_bound arr_seq sched tsk R.
...then tsk is schedulable. 
  Lemma schedulability_from_response_time_bound:
schedulable_task arr_seq sched tsk.
End Schedulability.
schedulable_task arr_seq sched tsk.
End Schedulability.
We further define two notions of "all deadlines met" that do not
    depend on a task abstraction: one w.r.t. all scheduled jobs in a
    given schedule and one w.r.t. all jobs that arrive in a given
    arrival sequence. 
Consider any given type of jobs... 
  Context {Job : JobType}.
Context `{JobArrival Job}.
Context `{JobCost Job}.
Context `{JobDeadline Job}.
Context `{JobArrival Job}.
Context `{JobCost Job}.
Context `{JobDeadline Job}.
... any given type of processor states. 
We say that all deadlines are met if every job scheduled at some
     point in the schedule meets its deadline. Note that this is a
     relatively weak definition since an "empty" schedule that is idle
     at all times trivially satisfies it (since the definition does
     not require any kind of work conservation). 
  Definition all_deadlines_met (sched: schedule PState) :=
∀ j t,
scheduled_at sched j t →
job_meets_deadline sched j.
∀ j t,
scheduled_at sched j t →
job_meets_deadline sched j.
To augment the preceding definition, we also define an alternate
     notion of "all deadlines met" based on all jobs included in a
     given arrival sequence.  
Given an arbitrary job arrival sequence ... 
... we say that all arrivals meet their deadline if every job
       that arrives at some point in time meets its deadline. Note
       that this definition does not preclude the existence of jobs in
       a schedule that miss their deadline (e.g., if they stem from
       another arrival sequence). 
    Definition all_deadlines_of_arrivals_met (sched: schedule PState) :=
∀ j,
arrives_in arr_seq j →
job_meets_deadline sched j.
End DeadlinesOfArrivals.
∀ j,
arrives_in arr_seq j →
job_meets_deadline sched j.
End DeadlinesOfArrivals.
We observe that the latter definition, assuming a schedule in
      which all jobs come from the arrival sequence, implies the
      former definition.