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]
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]
(** * Platform for Fully Non-Preemptive model *) (** In this section, we prove that instantiation of predicate [job_preemptable] to the fully non-preemptive model indeed defines a valid preemption model. *) Section FullyNonPreemptiveModel. (** Consider any type of jobs. *) Context {Job : JobType}. Context `{JobArrival Job}. Context `{JobCost Job}. (** We assume that jobs are fully non-preemptive. *) #[local] Existing Instance fully_nonpreemptive_job_model. (** 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 non-preemptive ideal uniprocessor schedule of this arrival sequence ... *) Variable sched : schedule (ideal.processor_state Job). Hypothesis H_nonpreemptive_sched : nonpreemptive_schedule sched. (** ... 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. (** For simplicity, let's define some local names. *) Let job_pending := pending sched. Let job_completed_by := completed_by sched. Let job_scheduled_at := scheduled_at sched. (** Then, we prove that fully_nonpreemptive_model is a valid preemption model. *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool

valid_preemption_model arr_seq sched
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool

valid_preemption_model arr_seq sched
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j

not_preemptive_implies_scheduled sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j

not_preemptive_implies_scheduled sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j

scheduled_at sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

scheduled_at sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

ft <= t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
scheduled_at sched j ft
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

ft <= t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
scheduled_at sched j ft
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

scheduled_at sched j ft
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

scheduled_at sched j ft
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
NCOMPL: service sched j t != job_cost j
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service sched j t < job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
GE: job_cost j < service sched j t

False
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
POS: 0 < service sched j t
ft: nat
LT: ft < t
SCHED: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service sched j t <= job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j

execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j

execution_starts_with_preemption_point sched j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
NSCHED: ~~ scheduled_at sched j t
SCHED: scheduled_at sched j t.+1

job_preemptable j (service sched j t.+1)
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
NSCHED: ~~ scheduled_at sched j t
SCHED: scheduled_at sched j t.+1

(service sched j t.+1 == 0) || (service sched j t.+1 == job_cost j)
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
NSCHED: ~~ scheduled_at sched j t
SCHED: scheduled_at sched j t.+1

service sched j t.+1 == 0
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
NSCHED: ~~ scheduled_at sched j t
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1

False
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
NSCHED: ~~ scheduled_at sched j t
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

False
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

scheduled_at sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

ft <= t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
scheduled_at sched j ft
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

ft <= t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
scheduled_at sched j ft
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

scheduled_at sched j ft
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

scheduled_at sched j ft
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

~~ completed_by sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service sched j t < job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service sched j t <= service sched j t.+1
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
service sched j t.+1 < job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service sched j t <= service sched j t.+1
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
service sched j t.+1 < job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service sched j t.+1 < job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service sched j t.+1 < job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service sched j t.+1 + 1 <= service sched j t.+2
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
service sched j t.+2 <= job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service_at sched j t.+1 = 1
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
service sched j t.+1 + service_at sched j t.+1 <= service sched j t.+2
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
service sched j t.+2 <= job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service_at sched j t.+1 = 1
by apply/eqP; rewrite service_at_def eqb1 -scheduled_at_def.
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service sched j t.+1 + service_at sched j t.+1 <= service sched j t.+2
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0
service sched j t.+2 <= job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
H1: arrives_in arr_seq j
t: instant
SCHED: scheduled_at sched j t.+1
POS: 0 < service sched j t.+1
ft: nat
LT: ft < t.+1
SCHEDn: scheduled_at sched j ft
SERV: service_during sched j 0 ft = 0

service sched j t.+2 <= job_cost j
by apply completion.service_at_most_cost; rt_eauto. Qed. (** We also prove that under the fully non-preemptive model [job_max_nonpreemptive_segment j] is equal to [job_cost j] ... *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool

forall j : Job, job_max_nonpreemptive_segment j = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool

forall j : Job, job_max_nonpreemptive_segment j = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job

job_max_nonpreemptive_segment j = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job

max0 (distances [seq ρ <- range 0 (job_cost j) | (ρ == 0) || (ρ == job_cost j)]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
ZERO: job_cost j = 0

max0 (distances [seq ρ <- range 0 (job_cost j) | (ρ == 0) || (ρ == job_cost j)]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j
max0 (distances [seq ρ <- range 0 (job_cost j) | (ρ == 0) || (ρ == job_cost j)]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
ZERO: job_cost j = 0

max0 (distances [seq ρ <- range 0 (job_cost j) | (ρ == 0) || (ρ == job_cost j)]) = job_cost j
by rewrite ZERO; compute.
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j

max0 (distances [seq ρ <- range 0 (job_cost j) | (ρ == 0) || (ρ == job_cost j)]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j

forall n : nat, 0 < n -> [seq ρ <- index_iota 0 n.+1 | (ρ == 0) || (ρ == n)] = [:: 0; n]
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j
max0 (distances [:: 0; job_cost j]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j
0 < job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j

forall n : nat, 0 < n -> [seq ρ <- index_iota 0 n.+1 | (ρ == 0) || (ρ == n)] = [:: 0; n]
n: nat
H: 0 < n

0 :: [seq ρ <- iota 1 n | (ρ == 0) || (ρ == n)] = [:: 0; n]
n: nat
H: 0 < n

[seq ρ <- iota 1 n | (ρ == 0) || (ρ == n)] == [:: n]
n: nat
H: 0 < n

forall (t : eqType) (xs : seq_predType t) (P1 P2 : t -> bool), (forall x : t, x \in xs -> ~~ P1 x) -> [seq x <- xs | P1 x || P2 x] = [seq x <- xs | P2 x]
n: nat
H: 0 < n
[seq x <- iota 1 n | x == n] == [:: n]
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

forall (t : eqType) (xs : seq_predType t) (P1 P2 : t -> bool), (forall x : t, x \in xs -> ~~ P1 x) -> [seq x <- xs | P1 x || P2 x] = [seq x <- xs | P2 x]
t: eqType
xs: seq_predType t
P1, P2: t -> bool
H: forall x : t, x \in xs -> ~~ P1 x

[seq x <- xs | P1 x || P2 x] = [seq x <- xs | P2 x]
t: eqType
xs: seq_predType t
P1, P2: t -> bool
H: forall x : t, x \in xs -> ~~ P1 x

{in xs, (fun x : t => P1 x || P2 x) =1 [eta P2]}
t: eqType
xs: seq_predType t
P1, P2: t -> bool
H: forall x : t, x \in xs -> ~~ P1 x
x: t
IN: x \in xs

P1 x || P2 x = P2 x
t: eqType
xs: seq_predType t
P1, P2: t -> bool
x: t
H: ~~ P1 x
IN: x \in xs

P1 x || P2 x = P2 x
by destruct (P1 x), (P2 x).
n: nat
H: 0 < n

[seq x <- iota 1 n | x == n] == [:: n]
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

uniq (iota 1 n)
n: nat
H: 0 < n
n \in iota 1 n
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

uniq (iota 1 n)
n: nat
H: 0 < n
n \in iota 1 n
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

n \in iota 1 n
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

n \in iota 1 n
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n
x: nat_eqType
POS: 0 < x

x != 0
by rewrite -lt0n.
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j

max0 (distances [:: 0; job_cost j]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j
0 < job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j

0 < job_cost j
by done. Qed. (** ... and [job_last_nonpreemptive_segment j] is equal to [job_cost j]. *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool

forall j : Job, job_last_nonpreemptive_segment j = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool

forall j : Job, job_last_nonpreemptive_segment j = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job

job_last_nonpreemptive_segment j = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job

last0 (distances [seq ρ <- range 0 (job_cost j) | (ρ == 0) || (ρ == job_cost j)]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
ZERO: job_cost j = 0

last0 (distances [seq ρ <- range 0 (job_cost j) | (ρ == 0) || (ρ == job_cost j)]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j
last0 (distances [seq ρ <- range 0 (job_cost j) | (ρ == 0) || (ρ == job_cost j)]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
ZERO: job_cost j = 0

last0 (distances [seq ρ <- range 0 (job_cost j) | (ρ == 0) || (ρ == job_cost j)]) = job_cost j
by rewrite ZERO; compute.
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j

last0 (distances [seq ρ <- range 0 (job_cost j) | (ρ == 0) || (ρ == job_cost j)]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j

forall n : nat, 0 < n -> [seq ρ <- index_iota 0 n.+1 | (ρ == 0) || (ρ == n)] = [:: 0; n]
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j
last0 (distances [:: 0; job_cost j]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j
0 < job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j

forall n : nat, 0 < n -> [seq ρ <- index_iota 0 n.+1 | (ρ == 0) || (ρ == n)] = [:: 0; n]
n: nat
H: 0 < n

0 :: [seq ρ <- iota 1 n | (ρ == 0) || (ρ == n)] = [:: 0; n]
n: nat
H: 0 < n

[seq ρ <- iota 1 n | (ρ == 0) || (ρ == n)] == [:: n]
n: nat
H: 0 < n

forall (t : eqType) (xs : seq_predType t) (P1 P2 : t -> bool), (forall x : t, x \in xs -> ~~ P1 x) -> [seq x <- xs | P1 x || P2 x] = [seq x <- xs | P2 x]
n: nat
H: 0 < n
[seq x <- iota 1 n | x == n] == [:: n]
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

forall (t : eqType) (xs : seq_predType t) (P1 P2 : t -> bool), (forall x : t, x \in xs -> ~~ P1 x) -> [seq x <- xs | P1 x || P2 x] = [seq x <- xs | P2 x]
t: eqType
xs: seq_predType t
P1, P2: t -> bool
H: forall x : t, x \in xs -> ~~ P1 x

[seq x <- xs | P1 x || P2 x] = [seq x <- xs | P2 x]
t: eqType
xs: seq_predType t
P1, P2: t -> bool
H: forall x : t, x \in xs -> ~~ P1 x

{in xs, (fun x : t => P1 x || P2 x) =1 [eta P2]}
t: eqType
xs: seq_predType t
P1, P2: t -> bool
H: forall x : t, x \in xs -> ~~ P1 x
x: t
IN: x \in xs

P1 x || P2 x = P2 x
t: eqType
xs: seq_predType t
P1, P2: t -> bool
x: t
H: ~~ P1 x
IN: x \in xs

P1 x || P2 x = P2 x
by destruct (P1 x), (P2 x).
n: nat
H: 0 < n

[seq x <- iota 1 n | x == n] == [:: n]
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

uniq (iota 1 n)
n: nat
H: 0 < n
n \in iota 1 n
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

uniq (iota 1 n)
n: nat
H: 0 < n
n \in iota 1 n
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

n \in iota 1 n
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

n \in iota 1 n
n: nat
H: 0 < n
forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n

forall x : nat_eqType, x \in iota 1 n -> x != 0
n: nat
H: 0 < n
x: nat_eqType
POS: 0 < x

x != 0
by rewrite -lt0n.
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j

last0 (distances [:: 0; job_cost j]) = job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j
0 < job_cost j
Job: JobType
H: JobArrival Job
H0: JobCost Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule (ideal.processor_state Job)
H_nonpreemptive_sched: nonpreemptive_schedule sched
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
job_pending:= pending sched: Job -> instant -> bool
job_completed_by:= completed_by sched: Job -> instant -> bool
job_scheduled_at:= scheduled_at sched: Job -> instant -> bool
j: Job
POS: 0 < job_cost j

0 < job_cost j
by done. Qed. End FullyNonPreemptiveModel. Global Hint Resolve valid_fully_nonpreemptive_model : basic_rt_facts. (** In this section, we prove the equivalence between no preemptions and a non-preemptive schedule. *) Section NoPreemptionsEquivalence. (** Consider any type of jobs with preemption points. *) Context {Job : JobType}. Context `{JobArrival Job}. Context `{JobCost Job}. (** Consider an ideal uniprocessor schedule. *) Variable sched : schedule (ideal.processor_state Job). (** We prove that no preemptions in a schedule is equivalent to a non-preemptive schedule. *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)

(forall (j : Job) (t : instant), ~~ preempted_at sched j t) <-> nonpreemptive_schedule sched
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)

(forall (j : Job) (t : instant), ~~ preempted_at sched j t) <-> nonpreemptive_schedule sched
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)

(forall (j : Job) (t : instant), ~~ preempted_at sched j t) -> nonpreemptive_schedule sched
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
nonpreemptive_schedule sched -> forall (j : Job) (t : instant), ~~ preempted_at sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)

(forall (j : Job) (t : instant), ~~ preempted_at sched j t) -> nonpreemptive_schedule sched
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t, t': instant

t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant

forall n : nat, (t <= n -> scheduled_at sched j t -> ~~ completed_by sched j n -> scheduled_at sched j n) -> t <= n.+1 -> scheduled_at sched j t -> ~~ completed_by sched j n.+1 -> scheduled_at sched j n.+1
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
LE_tt': t <= t'.+1
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1

scheduled_at sched j t'.+1
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
LE_tt': t <= t'.+1
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1

false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1

t <= t'.+1 -> false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1

t < t'.+1 -> false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1
LEQ: t <= t'

false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1
LEQ: t <= t'
SCHEDULED': scheduled_at sched j t'

false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1
LEQ: t <= t'
SCHEDULED': scheduled_at sched j t'

~~ preempted_at sched j t'.+1 -> false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1
LEQ: t <= t'
SCHEDULED': scheduled_at sched j t'

~~ (~~ completed_by sched j t'.+1 && ~~ scheduled_at sched j t'.+1) -> false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1
LEQ: t <= t'
SCHEDULED': scheduled_at sched j t'

completed_by sched j t'.+1 -> false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1
LEQ: t <= t'
SCHEDULED': scheduled_at sched j t'
scheduled_at sched j t'.+1 -> false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1
LEQ: t <= t'
SCHEDULED': scheduled_at sched j t'

completed_by sched j t'.+1 -> false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1
LEQ: t <= t'
SCHEDULED': scheduled_at sched j t'
scheduled_at sched j t'.+1 -> false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1
LEQ: t <= t'
SCHEDULED': scheduled_at sched j t'

scheduled_at sched j t'.+1 -> false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NOT_PREEMPTED: forall (j : Job) (t : instant), ~~ preempted_at sched j t
j: Job
t: instant
t': nat
IH: t <= t' -> scheduled_at sched j t -> ~~ completed_by sched j t' -> scheduled_at sched j t'
SCHEDULED: scheduled_at sched j t
INCOMP: ~~ completed_by sched j t'.+1
NOT_SCHEDULED': ~~ scheduled_at sched j t'.+1
LEQ: t <= t'
SCHEDULED': scheduled_at sched j t'

scheduled_at sched j t'.+1 -> false
by move: NOT_SCHEDULED' => /negP.
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)

nonpreemptive_schedule sched -> forall (j : Job) (t : instant), ~~ preempted_at sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)

nonpreemptive_schedule sched -> forall (j : Job) (t : instant), ~~ preempted_at sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NONPRE: nonpreemptive_schedule sched
j: Job
t: instant

~~ preempted_at sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NONPRE: nonpreemptive_schedule sched
j: Job
t: instant
SCHED_PREV: scheduled_at sched j t.-1
INCOMP: ~~ completed_by sched j t
NOT_SCHED: ~~ scheduled_at sched j t

false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NONPRE: nonpreemptive_schedule sched
j: Job
t: instant
SCHED_PREV: scheduled_at sched j t.-1
INCOMP: ~~ completed_by sched j t
NOT_SCHED: ~~ scheduled_at sched j t
SCHED: scheduled_at sched j t

false
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NONPRE: nonpreemptive_schedule sched
j: Job
t: instant
SCHED_PREV: scheduled_at sched j t.-1
INCOMP: ~~ completed_by sched j t
SCHED: scheduled_at sched j t

~ ~~ scheduled_at sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
sched: schedule (ideal.processor_state Job)
NONPRE: nonpreemptive_schedule sched
j: Job
t: instant
SCHED_PREV: scheduled_at sched j t.-1
INCOMP: ~~ completed_by sched j t
SCHED: scheduled_at sched j t

~~ ~~ scheduled_at sched j t
by rewrite Bool.negb_involutive. } Qed. End NoPreemptionsEquivalence.