Built with Alectryon, running Coq+SerAPI v8.14.0+0.14.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.
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "_ + _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ - _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ <= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ < _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ >= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ > _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ <= _ <= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ < _ <= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ <= _ < _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ < _ < _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ * _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
(** * Lemmas about Service Received by Sets of Jobs *) (** In this file, we establish basic facts about the service received by _sets_ of jobs. *) (** To begin with, we provide some basic properties of service of a set of jobs in case of a generic scheduling model. *) Section GenericModelLemmas. (** Consider any type of tasks ... *) Context {Task : TaskType}. (** ... and any type of jobs associated with these tasks. *) Context {Job : JobType}. Context `{JobTask Job Task}. Context `{JobArrival Job}. Context `{JobCost Job}. (** Consider any kind of processor state model, ... *) Context {PState : Type}. Context `{ProcessorState Job PState}. (** ... any job arrival sequence with consistent arrivals, .... *) Variable arr_seq : arrival_sequence Job. Hypothesis H_arrival_times_are_consistent : consistent_arrival_times arr_seq. (** ... and any schedule of this arrival sequence ... *) Variable sched : schedule PState. (** ... where jobs do not execute before their arrival or after completion. *) Hypothesis H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute sched. Hypothesis H_completed_jobs_dont_execute : completed_jobs_dont_execute sched. (** Let P be any predicate over jobs. *) Variable P : pred Job. (** We show that the total service of jobs released in a time interval <<[t1,t2)>> during <<[t1,t2)>> is equal to the sum of: (1) the total service of jobs released in time interval <<[t1, t)>> during time <<[t1, t)>> (2) the total service of jobs released in time interval <<[t1, t)>> during time <<[t, t2)>> and (3) the total service of jobs released in time interval <<[t, t2)>> during time <<[t, t2)>>. *)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job

forall t1 t2 t : nat, t1 <= t <= t2 -> service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t2 = service_of_jobs sched P (arrivals_between arr_seq t1 t) t1 t + service_of_jobs sched P (arrivals_between arr_seq t1 t) t t2 + service_of_jobs sched P (arrivals_between arr_seq t t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job

forall t1 t2 t : nat, t1 <= t <= t2 -> service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t2 = service_of_jobs sched P (arrivals_between arr_seq t1 t) t1 t + service_of_jobs sched P (arrivals_between arr_seq t1 t) t t2 + service_of_jobs sched P (arrivals_between arr_seq t t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2

service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t2 = service_of_jobs sched P (arrivals_between arr_seq t1 t) t1 t + service_of_jobs sched P (arrivals_between arr_seq t1 t) t t2 + service_of_jobs sched P (arrivals_between arr_seq t t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2

service_of_jobs sched P (arrivals_between arr_seq t1 t ++ arrivals_between arr_seq t t2) t1 t2 = service_of_jobs sched P (arrivals_between arr_seq t1 t) t1 t + service_of_jobs sched P (arrivals_between arr_seq t1 t) t t2 + service_of_jobs sched P (arrivals_between arr_seq t t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2

\sum_(i <- arrivals_between arr_seq t1 t | P i) service_during sched i t1 t2 + \sum_(i <- arrivals_between arr_seq t t2 | P i) service_during sched i t1 t2 = service_of_jobs sched P (arrivals_between arr_seq t1 t) t1 t + service_of_jobs sched P (arrivals_between arr_seq t1 t) t t2 + service_of_jobs sched P (arrivals_between arr_seq t t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2

\sum_(j <- arrivals_between arr_seq t1 t | P j) \sum_(t1 <= i < t) service_at sched j i + \sum_(j <- arrivals_between arr_seq t1 t | P j) \sum_(t <= i < t2) service_at sched j i + \sum_(i <- arrivals_between arr_seq t t2 | P i) service_during sched i t1 t2 = service_of_jobs sched P (arrivals_between arr_seq t1 t) t1 t + service_of_jobs sched P (arrivals_between arr_seq t1 t) t t2 + service_of_jobs sched P (arrivals_between arr_seq t t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2

\sum_(i <- arrivals_between arr_seq t t2 | P i) service_during sched i t1 t2 == service_of_jobs sched P (arrivals_between arr_seq t t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2

\sum_(t1 <= i < t) \sum_(i0 <- arrivals_between arr_seq t t2 | P i0) service_at sched i0 i + \sum_(j <- arrivals_between arr_seq t t2 | P j) \sum_(t <= i < t2) service_at sched j i == service_of_jobs sched P (arrivals_between arr_seq t t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2

\sum_(t1 <= i < t) \sum_(i0 <- arrivals_between arr_seq t t2 | P i0) service_at sched i0 i == 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2

forall i : nat, (t1 <= i < t) && true -> \sum_(i0 <- arrivals_between arr_seq t t2 | P i0) service_at sched i0 i = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2
x: nat
GEi: t1 <= x
LTi: x < t

\sum_(i <- arrivals_between arr_seq t t2 | P i) service_at sched i x = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2
x: nat
GEi: t1 <= x
LTi: x < t

forall i : Job, (i \in arrivals_between arr_seq t t2) && P i -> service_at sched i x = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2
x: nat
GEi: t1 <= x
LTi: x < t
j: Job
ARR: j \in arrivals_between arr_seq t t2
Ps: P j

service_at sched j x = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2
x: nat
GEi: t1 <= x
LTi: x < t
j: Job
ARR: j \in arrivals_between arr_seq t t2
Ps: P j

x < job_arrival j
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2
x: nat
GEi: t1 <= x
LTi: x < t
j: Job
ARR: arrived_between j t t2
Ps: P j

x < job_arrival j
by move: ARR => /andP [N1 N2]; apply leq_trans with t. Qed. (** We show that the total service of jobs released in a time interval <<[t1, t2)>> during <<[t, t2)>> is equal to the sum of: (1) the total service of jobs released in a time interval <<[t1, t)>> during <<[t, t2)>> and (2) the total service of jobs released in a time interval <<[t, t2)>> during <<[t, t2)>>. *)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job

forall t1 t2 t : nat, t1 <= t <= t2 -> service_of_jobs sched P (arrivals_between arr_seq t1 t2) t t2 = service_of_jobs sched P (arrivals_between arr_seq t1 t) t t2 + service_of_jobs sched P (arrivals_between arr_seq t t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job

forall t1 t2 t : nat, t1 <= t <= t2 -> service_of_jobs sched P (arrivals_between arr_seq t1 t2) t t2 = service_of_jobs sched P (arrivals_between arr_seq t1 t) t t2 + service_of_jobs sched P (arrivals_between arr_seq t t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2

service_of_jobs sched P (arrivals_between arr_seq t1 t2) t t2 = service_of_jobs sched P (arrivals_between arr_seq t1 t) t t2 + service_of_jobs sched P (arrivals_between arr_seq t t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2

service_of_jobs sched P (arrivals_between arr_seq t1 t) t t2 + service_of_jobs sched P (arrivals_between arr_seq t t2) t t2 = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t t2
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2, t: nat
GEt: t1 <= t
LEt: t <= t2

service_of_jobs sched P (arrivals_between arr_seq t1 t) t t2 + service_of_jobs sched P (arrivals_between arr_seq t t2) t t2 = service_of_jobs sched P (arrivals_between arr_seq t1 t ++ arrivals_between arr_seq t t2) t t2
by rewrite {3}/service_of_jobs -big_cat //=. Qed. End GenericModelLemmas. (** In this section, we prove some properties about service of sets of jobs for unit-service processor models. *) Section UnitServiceModelLemmas. (** Consider any type of tasks ... *) Context {Task : TaskType}. (** ... and any type of jobs associated with these tasks. *) Context {Job : JobType}. Context `{JobTask Job Task}. Context `{JobArrival Job}. Context `{JobCost Job}. (** Consider any kind of unit-service processor state model. *) Context {PState : Type}. Context `{ProcessorState Job PState}. Hypothesis H_unit_service_proc_model : unit_service_proc_model PState. (** Consider any arrival sequence with consistent arrivals. *) Variable arr_seq : arrival_sequence Job. Hypothesis H_arrival_times_are_consistent : consistent_arrival_times arr_seq. (** Next, consider any unit-service schedule of this arrival sequence ... *) Variable sched : schedule PState. Hypothesis H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq. (** ... where jobs do not execute before their arrival or after completion. *) Hypothesis H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute sched. Hypothesis H_completed_jobs_dont_execute : completed_jobs_dont_execute sched. (** Let P be any predicate over jobs. *) Variable P : pred Job. (** First, we prove that the service received by any set of jobs is upper-bounded by the corresponding workload. *)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job

forall (jobs : seq Job) (t1 t2 : instant), service_of_jobs sched P jobs t1 t2 <= workload_of_jobs P jobs
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job

forall (jobs : seq Job) (t1 t2 : instant), service_of_jobs sched P jobs t1 t2 <= workload_of_jobs P jobs
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
t1, t2: instant

service_of_jobs sched P jobs t1 t2 <= workload_of_jobs P jobs
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
t1, t2: instant
j: Job

service_during sched j t1 t2 <= job_cost j
by apply cumulative_service_le_job_cost. Qed. (** In this section, we introduce a connection between the cumulative service, cumulative workload, and completion of jobs. *) Section WorkloadServiceAndCompletion. (** Consider an arbitrary time interval <<[t1, t2)>>. *) Variables t1 t2 : instant. (** Let jobs be a set of all jobs arrived during <<[t1, t2)>>. *) Let jobs := arrivals_between arr_seq t1 t2. (** Next, we consider some time instant [t_compl]. *) Variable t_compl : instant. (** And state the proposition that all jobs are completed by time [t_compl]. Next we show that this proposition is equivalent to the fact that [workload of jobs = service of jobs]. *) Let all_jobs_completed_by t_compl := forall j, j \in jobs -> P j -> completed_by sched j t_compl. (** First, we prove that if the workload of [jobs] is equal to the service of [jobs], then any job in [jobs] is completed by time [t_compl]. *)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop

workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl -> all_jobs_completed_by t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop

workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl -> all_jobs_completed_by t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
ARR: j \in jobs
Pj: P j
ARR2: j \in jobs

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
ARR: arrived_between j t1 t2
Pj: P j
ARR2: j \in jobs

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2

forall a b : nat, (a < b) || (b <= a)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2

forall a b : nat, (a < b) || (b <= a)
by intros; destruct (a < b) eqn:EQU; apply/orP; [by left |right]; apply negbT in EQU; rewrite leqNgt.
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
LT: t_compl < t1

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl
completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
LT: t_compl < t1

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl
completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
LT: t_compl < t1
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = \sum_(j <- arrivals_between arr_seq t1 t2 | P j) \sum_(t1 <= t < t_compl) service_at sched j t

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl
completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
LT: t_compl < t1
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = 0

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl
completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
LT: t_compl < t1
EQ: \sum_(j <- arrivals_between arr_seq t1 t2 | P j) job_cost j = 0

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl
completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
LT: t_compl < t1
EQ: job_cost j + \sum_(y <- rem (T:=Job) j (arrivals_between arr_seq t1 t2) | P y) job_cost y = 0

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl
completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
LT: t_compl < t1
CZ: job_cost j == 0

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl
completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
LT: t_compl < t1
CZ: job_cost j == 0

job_cost j <= service sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl
completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl

completed_by sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: \sum_(j <- arrivals_between arr_seq t1 t2 | P j) job_cost j = \sum_(j <- arrivals_between arr_seq t1 t2 | P j) service_during sched j t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl

job_cost j <= service sched j t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: \sum_(j <- arrivals_between arr_seq t1 t2 | P j) job_cost j = \sum_(j <- arrivals_between arr_seq t1 t2 | P j) service_during sched j t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl

job_cost j <= service_during sched j 0 t1 + service_during sched j t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: \sum_(j <- arrivals_between arr_seq t1 t2 | P j) job_cost j = \sum_(j <- arrivals_between arr_seq t1 t2 | P j) service_during sched j t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl

job_cost j <= service_during sched j t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
EQ: \sum_(j <- arrivals_between arr_seq t1 t2 | P j) job_cost j = \sum_(j <- arrivals_between arr_seq t1 t2 | P j) service_during sched j t1 t_compl
j: Job
Pj: P j
ARR2: j \in jobs
T1: t1 <= job_arrival j
T2: job_arrival j < t2
F1: forall a b : nat, (a < b) || (b <= a)
GT: t1 <= t_compl

forall x : Job, x \in arrivals_between arr_seq t1 t2 -> P x -> service_during sched x t1 t_compl <= job_cost x
by intros; apply cumulative_service_le_job_cost; auto using ideal_proc_model_provides_unit_service. Qed. (** And vice versa, the fact that any job in [jobs] is completed by time [t_compl] implies that the workload of [jobs] is equal to the service of [jobs]. *)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop

all_jobs_completed_by t_compl -> workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop

all_jobs_completed_by t_compl -> workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl

workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl

forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl

forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
j: Job
t: nat
LE: t <= t1
ARR: j \in arrivals_between arr_seq t1 t2

service_during sched j 0 t = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
j: Job
t: nat
LE: t <= t1
GE: t1 <= job_arrival j
LT: job_arrival j < t2

service_during sched j 0 t = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
j: Job
t: nat
LE: t <= t1
GE: t1 <= job_arrival j
LT: job_arrival j < t2

t <= job_arrival j
by apply leq_trans with t1.
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0

workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true

workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true

workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true

workload_of_jobs P (arrivals_between arr_seq t1 t2) = \sum_(j <- arrivals_between arr_seq t1 t2 | P j) service_during sched j t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true

workload_of_jobs P (arrivals_between arr_seq t1 t2) = \sum_(j <- arrivals_between arr_seq t1 t2 | P j) \sum_(t1 <= t < t_compl) service_at sched j t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true

workload_of_jobs P (arrivals_between arr_seq t1 t2) = \sum_(t1 <= j < t_compl) \sum_(i <- arrivals_between arr_seq t1 t2 | P i) service_at sched i j
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true

workload_of_jobs P (arrivals_between arr_seq t1 t2) = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true

forall i : Job, P i && (i \in arrivals_between arr_seq t1 t2) -> job_cost i = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true
j: Job
Pj: P j
ARR: j \in arrivals_between arr_seq t1 t2

job_cost j = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
COMPL: completed_by sched j t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true
Pj: P j
ARR: j \in arrivals_between arr_seq t1 t2

job_cost j = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
COMPL: completed_by sched j t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true
Pj: P j
ARR: j \in arrivals_between arr_seq t1 t2

job_cost j = service_during sched j 0 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
COMPL: completed_by sched j t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true
Pj: P j
ARR: j \in arrivals_between arr_seq t1 t2

job_cost j <= service_during sched j 0 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
COMPL: completed_by sched j t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true
Pj: P j
ARR: j \in arrivals_between arr_seq t1 t2
service_during sched j 0 t_compl <= job_cost j
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
COMPL: completed_by sched j t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true
Pj: P j
ARR: j \in arrivals_between arr_seq t1 t2

job_cost j <= service_during sched j 0 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
COMPL: completed_by sched j t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true
Pj: P j
ARR: j \in arrivals_between arr_seq t1 t2
service_during sched j 0 t_compl <= job_cost j
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
COMPL: completed_by sched j t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true
Pj: P j
ARR: j \in arrivals_between arr_seq t1 t2

service_during sched j 0 t_compl <= job_cost j
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
COMPL: completed_by sched j t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = true
Pj: P j
ARR: j \in arrivals_between arr_seq t1 t2

service_during sched j 0 t_compl <= job_cost j
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false

workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false

workload_of_jobs P (arrivals_between arr_seq t1 t2) = service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false

service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl <= workload_of_jobs P (arrivals_between arr_seq t1 t2)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) <= service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false

service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl <= workload_of_jobs P (arrivals_between arr_seq t1 t2)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
workload_of_jobs P (arrivals_between arr_seq t1 t2) <= service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false

workload_of_jobs P (arrivals_between arr_seq t1 t2) <= service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false

workload_of_jobs P (arrivals_between arr_seq t1 t2) <= service_of_jobs sched P (arrivals_between arr_seq t1 t2) t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false

\sum_(i <- arrivals_between arr_seq t1 t2 | (i \in arrivals_between arr_seq t1 t2) && P i) job_cost i <= \sum_(i <- arrivals_between arr_seq t1 t2 | (i \in arrivals_between arr_seq t1 t2) && P i) service_during sched i t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
COMPL: all_jobs_completed_by t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
j: Job
ARR: j \in arrivals_between arr_seq t1 t2
Pj: P j

job_cost j <= service_during sched j t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
COMPL: completed_by sched j t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
ARR: j \in arrivals_between arr_seq t1 t2
Pj: P j

job_cost j <= service_during sched j t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
COMPL: completed_by sched j t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
EQ: (t_compl <= t1) = false
ARR: j \in arrivals_between arr_seq t1 t2
Pj: P j

t1 <= t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
j: Job
COMPL: completed_by sched j t_compl
F: forall (j : Job) (t : nat), t <= t1 -> j \in arrivals_between arr_seq t1 t2 -> service_during sched j 0 t = 0
ARR: j \in arrivals_between arr_seq t1 t2
Pj: P j
EQ: t1 < t_compl

t1 <= t_compl
by apply ltnW. Qed. (** Using the lemmas above, we prove the equivalence. *)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop

all_jobs_completed_by t_compl <-> workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop

all_jobs_completed_by t_compl <-> workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop

all_jobs_completed_by t_compl -> workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl -> all_jobs_completed_by t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop

all_jobs_completed_by t_compl -> workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop
workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl -> all_jobs_completed_by t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop

workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl -> all_jobs_completed_by t_compl
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
jobs:= arrivals_between arr_seq t1 t2: seq Job
t_compl: instant
all_jobs_completed_by:= fun t_compl : instant => forall j : Job, j \in jobs -> P j -> completed_by sched j t_compl: instant -> Prop

workload_of_jobs P jobs = service_of_jobs sched P jobs t1 t_compl -> all_jobs_completed_by t_compl
by apply workload_eq_service_impl_all_jobs_have_completed. Qed. End WorkloadServiceAndCompletion. End UnitServiceModelLemmas. (** In this section, we prove some properties about service of sets of jobs for unit-service uniprocessor models. *) Section UnitServiceUniProcessorModelLemmas. (** Consider any type of tasks ... *) Context {Task : TaskType}. (** ... and any type of jobs associated with these tasks. *) Context {Job : JobType}. Context `{JobTask Job Task}. Context `{JobArrival Job}. Context `{JobCost Job}. (** Consider any kind of unit-service uniprocessor state model. *) Context {PState : Type}. Context `{ProcessorState Job PState}. Hypothesis H_unit_service_proc_model : unit_service_proc_model PState. Hypothesis H_uniprocessor_model : uniprocessor_model PState. (** Consider any arrival sequence with consistent arrivals. *) Variable arr_seq : arrival_sequence Job. Hypothesis H_arrival_times_are_consistent : consistent_arrival_times arr_seq. (** Next, consider any unit-service uni-processor schedule of this arrival sequence ... *) Variable sched : schedule PState. Hypothesis H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence sched arr_seq. (** ... where jobs do not execute before their arrival or after completion. *) Hypothesis H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute sched. Hypothesis H_completed_jobs_dont_execute : completed_jobs_dont_execute sched. (** Let [P] be any predicate over jobs. *) Variable P : pred Job. (** In this section, we prove that the service received by any set of jobs is upper-bounded by the corresponding interval length. *) Section ServiceOfJobsIsBoundedByLength. (** Let [jobs] denote any set of jobs. *) Variable jobs : seq Job. Hypothesis H_no_duplicate_jobs : uniq jobs. (** We prove that the overall service of [jobs] at a single time instant is at most [1]. *)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs

forall t : instant, \sum_(j <- jobs | P j) service_at sched j t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs

forall t : instant, \sum_(j <- jobs | P j) service_at sched j t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant

\sum_(j <- jobs | P j) service_at sched j t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant

\sum_(j <- jobs | P j) service_at sched j t <= ?n
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant
?n <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant

\sum_(j <- jobs | P j) service_at sched j t <= ?n
by apply leq_sum_seq_pred with (P2 := predT); intros.
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant

\sum_(i <- jobs | predT i) ((service_at sched)^~ t) i <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq [::]
t: instant

\sum_(i <- [::]) service_at sched i t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: uniq js -> \sum_(i <- js) service_at sched i t <= 1
\sum_(i <- (j :: js)) service_at sched i t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq [::]
t: instant

\sum_(i <- [::]) service_at sched i t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: uniq js -> \sum_(i <- js) service_at sched i t <= 1
\sum_(i <- (j :: js)) service_at sched i t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: uniq js -> \sum_(i <- js) service_at sched i t <= 1

\sum_(i <- (j :: js)) service_at sched i t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: uniq js -> \sum_(i <- js) service_at sched i t <= 1

\sum_(i <- (j :: js)) service_at sched i t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1

\sum_(i <- (j :: js)) service_at sched i t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1

service_at sched j t + \sum_(j <- js) service_at sched j t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
Z: service_at sched j t = 0

service_at sched j t + \sum_(j <- js) service_at sched j t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1
service_at sched j t + \sum_(j <- js) service_at sched j t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
Z: service_at sched j t = 0

service_at sched j t + \sum_(j <- js) service_at sched j t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1
service_at sched j t + \sum_(j <- js) service_at sched j t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1

service_at sched j t + \sum_(j <- js) service_at sched j t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1

service_at sched j t + \sum_(j <- js) service_at sched j t <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1

\sum_(j <- js) service_in j (sched t) = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1
POS: 0 < service_at sched j t

\sum_(j <- js) service_in j (sched t) = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1
POS: scheduled_at sched j t

\sum_(j <- js) service_in j (sched t) = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1
POS: scheduled_at sched j t
j': Job
IN: j' \in js

service_in j' (sched t) = 0
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1
POS: scheduled_at sched j t
j': Job
IN: j' \in js

~~ (0 < service_in j' (sched t))
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1
POS: scheduled_at sched j t
j': Job
IN: j' \in js

~~ scheduled_at sched j' t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
j: Job
js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1
POS: scheduled_at sched j t
j': Job
IN: j' \in js
SCHED: scheduled_at sched j' t

False
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
j: Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs, js: seq Job
H_no_duplicate_jobs: uniq (j :: js)
t: instant
IHjs: \sum_(i <- js) service_at sched i t <= 1
O: service_at sched j t = 1
POS, SCHED: scheduled_at sched j t
IN: j \in js

False
by move: H_no_duplicate_jobs; rewrite cons_uniq => /andP [/negP NIN _]. Qed. (** Next, we prove that the service received by those jobs is no larger than their workload. *)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs

forall (t : instant) (Δ : duration), service_of_jobs sched P jobs t (t + Δ) <= Δ
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs

forall (t : instant) (Δ : duration), service_of_jobs sched P jobs t (t + Δ) <= Δ
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant
Δ: duration

service_of_jobs sched P jobs t (t + Δ) <= Δ
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant
Δ: duration

\sum_(t <= x < t + Δ) 1 = Δ
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant
Δ: duration
EQ: \sum_(t <= x < t + Δ) 1 = Δ
service_of_jobs sched P jobs t (t + Δ) <= Δ
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant
Δ: duration

\sum_(t <= x < t + Δ) 1 = Δ
by rewrite big_const_nat iter_addn mul1n addn0 -{2}[t]addn0 subnDl subn0.
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant
Δ: duration
EQ: \sum_(t <= x < t + Δ) 1 = Δ

service_of_jobs sched P jobs t (t + Δ) <= Δ
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant
Δ: duration

service_of_jobs sched P jobs t (t + Δ) <= \sum_(t <= x < t + Δ) 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant
Δ: duration

\sum_(t <= j < t + Δ) \sum_(i <- jobs | P i) service_in i (sched j) <= \sum_(t <= x < t + Δ) 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant
Δ: duration

forall i : nat, true -> \sum_(i0 <- jobs | P i0) service_in i0 (sched i) <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t: instant
Δ: duration
t': nat

\sum_(i <- jobs | P i) service_in i (sched t') <= 1
by apply service_of_jobs_le_1. Qed. (** The same holds for two time instants. *)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs

forall t1 t2 : instant, service_of_jobs sched P jobs t1 t2 <= t2 - t1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs

forall t1 t2 : instant, service_of_jobs sched P jobs t1 t2 <= t2 - t1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t1, t2: instant

service_of_jobs sched P jobs t1 t2 <= t2 - t1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t1, t2: instant

\sum_(t1 <= x < t2) 1 = t2 - t1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t1, t2: instant
service_of_jobs sched P jobs t1 t2 <= \sum_(t1 <= x < t2) 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t1, t2: instant

\sum_(t1 <= x < t2) 1 = t2 - t1
by rewrite big_const_nat iter_addn mul1n addn0.
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t1, t2: instant

service_of_jobs sched P jobs t1 t2 <= \sum_(t1 <= x < t2) 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t1, t2: instant

\sum_(t1 <= j < t2) \sum_(i <- jobs | P i) service_at sched i j <= \sum_(t1 <= x < t2) 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t1, t2: instant

forall i : nat, true -> \sum_(i0 <- jobs | P i0) service_at sched i0 i <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t1, t2: instant
t': nat

\sum_(i <- jobs | P i) service_at sched i t' <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t1, t2: instant
t': nat
SE: \sum_(j <- jobs | P j) service_at sched j t' <= 1

\sum_(i <- jobs | P i) service_at sched i t' <= 1
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: Type
H2: ProcessorState Job PState
H_unit_service_proc_model: unit_service_proc_model PState
H_uniprocessor_model: uniprocessor_model PState
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
jobs: seq Job
H_no_duplicate_jobs: uniq jobs
t1, t2: instant
t': nat
SE: \sum_(j <- jobs | P j) service_at sched j t' <= 1

\sum_(i <- jobs | P i) service_at sched i t' <= \sum_(j <- jobs | P j) service_at sched j t'
by rewrite leq_sum. Qed. End ServiceOfJobsIsBoundedByLength. End UnitServiceUniProcessorModelLemmas. (** In this section, we prove some properties about service of sets of jobs for ideal uni-processor model. *) Section IdealModelLemmas. (** Consider any type of tasks ... *) Context {Task : TaskType}. (** ... and any type of jobs associated with these tasks. *) Context {Job : JobType}. Context `{JobTask Job Task}. Context `{JobArrival Job}. Context `{JobCost Job}. (** Consider any arrival sequence with consistent arrivals. *) Variable arr_seq : arrival_sequence Job. Hypothesis H_arrival_times_are_consistent : consistent_arrival_times arr_seq. (** Next, consider any ideal uni-processor schedule of this arrival sequence ... *) Variable sched : schedule (ideal.processor_state Job). Hypothesis H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq. (** ... where jobs do not execute before their arrival or after completion. *) Hypothesis H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute sched. Hypothesis H_completed_jobs_dont_execute : completed_jobs_dont_execute sched. (** Let [P] be any predicate over jobs. *) Variable P : pred Job. (** We prove that if the total service within some time interval <<[t1,t2)>> is smaller than <<t2 - t1>>, then there is an idle time instant [t ∈ [t1,t2)]. *)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job

forall t1 t2 : instant, service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1 -> exists t : nat, t1 <= t < t2 /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job

forall t1 t2 : instant, service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1 -> exists t : nat, t1 <= t < t2 /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1

exists t : nat, t1 <= t < t2 /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1
LE: (t1 <= t2) = false

exists t : nat, t1 <= t < t2 /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1
LE: (t1 <= t2) = true
exists t : nat, t1 <= t < t2 /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1
LE: (t1 <= t2) = false

exists t : nat, t1 <= t < t2 /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1

t2 < t1 -> exists t : nat, t1 <= t < t2 /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1
LT: t2 - t1 == 0

exists t : nat, t1 <= t < t2 /\ is_idle sched t
by move: LT => /eqP -> in SERV; rewrite ltn0 in SERV.
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1
LE: (t1 <= t2) = true

exists t : nat, t1 <= t < t2 /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1
LE: (t1 <= t2) = true

exists δ : nat, t2 = t1 + δ
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1
LE: (t1 <= t2) = true
EX: exists δ : nat, t2 = t1 + δ
exists t : nat, t1 <= t < t2 /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1
LE: (t1 <= t2) = true

exists δ : nat, t2 = t1 + δ
by exists (t2 - t1); rewrite subnKC // ltnW.
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1, t2: instant
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 t2) t1 t2 < t2 - t1
LE: (t1 <= t2) = true
EX: exists δ : nat, t2 = t1 + δ

exists t : nat, t1 <= t < t2 /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ: nat
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 (t1 + δ)) t1 (t1 + δ) < t1 + δ - t1

exists t : nat, t1 <= t < t1 + δ /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ: nat
SERV: service_of_jobs sched predT (arrivals_between arr_seq 0 (t1 + δ)) t1 (t1 + δ) < δ

exists t : nat, t1 <= t < t1 + δ /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ: nat
SERV: \sum_(t1 <= j < t1 + δ) \sum_(i <- arrivals_between arr_seq 0 (t1 + δ)) (sched j == Some i) < δ

exists t : nat, t1 <= t < t1 + δ /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ: nat
SERV: exists x : nat, t1 <= x < t1 + δ /\ \sum_(i <- arrivals_between arr_seq 0 (t1 + δ)) (sched x == Some i) = 0

exists t : nat, t1 <= t < t1 + δ /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
L: \sum_(i <- arrivals_between arr_seq 0 (t1 + δ)) (sched x == Some i) = 0

exists t : nat, t1 <= t < t1 + δ /\ is_idle sched t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
L: \sum_(i <- arrivals_between arr_seq 0 (t1 + δ)) (sched x == Some i) = 0

is_idle sched x
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
L: \sum_(i <- arrivals_between arr_seq 0 (t1 + δ)) (sched x == Some i) = 0
NIDLE: ~~ is_idle sched x

False
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
L: \sum_(i <- arrivals_between arr_seq 0 (t1 + δ)) (sched x == Some i) = 0
NIDLE: sched x != None

False
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
s: Job
SCHED: sched x = Some s
L: \sum_(i <- arrivals_between arr_seq 0 (t1 + δ)) (Some s == Some i) = 0
NIDLE: Some s != None

False
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
s: Job
L: \sum_(i <- arrivals_between arr_seq 0 (t1 + δ)) (Some s == Some i) = 0
SCHED: scheduled_at sched s x

False
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
s: Job
SCHED: scheduled_at sched s x
L: {in arrivals_between arr_seq 0 (t1 + δ), forall x : Job, (Some s == Some x) == 0}

False
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
s: Job
SCHED: scheduled_at sched s x
L: s \in arrivals_between arr_seq 0 (t1 + δ) -> (fun x : Job => is_true ((Some s == Some x) == 0)) s

s \in arrivals_between arr_seq 0 (t1 + δ)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
s: Job
SCHED: scheduled_at sched s x
L: (fun x : Job => is_true ((Some s == Some x) == 0)) s
False
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
s: Job
SCHED: scheduled_at sched s x
L: s \in arrivals_between arr_seq 0 (t1 + δ) -> (fun x : Job => is_true ((Some s == Some x) == 0)) s

s \in arrivals_between arr_seq 0 (t1 + δ)
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
s: Job
SCHED: scheduled_at sched s x
L: s \in arrivals_between arr_seq 0 (t1 + δ) -> (fun x : Job => is_true ((Some s == Some x) == 0)) s

s \in \cat_(0<=t<t1 + δ)arrivals_at arr_seq t
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
s: Job
SCHED: scheduled_at sched s x
L: s \in arrivals_between arr_seq 0 (t1 + δ) -> (fun x : Job => is_true ((Some s == Some x) == 0)) s

arrived_between s 0 (t1 + δ)
by apply H_jobs_must_arrive_to_execute in SCHED; apply leq_ltn_trans with x.
Task: TaskType
Job: JobType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
P: pred Job
t1: instant
δ, x: nat
GEx: t1 <= x
LEx: x < t1 + δ
s: Job
SCHED: scheduled_at sched s x
L: (fun x : Job => is_true ((Some s == Some x) == 0)) s

False
by move: L; simpl;rewrite eqb0; move => /eqP EQ. Qed. End IdealModelLemmas.