Built with Alectryon, running Coq+SerAPI v8.15.0+0.15.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]
(** In this section, we establish two basic facts about preemption times. *) Section PreemptionTimes. (** Consider any type of jobs. *) Context {Job : JobType}. Context `{JobArrival Job}. Context `{JobCost Job}. (** In addition, we assume the existence of a function mapping a job and its progress to a boolean value saying whether this job is preemptable at its current point of execution. *) Context `{JobPreemptable 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 uniprocessor schedule of this arrival sequence... *) Variable sched : schedule (ideal.processor_state Job). (** ...where, jobs come from the arrival sequence. *) Hypothesis H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq. (** Consider a valid preemption model. *) Hypothesis H_valid_preemption_model : valid_preemption_model arr_seq sched. (** We show that time 0 is a preemption time. *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched

preemption_time sched 0
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched

preemption_time sched 0
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched

match sched 0 with | Some j => job_preemptable j (service sched j 0) | None => true end
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched
j: Job
SCHED: sched 0 = Some j

job_preemptable j (service sched j 0)
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched
j: Job
SCHED: sched 0 = Some j
ARR: scheduled_at sched j 0

job_preemptable j (service sched j 0)
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched
j: Job
SCHED: sched 0 = Some j
ARR: arrives_in arr_seq j

job_preemptable j (service sched j 0)
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched
j: Job
SCHED: sched 0 = Some j
ARR: arrives_in arr_seq j

job_preemptable j 0
by move: (H_valid_preemption_model j ARR) => [PP _]. Qed. (** Also, we show that the first instant of execution is a preemption time. *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched

forall (j : Job) (prt : instant), arrives_in arr_seq j -> ~~ scheduled_at sched j prt -> scheduled_at sched j prt.+1 -> preemption_time sched prt.+1
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched

forall (j : Job) (prt : instant), arrives_in arr_seq j -> ~~ scheduled_at sched j prt -> scheduled_at sched j prt.+1 -> preemption_time sched prt.+1
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
pt: instant
ARR: arrives_in arr_seq s
NSCHED: ~~ scheduled_at sched s pt
SCHED: scheduled_at sched s pt.+1

preemption_time sched pt.+1
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
pt: instant
ARR: arrives_in arr_seq s
NSCHED: ~~ scheduled_at sched s pt
SCHED: scheduled_at sched s pt.+1

match sched pt.+1 with | Some j => job_preemptable j (service sched j pt.+1) | None => true end
Job: JobType
H: JobArrival Job
H0: JobCost Job
H1: JobPreemptable Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
pt: instant
ARR: arrives_in arr_seq s
NSCHED: ~~ scheduled_at sched s pt
SCHED: scheduled_at sched s pt.+1

job_preemptable s (service sched s pt.+1)
by move: (H_valid_preemption_model s ARR) => [_ [_ [_ P]]]; apply P. Qed. End PreemptionTimes. (** In this section, we prove a lemma relating scheduling and preemption times. *) Section PreemptionFacts. (** Consider any type of jobs. *) Context {Job : JobType}. Context `{Arrival : JobArrival Job}. Context `{Cost : JobCost Job}. Context `{@JobReady Job (ideal.processor_state Job) Cost Arrival}. (** Consider any arrival sequence. *) Variable arr_seq : arrival_sequence Job. (** Next, consider any ideal uni-processor schedule of this arrival sequence, ... *) Variable sched : schedule (ideal.processor_state Job). (** ...and, assume that the schedule is valid. *) Hypothesis H_sched_valid : valid_schedule sched arr_seq. (** In addition, we assume the existence of a function mapping jobs to their preemption points ... *) Context `{JobPreemptable Job}. (** ... and assume that it defines a valid preemption model. *) Hypothesis H_valid_preemption_model : valid_preemption_model arr_seq sched. (** We prove that every nonpreemptive segment always begins with a preemption time. *)
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched

forall (j : Job) (t : instant), scheduled_at sched j t -> exists pt : nat, job_arrival j <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched j t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched

forall (j : Job) (t : instant), scheduled_at sched j t -> exists pt : nat, job_arrival j <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched j t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t

exists t' : nat, (t' <= t) && scheduled_at sched s t' && all [eta scheduled_at sched s] (index_iota t' t.+1)
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
EX: exists t' : nat, (t' <= t) && scheduled_at sched s t' && all [eta scheduled_at sched s] (index_iota t' t.+1)
exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t

exists t' : nat, (t' <= t) && scheduled_at sched s t' && all [eta scheduled_at sched s] (index_iota t' t.+1)
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t

(t <= t) && scheduled_at sched s t && all [eta scheduled_at sched s] (index_iota t t.+1)
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t

all [eta scheduled_at sched s] (index_iota t t.+1)
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
t': nat_eqType

t' \in index_iota t t.+1 -> scheduled_at sched s t'
by rewrite mem_index_iota ltnS -eqn_leq; move => /eqP <-.
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
EX: exists t' : nat, (t' <= t) && scheduled_at sched s t' && all [eta scheduled_at sched s] (index_iota t' t.+1)

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
EX: exists t' : nat, (t' <= t) && scheduled_at sched s t' && all [eta scheduled_at sched s] (index_iota t' t.+1)
MATE: jobs_must_arrive_to_execute sched

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
EX: exists t' : nat, (t' <= t) && scheduled_at sched s t' && all [eta scheduled_at sched s] (index_iota t' t.+1)
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
EX: exists t' : nat, (t' <= t) && scheduled_at sched s t' && all [eta scheduled_at sched s] (index_iota t' t.+1)
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
MIN: ex_minn_spec (fun t' : nat => (t' <= t) && scheduled_at sched s t' && all [eta scheduled_at sched s] (index_iota t' t.+1)) (ex_minn (P:=fun t' : nat => (t' <= t) && scheduled_at sched s t' && all [eta scheduled_at sched s] (index_iota t' t.+1)) EX)

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt <= t
SCHEDsmpt: scheduled_at sched s mpt
ALL: {in index_iota mpt t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt <= n

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n

job_arrival s <= 0 <= t
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n
preemption_time sched 0
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n
forall t' : nat, 0 <= t' <= t -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n

job_arrival s <= 0 <= t
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n
preemption_time sched 0
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n
forall t' : nat, 0 <= t' <= t -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n

preemption_time sched 0
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n
forall t' : nat, 0 <= t' <= t -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n

preemption_time sched 0
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n
forall t' : nat, 0 <= t' <= t -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n

forall t' : nat, 0 <= t' <= t -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
LT1: 0 <= t
SCHEDsmpt: scheduled_at sched s 0
ALL: {in index_iota 0 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> 0 <= n

forall t' : nat, 0 <= t' <= t -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n

~~ scheduled_at sched s mpt
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt
exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n

~~ scheduled_at sched s mpt
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt

False
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt

mpt < mpt
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt

(mpt <= t) && scheduled_at sched s mpt && all [eta scheduled_at sched s] (index_iota mpt t.+1)
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt

all [eta scheduled_at sched s] (index_iota mpt t.+1)
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt
t': nat_eqType

t' \in index_iota mpt t.+1 -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt
t': nat_eqType
GE: mpt <= t'
LE: t' < t.+1

scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt
t': nat_eqType
LE: t' < t.+1
EQ: mpt = t'

scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt
t': nat_eqType
LE: t' < t.+1
LT: mpt < t'
scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt
t': nat_eqType
LE: t' < t.+1
EQ: mpt = t'

scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt
t': nat_eqType
LE: t' < t.+1
LT: mpt < t'
scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt
t': nat_eqType
LE: t' < t.+1
LT: mpt < t'

scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
SCHED: scheduled_at sched s mpt
t': nat_eqType
LE: t' < t.+1
LT: mpt < t'

scheduled_at sched s t'
by apply ALL; rewrite mem_index_iota; apply/andP; split.
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt
PP: preemption_time sched mpt.+1

exists pt : nat, job_arrival s <= pt <= t /\ preemption_time sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched s t')
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt
PP: preemption_time sched mpt.+1

job_arrival s <= mpt.+1 <= t
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt
PP: preemption_time sched mpt.+1
forall t' : nat, mpt < t' <= t -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt
PP: preemption_time sched mpt.+1

job_arrival s <= mpt.+1 <= t
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt
PP: preemption_time sched mpt.+1
forall t' : nat, mpt < t' <= t -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt
PP: preemption_time sched mpt.+1

job_arrival s <= mpt.+1
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt
PP: preemption_time sched mpt.+1
forall t' : nat, mpt < t' <= t -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt
PP: preemption_time sched mpt.+1

forall t' : nat, mpt < t' <= t -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt
PP: preemption_time sched mpt.+1

forall t' : nat, mpt < t' <= t -> scheduled_at sched s t'
Job: JobType
Arrival: JobArrival Job
Cost: JobCost Job
H: JobReady Job (ideal.processor_state Job)
arr_seq: arrival_sequence Job
sched: schedule (ideal.processor_state Job)
H_sched_valid: valid_schedule sched arr_seq
H0: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
s: Job
t: instant
SCHEDst: scheduled_at sched s t
MATE: jobs_must_arrive_to_execute sched
COME_ARR: jobs_come_from_arrival_sequence sched arr_seq
READY: jobs_must_be_ready_to_execute sched
mpt: nat
LT1: mpt < t
SCHEDsmpt: scheduled_at sched s mpt.+1
ALL: {in index_iota mpt.+1 t.+1, forall x : nat_eqType, scheduled_at sched s x}
MIN: forall n : nat, (n <= t) && scheduled_at sched s n && all [eta scheduled_at sched s] (index_iota n t.+1) -> mpt < n
NSCHED: ~~ scheduled_at sched s mpt
PP: preemption_time sched mpt.+1
t': nat
GE: mpt < t'
LE: t' <= t

scheduled_at sched s t'
by apply ALL; rewrite mem_index_iota; apply/andP; split. Qed. End PreemptionFacts.