Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.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.
[Loading ML file ssrmatching_plugin.cmxs (using legacy method) ... done]
[Loading ML file ssreflect_plugin.cmxs (using legacy method) ... done]
[Loading ML file ring_plugin.cmxs (using legacy method) ... done]
[Loading ML file coq-elpi.elpi ... done]
[Loading ML file zify_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_plugin.cmxs (using legacy method) ... done]
[Loading ML file btauto_plugin.cmxs (using legacy method) ... done]
Notation "_ + _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ - _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ <= _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ < _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ >= _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ > _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ <= _ <= _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ < _ <= _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ <= _ < _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ < _ < _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Notation "_ * _" was already used in scope nat_scope. [notation-overridden,parsing,default]
Require Export prosa.analysis.facts.model.preemption. Require Export prosa.analysis.facts.busy_interval.hep_at_pt. (** * Priority Inversion in a Busy Interval *) (** In this module, we reason about priority inversion that occurs during a busy interval due to non-preemptive sections. *) Section PriorityInversionIsBounded. (** Consider any type of tasks ... *) Context {Task : TaskType}. Context `{TaskCost Task}. (** ... and any type of jobs associated with these tasks. *) Context {Job : JobType}. Context `{JobTask Job Task}. Context `{JobArrival Job}. Context `{JobCost Job}. (** Consider any valid arrival sequence ... *) Variable arr_seq : arrival_sequence Job. Hypothesis H_valid_arrivals : valid_arrival_sequence arr_seq. (** ... and any uniprocessor schedule of this arrival sequence. *) Context {PState : ProcessorState Job}. Hypothesis H_uni : uniprocessor_model PState. Variable sched : schedule PState. (** Consider a JLFP policy that indicates a higher-or-equal priority relation, and assume that the relation is reflexive and transitive. *) Context {JLFP : JLFP_policy Job}. Hypothesis H_priority_is_reflexive: reflexive_job_priorities JLFP. Hypothesis H_priority_is_transitive: transitive_job_priorities JLFP. (** Consider a valid preemption model with known maximum non-preemptive segment lengths. *) Context `{TaskMaxNonpreemptiveSegment Task} `{JobPreemptable Job}. Hypothesis H_valid_preemption_model : valid_preemption_model arr_seq sched. (** Further, allow for any work-bearing notion of job readiness. *) Context `{!JobReady Job PState}. Hypothesis H_job_ready : work_bearing_readiness arr_seq sched. (** We assume that the schedule is valid ... *) Hypothesis H_sched_valid : valid_schedule sched arr_seq. (** ... and that the schedule respects the scheduling policy at every preemption point. *) Hypothesis H_respects_policy : respects_JLFP_policy_at_preemption_point arr_seq sched JLFP. (** Consider any job [j] of [tsk] with positive job cost. *) Variable j : Job. Hypothesis H_j_arrives : arrives_in arr_seq j. Hypothesis H_job_cost_positive : job_cost_positive j. (** Consider any busy interval prefix <<[t1, t2)>> of job [j]. *) Variable t1 t2 : instant. Hypothesis H_busy_interval_prefix : busy_interval_prefix arr_seq sched j t1 t2. (** ** Lower Priority In Busy Intervals *) (** First, we state some basic properties about a lower priority job executing in the busy interval of the job under consideration. From the definition of the busy interval it follows that a lower priority job can only be executing inside the busy interval as a result of priority inversion. *) Section LowerPriorityJobScheduled. (** Consider a lower-priority job. *) Variable jlp : Job. Hypothesis H_jlp_lp : ~~hep_job jlp j. (** Consider an instant [t] within the busy window of the job such that [jlp] is scheduled at [t]. *) Variable t : instant. Hypothesis H_t_in_busy : t1 <= t < t2. Hypothesis H_jlp_scheduled_at_t : scheduled_at sched jlp t. (** First, we prove that no time from [t1] up to the instant [t] can be a preemption point. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t

forall t' : nat, t1 <= t' <= t -> ~~ preemption_time arr_seq sched t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t

forall t' : nat, t1 <= t' <= t -> ~~ preemption_time arr_seq sched t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
LE1: t1 <= t'
GT1: t' <= t

~~ preemption_time arr_seq sched t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
LE1: t1 <= t'
GT1: t' <= t
PT: preemption_time arr_seq sched t'

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
LE1: t1 <= t'
GT1: t' <= t
PT: preemption_time arr_seq sched t'

hep_job jlp j
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
LE1: t1 <= t'
GT1: t' <= t
PT: preemption_time arr_seq sched t'

exists ptst : nat, t' <= ptst <= t /\ preemption_time arr_seq sched ptst /\ scheduled_at sched jlp ptst
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
LE1: t1 <= t'
GT1: t' <= t
PT: preemption_time arr_seq sched t'
ptst: nat
IN1: t' <= ptst <= t
PTT: preemption_time arr_seq sched ptst
STT: scheduled_at sched jlp ptst
hep_job jlp j
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
LE1: t1 <= t'
GT1: t' <= t
PT: preemption_time arr_seq sched t'

exists ptst : nat, t' <= ptst <= t /\ preemption_time arr_seq sched ptst /\ scheduled_at sched jlp ptst
by apply: scheduling_of_any_segment_starts_with_preemption_time_continuously_sched => //=.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
LE1: t1 <= t'
GT1: t' <= t
PT: preemption_time arr_seq sched t'
ptst: nat
IN1: t' <= ptst <= t
PTT: preemption_time arr_seq sched ptst
STT: scheduled_at sched jlp ptst

hep_job jlp j
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
LE1: t1 <= t'
GT1: t' <= t
PT: preemption_time arr_seq sched t'
ptst: nat
IN1: t' <= ptst <= t
PTT: preemption_time arr_seq sched ptst
STT: scheduled_at sched jlp ptst

t1 <= ptst < t2
by lia. Qed. (** Then it follows that the job must have been continuously scheduled from [t1] up to [t]. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t

forall t' : nat, t1 <= t' <= t -> scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t

forall t' : nat, t1 <= t' <= t -> scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
IN: t1 <= t' <= t

scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
IN1': t1 <= t'
IN2': t' <= t

scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
IN1': t1 <= t'
IN2': t' <= t

forall t0 : nat, t' <= t0 <= t -> ~~ preemption_time arr_seq sched t0
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
IN1': t1 <= t'
IN2': t' <= t
_t_: nat
_Hyp_: t' <= _t_ <= t

~~ preemption_time arr_seq sched _t_
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
t': nat
IN1': t1 <= t'
IN2': t' <= t
_t_: nat
_Hyp_: t' <= _t_ <= t

t1 <= _t_ <= t
by lia. Qed. (** Any lower-priority jobs that are scheduled inside the busy-interval prefix <<[t1,t2)>> must arrive before that interval. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t

job_arrival jlp < t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t

job_arrival jlp < t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t

scheduled_at sched jlp t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
SCHED1: scheduled_at sched jlp t1
job_arrival jlp < t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t

scheduled_at sched jlp t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t

t1 <= t1 <= t
lia.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
SCHED1: scheduled_at sched jlp t1

job_arrival jlp < t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
SCHED1: scheduled_at sched jlp t1
ARR1: job_arrival jlp <= t1

job_arrival jlp < t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
SCHED1: scheduled_at sched jlp t1
ARR1: (job_arrival jlp == t1) || (job_arrival jlp < t1)

job_arrival jlp < t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
SCHED1: scheduled_at sched jlp t1
EQ: job_arrival jlp = t1

job_arrival jlp < t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
SCHED1: scheduled_at sched jlp t1
EQ: job_arrival jlp = t1

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
SCHED1: scheduled_at sched jlp t1
EQ: job_arrival jlp = t1
PP: uniprocessor_model PState -> exists pt : nat, job_arrival jlp <= pt <= t /\ preemption_time arr_seq sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched jlp t')

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
SCHED1: scheduled_at sched jlp t1
EQ: job_arrival jlp = t1
PP: exists pt : nat, job_arrival jlp <= pt <= t /\ preemption_time arr_seq sched pt /\ (forall t' : nat, pt <= t' <= t -> scheduled_at sched jlp t')

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
SCHED1: scheduled_at sched jlp t1
EQ: job_arrival jlp = t1
pt: nat
NEQ1: job_arrival jlp <= pt
NEQ2: pt <= t
PT: preemption_time arr_seq sched pt
FA: forall t' : nat, pt <= t' <= t -> scheduled_at sched jlp t'

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
SCHED1: scheduled_at sched jlp t1
EQ: job_arrival jlp = t1
pt: nat
NEQ1: job_arrival jlp <= pt
NEQ2: pt <= t
FA: forall t' : nat, pt <= t' <= t -> scheduled_at sched jlp t'

~ preemption_time arr_seq sched pt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
SCHED1: scheduled_at sched jlp t1
EQ: job_arrival jlp = t1
pt: nat
NEQ1: job_arrival jlp <= pt
NEQ2: pt <= t
FA: forall t' : nat, pt <= t' <= t -> scheduled_at sched jlp t'

~~ preemption_time arr_seq sched pt
by apply (lower_priority_job_scheduled_implies_no_preemption_time ) => //=; lia. Qed. (** Finally, we show that lower-priority jobs that are scheduled inside the busy-interval prefix <<[t1,t2)>> must also be scheduled before the interval. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t

exists t' : nat, t' < t1 /\ scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t

exists t' : nat, t' < t1 /\ scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2

exists t' : nat, t' < t1 /\ scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1

exists t' : nat, t' < t1 /\ scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1

t1.-1 < t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1
scheduled_at sched jlp t1.-1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1

t1.-1 < t1
by rewrite prednK; last apply leq_ltn_trans with (job_arrival jlp).
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1

scheduled_at sched jlp t1.-1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1

scheduled_at sched jlp t1.-1.+1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1
~~ preemption_time arr_seq sched t1.-1.+1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1

scheduled_at sched jlp t1.-1.+1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1

scheduled_at sched jlp t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1

t1 <= t1 <= t
lia.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1

~~ preemption_time arr_seq sched t1.-1.+1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1

~~ preemption_time arr_seq sched t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
H_jlp_lp: ~~ hep_job jlp j
t: instant
H_t_in_busy: t1 <= t < t2
H_jlp_scheduled_at_t: scheduled_at sched jlp t
GE: t1 <= t
LT: t < t2
ARR: job_arrival jlp < t1

t1 <= t1 <= t
by lia. Qed. End LowerPriorityJobScheduled. (** In this section, we prove that priority inversion only occurs at the start of the busy window and occurs due to only one job. *) Section SingleJob. (** Suppose job [j] incurs priority inversion at a time [t_pi] in its busy window. *) Variable t_pi : instant. Hypothesis H_from_t1_before_t2 : t1 <= t_pi < t2. Hypothesis H_PI_occurs : priority_inversion arr_seq sched j t_pi. (** First, we show that there is no preemption time in the interval <<[t1,t_pi]>>. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi

forall t : nat, t1 <= t <= t_pi -> ~~ preemption_time arr_seq sched t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi

forall t : nat, t1 <= t <= t_pi -> ~~ preemption_time arr_seq sched t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
ppt: nat
intl: t1 <= ppt <= t_pi

~~ preemption_time arr_seq sched ppt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
ppt: nat
intl: t1 <= ppt <= t_pi
PI: valid_arrival_sequence arr_seq -> jobs_come_from_arrival_sequence sched arr_seq -> jobs_must_arrive_to_execute sched -> reflexive_job_priorities JLFP -> uniprocessor_model PState -> exists2 j' : Job, scheduled_at sched j' t_pi & ~~ hep_job j' j

~~ preemption_time arr_seq sched ppt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
ppt: nat
intl: t1 <= ppt <= t_pi
PI: exists2 j' : Job, scheduled_at sched j' t_pi & ~~ hep_job j' j

~~ preemption_time arr_seq sched ppt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
ppt: nat
intl: t1 <= ppt <= t_pi
jlp: Job
SCHED: scheduled_at sched jlp t_pi
NHEP: ~~ hep_job jlp j

~~ preemption_time arr_seq sched ppt
by apply (lower_priority_job_scheduled_implies_no_preemption_time jlp NHEP t_pi). Qed. (** Next, we show that the same job will be scheduled from the start of the busy interval to the priority inversion time [t_pi]. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi

forall jlp : Job, scheduled_at sched jlp t_pi -> forall t : nat, t1 <= t <= t_pi -> scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi

forall jlp : Job, scheduled_at sched jlp t_pi -> forall t : nat, t1 <= t <= t_pi -> scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
PI: valid_arrival_sequence arr_seq -> jobs_come_from_arrival_sequence sched arr_seq -> jobs_must_arrive_to_execute sched -> reflexive_job_priorities JLFP -> uniprocessor_model PState -> exists2 j' : Job, scheduled_at sched j' t_pi & ~~ hep_job j' j

forall jlp : Job, scheduled_at sched jlp t_pi -> forall t : nat, t1 <= t <= t_pi -> scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
PI: exists2 j' : Job, scheduled_at sched j' t_pi & ~~ hep_job j' j

forall jlp : Job, scheduled_at sched jlp t_pi -> forall t : nat, t1 <= t <= t_pi -> scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
jlp: Job
SCHED: scheduled_at sched jlp t_pi
NHEP: ~~ hep_job jlp j

forall jlp : Job, scheduled_at sched jlp t_pi -> forall t : nat, t1 <= t <= t_pi -> scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
jlp: Job
SCHED: scheduled_at sched jlp t_pi
NHEP: ~~ hep_job jlp j
jlp1: Job
SCHED3: scheduled_at sched jlp1 t_pi
t: nat
IN: t1 <= t <= t_pi

scheduled_at sched jlp1 t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
jlp: Job
SCHED: scheduled_at sched jlp t_pi
NHEP: ~~ hep_job jlp j
jlp1: Job
SCHED3: scheduled_at sched jlp1 t_pi
t: nat
IN: t1 <= t <= t_pi

~~ hep_job jlp1 j
by have -> : jlp1 = jlp. Qed. (** Thus, priority inversion takes place from the start of the busy interval to the instant [t_pi], i.e., priority inversion takes place continuously. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi

forall t : nat, t1 <= t <= t_pi -> priority_inversion arr_seq sched j t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi

forall t : nat, t1 <= t <= t_pi -> priority_inversion arr_seq sched j t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t_pi
jlp: Job
jlp_sched_pi: jlp \in scheduled_jobs_at arr_seq sched t_pi
nHEPj: ~~ hep_job jlp j
t: nat
INTL: t1 <= t <= t_pi

priority_inversion arr_seq sched j t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t_pi
jlp: Job
jlp_sched_pi: jlp \in scheduled_jobs_at arr_seq sched t_pi
nHEPj: ~~ hep_job jlp j
t: nat
INTL: t1 <= t <= t_pi

scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
t_pi: instant
H_from_t1_before_t2: t1 <= t_pi < t2
H_PI_occurs: priority_inversion arr_seq sched j t_pi
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t_pi
jlp: Job
jlp_sched_pi: jlp \in scheduled_jobs_at arr_seq sched t_pi
nHEPj: ~~ hep_job jlp j
t: nat
INTL: t1 <= t <= t_pi

scheduled_at sched jlp t_pi
by rewrite -(scheduled_jobs_at_iff arr_seq). Qed. End SingleJob. (** As a simple corollary to the lemmas proved in the previous section, we show that for any two jobs [j1] and [j2] that cause priority inversion to job [j], it is the case that [j1 = j2]. *) Section SingleJobEq. (** Consider a time instant [ts1] in <<[t1, t2)>> ... *) Variable ts1 : instant. Hypothesis H_ts1_in_busy_prefix : t1 <= ts1 < t2. (** ... and a lower-priority (w.r.t. job [j]) job [j1] that is scheduled at time [ts1]. *) Variable j1 : Job. Hypothesis H_j1_sched : scheduled_at sched j1 ts1. Hypothesis H_j1_lower_prio : ~~ hep_job j1 j. (** Similarly, consider a time instant [ts2] in <<[t1, t2)>> ... *) Variable ts2 : instant. Hypothesis H_ts2_in_busy_prefix : t1 <= ts2 < t2. (** ... and a lower-priority job [j2] that is scheduled at time [ts2]. *) Variable j2 : Job. Hypothesis H_j2_sched : scheduled_at sched j2 ts2. Hypothesis H_j2_lower_prio : ~~ hep_job j2 j. (** Then, [j1] is equal to [j2]. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ts1: instant
H_ts1_in_busy_prefix: t1 <= ts1 < t2
j1: Job
H_j1_sched: scheduled_at sched j1 ts1
H_j1_lower_prio: ~~ hep_job j1 j
ts2: instant
H_ts2_in_busy_prefix: t1 <= ts2 < t2
j2: Job
H_j2_sched: scheduled_at sched j2 ts2
H_j2_lower_prio: ~~ hep_job j2 j

j1 = j2
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ts1: instant
H_ts1_in_busy_prefix: t1 <= ts1 < t2
j1: Job
H_j1_sched: scheduled_at sched j1 ts1
H_j1_lower_prio: ~~ hep_job j1 j
ts2: instant
H_ts2_in_busy_prefix: t1 <= ts2 < t2
j2: Job
H_j2_sched: scheduled_at sched j2 ts2
H_j2_lower_prio: ~~ hep_job j2 j

j1 = j2
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ts1: instant
H_ts1_in_busy_prefix: t1 <= ts1 < t2
j1: Job
H_j1_sched: scheduled_at sched j1 ts1
H_j1_lower_prio: ~~ hep_job j1 j
ts2: instant
H_ts2_in_busy_prefix: t1 <= ts2 < t2
j2: Job
H_j2_sched: scheduled_at sched j2 ts2
H_j2_lower_prio: ~~ hep_job j2 j
NEQ: ts1 <= ts2

j1 = j2
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ts1: instant
H_ts1_in_busy_prefix: t1 <= ts1 < t2
j1: Job
H_j1_sched: scheduled_at sched j1 ts1
H_j1_lower_prio: ~~ hep_job j1 j
ts2: instant
H_ts2_in_busy_prefix: t1 <= ts2 < t2
j2: Job
H_j2_sched: scheduled_at sched j2 ts2
H_j2_lower_prio: ~~ hep_job j2 j
NEQ: ts2 < ts1
j1 = j2
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ts1: instant
H_ts1_in_busy_prefix: t1 <= ts1 < t2
j1: Job
H_j1_sched: scheduled_at sched j1 ts1
H_j1_lower_prio: ~~ hep_job j1 j
ts2: instant
H_ts2_in_busy_prefix: t1 <= ts2 < t2
j2: Job
H_j2_sched: scheduled_at sched j2 ts2
H_j2_lower_prio: ~~ hep_job j2 j
NEQ: ts1 <= ts2

j1 = j2
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ts1: instant
H_ts1_in_busy_prefix: t1 <= ts1 < t2
j1: Job
H_j1_sched: scheduled_at sched j1 ts1
H_j1_lower_prio: ~~ hep_job j1 j
ts2: instant
H_ts2_in_busy_prefix: t1 <= ts2 < t2
j2: Job
H_j2_sched: scheduled_at sched j2 ts2
H_j2_lower_prio: ~~ hep_job j2 j
NEQ: ts1 <= ts2

scheduled_at sched j2 ts1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ts1: instant
H_ts1_in_busy_prefix: t1 <= ts1 < t2
j1: Job
H_j1_sched: scheduled_at sched j1 ts1
H_j1_lower_prio: ~~ hep_job j1 j
ts2: instant
H_ts2_in_busy_prefix: t1 <= ts2 < t2
j2: Job
H_j2_sched: scheduled_at sched j2 ts2
H_j2_lower_prio: ~~ hep_job j2 j
NEQ: ts1 <= ts2

priority_inversion arr_seq sched j ts2
by erewrite priority_inversion_hep_job.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ts1: instant
H_ts1_in_busy_prefix: t1 <= ts1 < t2
j1: Job
H_j1_sched: scheduled_at sched j1 ts1
H_j1_lower_prio: ~~ hep_job j1 j
ts2: instant
H_ts2_in_busy_prefix: t1 <= ts2 < t2
j2: Job
H_j2_sched: scheduled_at sched j2 ts2
H_j2_lower_prio: ~~ hep_job j2 j
NEQ: ts2 < ts1

j1 = j2
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ts1: instant
H_ts1_in_busy_prefix: t1 <= ts1 < t2
j1: Job
H_j1_sched: scheduled_at sched j1 ts1
H_j1_lower_prio: ~~ hep_job j1 j
ts2: instant
H_ts2_in_busy_prefix: t1 <= ts2 < t2
j2: Job
H_j2_sched: scheduled_at sched j2 ts2
H_j2_lower_prio: ~~ hep_job j2 j
NEQ: ts2 < ts1

j1 = j2
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ts1: instant
H_ts1_in_busy_prefix: t1 <= ts1 < t2
j1: Job
H_j1_sched: scheduled_at sched j1 ts1
H_j1_lower_prio: ~~ hep_job j1 j
ts2: instant
H_ts2_in_busy_prefix: t1 <= ts2 < t2
j2: Job
H_j2_sched: scheduled_at sched j2 ts2
H_j2_lower_prio: ~~ hep_job j2 j
NEQ: ts2 < ts1

scheduled_at sched j1 ts2
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ts1: instant
H_ts1_in_busy_prefix: t1 <= ts1 < t2
j1: Job
H_j1_sched: scheduled_at sched j1 ts1
H_j1_lower_prio: ~~ hep_job j1 j
ts2: instant
H_ts2_in_busy_prefix: t1 <= ts2 < t2
j2: Job
H_j2_sched: scheduled_at sched j2 ts2
H_j2_lower_prio: ~~ hep_job j2 j
NEQ: ts2 < ts1

priority_inversion arr_seq sched j ts1
by erewrite priority_inversion_hep_job; try apply H_j1_sched. } Qed. End SingleJobEq. (** From the above lemmas, it follows that either job [j] incurs no priority inversion at all or certainly at time [t1], i.e., the beginning of its busy interval. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2

cumulative_priority_inversion arr_seq sched j t1 t2 = 0 \/ priority_inversion arr_seq sched j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2

cumulative_priority_inversion arr_seq sched j t1 t2 = 0 \/ priority_inversion arr_seq sched j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2

0 < cumulative_priority_inversion arr_seq sched j t1 t2 -> cumulative_priority_inversion arr_seq sched j t1 t2 = 0 \/ priority_inversion arr_seq sched j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
pi: Datatypes_nat__canonical__eqtype_Equality

pi \in [seq _ <- index_iota t1 t2 | true] -> 0 < priority_inversion arr_seq sched j pi -> cumulative_priority_inversion arr_seq sched j t1 t2 = 0 \/ priority_inversion arr_seq sched j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
pi: Datatypes_nat__canonical__eqtype_Equality
INTL: t1 <= pi < t2
PI_pi: priority_inversion arr_seq sched j pi

cumulative_priority_inversion arr_seq sched j t1 t2 = 0 \/ priority_inversion arr_seq sched j t1
by right; apply: pi_continuous =>//; lia. Qed. (** Next, we use the above facts to establish bounds on the maximum priority inversion that can be incurred in a busy interval. *) (** * Priority Inversion due to Non-Preemptive Sections *) (** First, we introduce the notion of the maximum length of a nonpreemptive segment among all lower priority jobs (w.r.t. a given job [j]) arrived so far. *) Definition max_lp_nonpreemptive_segment (j : Job) (t : instant) := \max_(j_lp <- arrivals_before arr_seq t | (~~ hep_job j_lp j) && (job_cost j_lp > 0)) (job_max_nonpreemptive_segment j_lp - ε). (** Note that any bound on the [max_lp_nonpreemptive_segment] function is also be a bound on the maximum priority inversion (assuming there are no other mechanisms that could cause priority inversion). This bound may be different for different scheduler and/or task models. Thus, we don't define such a bound in this module. *) Section TaskMaxNPS. (** First, assuming proper non-preemptive sections, ... *) Hypothesis H_valid_nps : valid_model_with_bounded_nonpreemptive_segments arr_seq sched. (** ... we observe that the maximum non-preemptive segment length of any task that releases a job with lower priority (w.r.t. a given job [j]) and non-zero execution cost upper-bounds the maximum possible non-preemptive segment length of any lower-priority job. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_nps: valid_model_with_bounded_nonpreemptive_segments arr_seq sched

max_lp_nonpreemptive_segment j t1 <= \max_(j_lp <- arrivals_between arr_seq 0 t1 | ~~ hep_job j_lp j && (0 < job_cost j_lp)) (task_max_nonpreemptive_segment (job_task j_lp) - 1)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_nps: valid_model_with_bounded_nonpreemptive_segments arr_seq sched

max_lp_nonpreemptive_segment j t1 <= \max_(j_lp <- arrivals_between arr_seq 0 t1 | ~~ hep_job j_lp j && (0 < job_cost j_lp)) (task_max_nonpreemptive_segment (job_task j_lp) - 1)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_nps: valid_model_with_bounded_nonpreemptive_segments arr_seq sched

\max_(j_lp <- arrivals_before arr_seq t1 | ~~ hep_job j_lp j && (0 < job_cost j_lp)) (job_max_nonpreemptive_segment j_lp - 1) <= \max_(j_lp <- arrivals_between arr_seq 0 t1 | ~~ hep_job j_lp j && (0 < job_cost j_lp)) (task_max_nonpreemptive_segment (job_task j_lp) - 1)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_nps: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
j': Job
JINB: j' \in arrivals_before arr_seq t1
NOTHEP: ~~ hep_job j' j && (0 < job_cost j')

job_max_nonpreemptive_segment j' - 1 <= task_max_nonpreemptive_segment (job_task j') - 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_nps: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
j': Job
JINB: j' \in arrivals_before arr_seq t1
NOTHEP: ~~ hep_job j' j && (0 < job_cost j')

job_max_nonpreemptive_segment j' <= task_max_nonpreemptive_segment (job_task j')
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_nps: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
j': Job
JINB: arrives_in arr_seq j'
NOTHEP: ~~ hep_job j' j && (0 < job_cost j')

job_max_nonpreemptive_segment j' <= task_max_nonpreemptive_segment (job_task j')
by apply H_valid_nps. Qed. End TaskMaxNPS. (** Next, we prove that the function [max_lp_nonpreemptive_segment] indeed upper-bounds the priority inversion length. *) Section PreemptionTimeExists. (** In this section, we require the jobs to have valid bounded non-preemptive segments. *) Hypothesis H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments arr_seq sched. (** First, we prove that, if a job with higher-or-equal priority is scheduled at a quiet time [t+1], then this is the first time when this job is scheduled. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched

forall (jhp : Job) (t : nat), quiet_time arr_seq sched j t.+1 -> scheduled_at sched jhp t.+1 -> hep_job jhp j -> ~~ scheduled_at sched jhp t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched

forall (jhp : Job) (t : nat), quiet_time arr_seq sched j t.+1 -> scheduled_at sched jhp t.+1 -> hep_job jhp j -> ~~ scheduled_at sched jhp t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
t: nat
QT: quiet_time arr_seq sched j t.+1
SCHED1: scheduled_at sched jhp t.+1
HP: hep_job jhp j

~~ scheduled_at sched jhp t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
t: nat
QT: quiet_time arr_seq sched j t.+1
SCHED1: scheduled_at sched jhp t.+1
HP: hep_job jhp j
SCHED2: scheduled_at sched jhp t

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
t: nat
QT: arrives_in arr_seq jhp -> hep_job jhp j -> arrived_before jhp t.+1 -> completed_by sched jhp t.+1
SCHED1: scheduled_at sched jhp t.+1
HP: hep_job jhp j
SCHED2: scheduled_at sched jhp t

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
t: nat
QT: arrived_before jhp t.+1 -> completed_by sched jhp t.+1
SCHED1: scheduled_at sched jhp t.+1
HP: hep_job jhp j
SCHED2: scheduled_at sched jhp t

arrived_before jhp t.+1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
t: nat
QT: completed_by sched jhp t.+1
SCHED1: scheduled_at sched jhp t.+1
HP: hep_job jhp j
SCHED2: scheduled_at sched jhp t
False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
t: nat
QT: arrived_before jhp t.+1 -> completed_by sched jhp t.+1
SCHED1: scheduled_at sched jhp t.+1
HP: hep_job jhp j
SCHED2: scheduled_at sched jhp t

arrived_before jhp t.+1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
t: nat
QT: arrived_before jhp t.+1 -> completed_by sched jhp t.+1
SCHED1: scheduled_at sched jhp t.+1
HP: hep_job jhp j
SCHED2: scheduled_at sched jhp t
MATE: jobs_must_arrive_to_execute sched

arrived_before jhp t.+1
by have HA: has_arrived jhp t by exact: MATE.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
t: nat
QT: completed_by sched jhp t.+1
SCHED1: scheduled_at sched jhp t.+1
HP: hep_job jhp j
SCHED2: scheduled_at sched jhp t

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
t: nat
QT: ~~ scheduled_at sched jhp t.+1
SCHED1: scheduled_at sched jhp t.+1
HP: hep_job jhp j
SCHED2: scheduled_at sched jhp t

False
by move: QT => /negP NSCHED; apply: NSCHED. Qed. (** Thus, there must be a preemption time in the interval [t1, t1 + max_lp_nonpreemptive_segment j t1]. That is, if a job with higher-or-equal priority is scheduled at time instant [t1], then [t1] is a preemption time. Otherwise, if a job with lower priority is scheduled at time [t1], then this job also should be scheduled before the beginning of the busy interval. So, the next preemption time will be no more than [max_lp_nonpreemptive_segment j t1] time units later. *) (** We proceed by doing a case analysis. *) Section CaseAnalysis. (** (1) Case when the schedule is idle at time [t1]. *) Section Case1. (** Assume that the schedule is idle at time [t1]. *) Hypothesis H_is_idle : is_idle arr_seq sched t1. (** Then time instant [t1] is a preemption time. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_is_idle: is_idle arr_seq sched t1

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_is_idle: is_idle arr_seq sched t1

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_is_idle: is_idle arr_seq sched t1
service:= service.service sched: Job -> instant -> nat

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_is_idle: is_idle arr_seq sched t1
service:= service.service sched: Job -> instant -> nat
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_is_idle: is_idle arr_seq sched t1
service:= service.service sched: Job -> instant -> nat
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: t1 < t2
QT1: quiet_time arr_seq sched j t1
NQT: forall t : nat, t1 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: t1 <= job_arrival j < t2

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_is_idle: is_idle arr_seq sched t1
service:= service.service sched: Job -> instant -> nat
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: t1 < t2
QT1: quiet_time arr_seq sched j t1
NQT: forall t : nat, t1 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: t1 <= job_arrival j < t2

preemption_time arr_seq sched t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_is_idle: is_idle arr_seq sched t1
service:= service.service sched: Job -> instant -> nat
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: t1 < t2
QT1: quiet_time arr_seq sched j t1
NQT: forall t : nat, t1 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: t1 <= job_arrival j < t2
t1 <= t1 <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_is_idle: is_idle arr_seq sched t1
service:= service.service sched: Job -> instant -> nat
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: t1 < t2
QT1: quiet_time arr_seq sched j t1
NQT: forall t : nat, t1 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: t1 <= job_arrival j < t2

preemption_time arr_seq sched t1
exact: idle_time_is_pt.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_is_idle: is_idle arr_seq sched t1
service:= service.service sched: Job -> instant -> nat
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: t1 < t2
QT1: quiet_time arr_seq sched j t1
NQT: forall t : nat, t1 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: t1 <= job_arrival j < t2

t1 <= t1 <= t1 + max_lp_nonpreemptive_segment j t1
by apply/andP; split; last rewrite leq_addr. Qed. End Case1. (** (2) Case when a job with higher-or-equal priority is scheduled at time [t1]. *) Section Case2. (** Assume that a job [jhp] with higher-or-equal priority is scheduled at time [t1]. *) Variable jhp : Job. Hypothesis H_jhp_is_scheduled : scheduled_at sched jhp t1. Hypothesis H_jhp_hep_priority : hep_job jhp j. (** Then time instant [t1] is a preemption time. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp t1
H_jhp_hep_priority: hep_job jhp j

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp t1
H_jhp_hep_priority: hep_job jhp j

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp t1
H_jhp_hep_priority: hep_job jhp j
service:= service.service sched: Job -> instant -> nat

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp t1
H_jhp_hep_priority: hep_job jhp j
service:= service.service sched: Job -> instant -> nat
VALID: valid_preemption_model arr_seq sched
BOUNDED: model_with_bounded_nonpreemptive_segments arr_seq

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp t1
H_jhp_hep_priority: hep_job jhp j
service:= service.service sched: Job -> instant -> nat
VALID: valid_preemption_model arr_seq sched
BOUNDED: model_with_bounded_nonpreemptive_segments arr_seq
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp t1
H_jhp_hep_priority: hep_job jhp j
service:= service.service sched: Job -> instant -> nat
VALID: valid_preemption_model arr_seq sched
BOUNDED: model_with_bounded_nonpreemptive_segments arr_seq
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: t1 < t2
QT1: quiet_time arr_seq sched j t1
NQT: forall t : nat, t1 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: t1 <= job_arrival j < t2

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp t1
H_jhp_hep_priority: hep_job jhp j
service:= service.service sched: Job -> instant -> nat
VALID: valid_preemption_model arr_seq sched
BOUNDED: model_with_bounded_nonpreemptive_segments arr_seq
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: t1 < t2
QT1: quiet_time arr_seq sched j t1
NQT: forall t : nat, t1 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: t1 <= job_arrival j < t2

preemption_time arr_seq sched t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j 0 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp 0
H_jhp_hep_priority: hep_job jhp j
service:= service.service sched: Job -> instant -> nat
VALID: valid_preemption_model arr_seq sched
BOUNDED: model_with_bounded_nonpreemptive_segments arr_seq
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: 0 < t2
QT1: quiet_time arr_seq sched j 0
NQT: forall t : nat, 0 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: 0 <= job_arrival j < t2

preemption_time arr_seq sched 0
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
i: nat
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j i.+1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp i.+1
H_jhp_hep_priority: hep_job jhp j
service:= service.service sched: Job -> instant -> nat
VALID: valid_preemption_model arr_seq sched
BOUNDED: model_with_bounded_nonpreemptive_segments arr_seq
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: i.+1 < t2
QT1: quiet_time arr_seq sched j i.+1
NQT: forall t : nat, i.+1 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: i < job_arrival j < t2
preemption_time arr_seq sched i.+1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j 0 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp 0
H_jhp_hep_priority: hep_job jhp j
service:= service.service sched: Job -> instant -> nat
VALID: valid_preemption_model arr_seq sched
BOUNDED: model_with_bounded_nonpreemptive_segments arr_seq
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: 0 < t2
QT1: quiet_time arr_seq sched j 0
NQT: forall t : nat, 0 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: 0 <= job_arrival j < t2

preemption_time arr_seq sched 0
exact: zero_is_pt.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
i: nat
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j i.+1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp i.+1
H_jhp_hep_priority: hep_job jhp j
service:= service.service sched: Job -> instant -> nat
VALID: valid_preemption_model arr_seq sched
BOUNDED: model_with_bounded_nonpreemptive_segments arr_seq
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: i.+1 < t2
QT1: quiet_time arr_seq sched j i.+1
NQT: forall t : nat, i.+1 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: i < job_arrival j < t2

preemption_time arr_seq sched i.+1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
i: nat
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j i.+1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
jhp: Job
H_jhp_is_scheduled: scheduled_at sched jhp i.+1
H_jhp_hep_priority: hep_job jhp j
service:= service.service sched: Job -> instant -> nat
VALID: valid_preemption_model arr_seq sched
BOUNDED: model_with_bounded_nonpreemptive_segments arr_seq
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
NEM: i.+1 < t2
QT1: quiet_time arr_seq sched j i.+1
NQT: forall t : nat, i.+1 < t < t2 -> ~ quiet_time arr_seq sched j t
HPJ: i < job_arrival j < t2

~~ scheduled_at sched jhp i
exact: hp_job_not_scheduled_before_quiet_time. Qed. End Case2. (** The following argument requires a unit-service assumption. *) Hypothesis H_unit : unit_service_proc_model PState. (** (3) Case when a job with lower priority is scheduled at time [t1]. *) Section Case3. (** Assume that a job [jhp] with lower priority is scheduled at time [t1]. *) Variable jlp : Job. Hypothesis H_jlp_is_scheduled : scheduled_at sched jlp t1. Hypothesis H_jlp_low_priority : ~~ hep_job jlp j. (** To prove the lemma in this case we need a few auxiliary facts about the first preemption point of job [jlp]. *) Section FirstPreemptionPointOfjlp. (** Let's denote the progress of job [jlp] at time [t1] as [progr_t1]. *) Let progr_t1 := service sched jlp t1. (** Consider the first preemption point of job [jlp] after [progr_t1]. *) Variable fpt : instant. Hypothesis H_fpt_is_preemption_point : job_preemptable jlp (progr_t1 + fpt). Hypothesis H_fpt_is_first_preemption_point : forall ρ, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - ε) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ. (** For correctness, we also assume that [fpt] does not exceed the length of the maximum non-preemptive segment. *) Hypothesis H_progr_le_max_nonp_segment : fpt <= job_max_nonpreemptive_segment jlp - ε. (** First we show that [fpt] is indeed the first preemption point after [progr_t1]. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1

forall ρ : nat, progr_t1 <= ρ < progr_t1 + fpt -> ~~ job_preemptable jlp ρ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1

forall ρ : nat, progr_t1 <= ρ < progr_t1 + fpt -> ~~ job_preemptable jlp ρ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
prog: nat
GE: progr_t1 <= prog
LT: prog < progr_t1 + fpt

~~ job_preemptable jlp prog
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
prog: nat
GE: progr_t1 <= prog
LT: prog < progr_t1 + fpt
PPJ: job_preemptable jlp prog

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
prog: nat
GE: progr_t1 <= prog
LT: prog < progr_t1 + fpt
PPJ: job_preemptable jlp prog
K: progr_t1 <= prog <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp prog -> service sched jlp t1 + fpt <= prog

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
prog: nat
GE: progr_t1 <= prog
LT: prog < progr_t1 + fpt
PPJ: job_preemptable jlp prog
K: progr_t1 <= prog <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp prog -> service sched jlp t1 + fpt <= prog

prog <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
prog: nat
GE: progr_t1 <= prog
LT: prog < progr_t1 + fpt
PPJ: job_preemptable jlp prog
K: service sched jlp t1 + fpt <= prog
False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
prog: nat
GE: progr_t1 <= prog
LT: prog < progr_t1 + fpt
PPJ: job_preemptable jlp prog
K: progr_t1 <= prog <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp prog -> service sched jlp t1 + fpt <= prog

prog <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
prog: nat
GE: progr_t1 <= prog
LT: prog < progr_t1 + fpt
PPJ: job_preemptable jlp prog
K: progr_t1 <= prog <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp prog -> service sched jlp t1 + fpt <= prog

prog <= service sched jlp t1 + fpt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
prog: nat
GE: progr_t1 <= prog
LT: prog < progr_t1 + fpt
PPJ: job_preemptable jlp prog
K: progr_t1 <= prog <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp prog -> service sched jlp t1 + fpt <= prog
service sched jlp t1 + fpt <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
prog: nat
GE: progr_t1 <= prog
LT: prog < progr_t1 + fpt
PPJ: job_preemptable jlp prog
K: progr_t1 <= prog <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp prog -> service sched jlp t1 + fpt <= prog

prog <= service sched jlp t1 + fpt
exact: ltnW.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
prog: nat
GE: progr_t1 <= prog
LT: prog < progr_t1 + fpt
PPJ: job_preemptable jlp prog
K: progr_t1 <= prog <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp prog -> service sched jlp t1 + fpt <= prog

service sched jlp t1 + fpt <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1)
by rewrite leq_add2l; apply H_progr_le_max_nonp_segment.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
prog: nat
GE: progr_t1 <= prog
LT: prog < progr_t1 + fpt
PPJ: job_preemptable jlp prog
K: service sched jlp t1 + fpt <= prog

False
by move: K; rewrite leqNgt; move => /negP NLT; apply: NLT. Qed. (** Thanks to the fact that the scheduler respects the notion of preemption points we show that [jlp] is continuously scheduled in time interval <<[t1, t1 + fpt)>>. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1

forall t' : nat, t1 <= t' < t1 + fpt -> scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1

forall t' : nat, t1 <= t' < t1 + fpt -> scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched

forall t' : nat, t1 <= t' < t1 + fpt -> scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
ARRs: arrives_in arr_seq jlp

forall t' : nat, t1 <= t' < t1 + fpt -> scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
ARRs: arrives_in arr_seq jlp
t': nat
GE: t1 <= t'
LT: t' < t1 + fpt

scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
ARRs: arrives_in arr_seq jlp
t': nat
GE: t1 <= t'
LT: t' < t1 + fpt

exists Δ : nat, t' = t1 + Δ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
ARRs: arrives_in arr_seq jlp
t': nat
GE: t1 <= t'
LT: t' < t1 + fpt
Fact: exists Δ : nat, t' = t1 + Δ
scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
ARRs: arrives_in arr_seq jlp
t': nat
GE: t1 <= t'
LT: t' < t1 + fpt

exists Δ : nat, t' = t1 + Δ
by exists (t' - t1); apply/eqP; rewrite eq_sym; apply/eqP; rewrite subnKC.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
ARRs: arrives_in arr_seq jlp
t': nat
GE: t1 <= t'
LT: t' < t1 + fpt
Fact: exists Δ : nat, t' = t1 + Δ

scheduled_at sched jlp t'
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ

scheduled_at sched jlp (t1 + Δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
CORR: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
NPPJ: progr_t1 <= service sched jlp (t1 + Δ) < progr_t1 + fpt -> ~~ job_preemptable jlp (service sched jlp (t1 + Δ))

scheduled_at sched jlp (t1 + Δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
CORR: job_cannot_become_nonpreemptive_before_execution jlp /\ job_cannot_be_nonpreemptive_after_completion jlp /\ not_preemptive_implies_scheduled sched jlp /\ execution_starts_with_preemption_point sched jlp
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
NPPJ: progr_t1 <= service sched jlp (t1 + Δ) < progr_t1 + fpt -> ~~ job_preemptable jlp (service sched jlp (t1 + Δ))

scheduled_at sched jlp (t1 + Δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
NPPJ: progr_t1 <= service sched jlp (t1 + Δ) < progr_t1 + fpt -> ~~ job_preemptable jlp (service sched jlp (t1 + Δ))
T: not_preemptive_implies_scheduled sched jlp

scheduled_at sched jlp (t1 + Δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp

progr_t1 <= service sched jlp (t1 + Δ)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp
service sched jlp (t1 + Δ) < progr_t1 + fpt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp

progr_t1 <= service sched jlp (t1 + Δ)
by apply service_monotonic; rewrite leq_addr.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp

service sched jlp (t1 + Δ) < progr_t1 + fpt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp

service_during sched jlp 0 t1 + service_during sched jlp t1 (t1 + Δ) < progr_t1 + fpt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp
0 <= t1 <= t1 + Δ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp

service_during sched jlp 0 t1 + service_during sched jlp t1 (t1 + Δ) < progr_t1 + fpt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp
LT: Δ < fpt

service_during sched jlp t1 (t1 + Δ) < fpt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp
LT: Δ < fpt

service_during sched jlp t1 (t1 + Δ) <= Δ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp
LT: Δ < fpt

service_during sched jlp t1 (t1 + Δ) <= \sum_(t1 <= x < t1 + Δ) 1
by rewrite leq_sum.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp

0 <= t1 <= t1 + Δ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
Δ: nat
LT: t1 + Δ < t1 + fpt
GE: t1 <= t1 + Δ
T: not_preemptive_implies_scheduled sched jlp

0 <= t1 <= t1 + Δ
by apply/andP; split; [|rewrite leq_addr]. } Qed. (** Thus, assuming an ideal-progress processor model, job [jlp] reaches its preemption point at time instant [t1 + fpt], which implies that time instant [t1 + fpt] is a preemption time. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1

ideal_progress_proc_model PState -> preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1

ideal_progress_proc_model PState -> preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState

preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)

preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
NEQ: jlp != j'
preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

job_preemptable jlp (service sched jlp (t1 + fpt))
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

0 <= t1 <= t1 + fpt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'
job_preemptable jlp (service_during sched jlp 0 t1 + service_during sched jlp t1 (t1 + fpt))
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

0 <= t1 <= t1 + fpt
by apply/andP; split; last rewrite leq_addr.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

job_preemptable jlp (service_during sched jlp 0 t1 + service_during sched jlp t1 (t1 + fpt))
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

service_during sched jlp t1 (t1 + fpt) = fpt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

service_during sched jlp t1 (t1 + fpt) = fpt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

\sum_(t1 <= t < t1 + fpt) service_at sched jlp t = \sum_(t1 <= x < t1 + fpt) 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

\sum_(t1 <= t < t1 + fpt) service_at sched jlp t <= \sum_(t1 <= x < t1 + fpt) 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'
\sum_(t1 <= x < t1 + fpt) 1 <= \sum_(t1 <= t < t1 + fpt) service_at sched jlp t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

\sum_(t1 <= t < t1 + fpt) service_at sched jlp t <= \sum_(t1 <= x < t1 + fpt) 1
by rewrite leq_sum.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

\sum_(t1 <= x < t1 + fpt) 1 <= \sum_(t1 <= t < t1 + fpt) service_at sched jlp t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

\sum_(t1 <= i < t1 + fpt | (t1 <= i < t1 + fpt) && true) 1 <= \sum_(t1 <= i < t1 + fpt | (t1 <= i < t1 + fpt) && true) service_at sched jlp i
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'

forall i : nat, (t1 <= i < t1 + fpt) && true -> 0 < service_at sched jlp i
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
EQ: jlp = j'
x: nat
HYP: t1 <= x < t1 + fpt

0 < service_at sched jlp x
exact/H_progress/continuously_scheduled_between_preemption_points. }
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
NEQ: jlp != j'

preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
NEQ: jlp != j'

preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
NEQ: jlp != j'
ZERO: fpt = 0

preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
NEQ: jlp != j'
POS: 0 < fpt
preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
NEQ: jlp != j'
ZERO: fpt = 0

preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
H_progr_le_max_nonp_segment: 0 <= job_max_nonpreemptive_segment jlp - 1
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + 0 <= ρ
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + 0)
H_progress: ideal_progress_proc_model PState
j': Job
NEQ: jlp != j'
SCHED': scheduled_at sched j' t1

preemption_time arr_seq sched (t1 + 0)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
H_progr_le_max_nonp_segment: 0 <= job_max_nonpreemptive_segment jlp - 1
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + 0 <= ρ
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + 0)
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' t1

jlp = j'
exact: H_uni.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
NEQ: jlp != j'
POS: 0 < fpt

preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
NEQ: jlp != j'
POS: 0 < fpt

preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
SCHED': scheduled_at sched j' (t1 + fpt)
NEQ: jlp != j'
POS: 0 < fpt
sm: nat
EQ2: sm.+1 = fpt

preemption_time arr_seq sched (t1 + fpt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
NEQ: jlp != j'
POS: 0 < fpt
sm: nat
EQ2: sm.+1 = fpt
SCHED': scheduled_at sched j' (t1 + sm).+1

preemption_time arr_seq sched (t1 + sm).+1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
NEQ: jlp != j'
POS: 0 < fpt
sm: nat
EQ2: sm.+1 = fpt
SCHED': scheduled_at sched j' (t1 + sm).+1

~~ scheduled_at sched j' (t1 + sm)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
NEQ: jlp != j'
POS: 0 < fpt
sm: nat
EQ2: sm.+1 = fpt
SCHED': scheduled_at sched j' (t1 + sm).+1

scheduled_at sched jlp (t1 + sm)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
H_progress: ideal_progress_proc_model PState
j': Job
NEQ: jlp != j'
POS: 0 < fpt
sm: nat
EQ2: sm.+1 = fpt
SCHED': scheduled_at sched j' (t1 + sm).+1

t1 <= t1 + sm < t1 + fpt
by apply/andP; split; [rewrite leq_addr | rewrite -EQ2 addnS]. } } Qed. (** And since [fpt <= max_lp_nonpreemptive_segment j t1], [t1 <= t1 + fpt <= t1 + max_lp_nonpreemptive_segment j t1]. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1

t1 <= t1 + fpt <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1

t1 <= t1 + fpt <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp

t1 <= t1 + fpt <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp

t1 + fpt <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp

fpt <= max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp

fpt <= \max_(j_lp <- arrivals_before arr_seq t1 | ~~ hep_job j_lp j && (0 < job_cost j_lp)) (job_max_nonpreemptive_segment j_lp - 1)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp

fpt <= maxn (if ~~ hep_job jlp j && (0 < job_cost jlp) then job_max_nonpreemptive_segment jlp - 1 else 0) (\max_(y <- rem (T:=Job) jlp (arrivals_before arr_seq t1) | ~~ hep_job y j && (0 < job_cost y)) (job_max_nonpreemptive_segment y - 1))
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
jlp \in arrivals_before arr_seq t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp

fpt <= maxn (if ~~ hep_job jlp j && (0 < job_cost jlp) then job_max_nonpreemptive_segment jlp - 1 else 0) (\max_(y <- rem (T:=Job) jlp (arrivals_before arr_seq t1) | ~~ hep_job y j && (0 < job_cost y)) (job_max_nonpreemptive_segment y - 1))
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp

fpt <= maxn (if 0 < job_cost jlp then job_max_nonpreemptive_segment jlp - 1 else 0) (\max_(y <- rem (T:=Job) jlp (arrivals_before arr_seq t1) | ~~ hep_job y j && (0 < job_cost y)) (job_max_nonpreemptive_segment y - 1))
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
NZ: service sched jlp t1 < job_cost jlp

fpt <= maxn (if 0 < job_cost jlp then job_max_nonpreemptive_segment jlp - 1 else 0) (\max_(y <- rem (T:=Job) jlp (arrivals_before arr_seq t1) | ~~ hep_job y j && (0 < job_cost y)) (job_max_nonpreemptive_segment y - 1))
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
NZ: service sched jlp t1 < job_cost jlp

fpt <= maxn (job_max_nonpreemptive_segment jlp - 1) (\max_(y <- rem (T:=Job) jlp (arrivals_before arr_seq t1) | ~~ hep_job y j && (0 < job_cost y)) (job_max_nonpreemptive_segment y - 1))
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
NZ: service sched jlp t1 < job_cost jlp

fpt <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
NZ: service sched jlp t1 < job_cost jlp
job_max_nonpreemptive_segment jlp - 1 <= maxn (job_max_nonpreemptive_segment jlp - 1) (\max_(y <- rem (T:=Job) jlp (arrivals_before arr_seq t1) | ~~ hep_job y j && (0 < job_cost y)) (job_max_nonpreemptive_segment y - 1))
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
NZ: service sched jlp t1 < job_cost jlp

fpt <= job_max_nonpreemptive_segment jlp - 1
by apply H_progr_le_max_nonp_segment.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp
NZ: service sched jlp t1 < job_cost jlp

job_max_nonpreemptive_segment jlp - 1 <= maxn (job_max_nonpreemptive_segment jlp - 1) (\max_(y <- rem (T:=Job) jlp (arrivals_before arr_seq t1) | ~~ hep_job y j && (0 < job_cost y)) (job_max_nonpreemptive_segment y - 1))
by rewrite leq_maxl.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp

jlp \in arrivals_before arr_seq t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp

arrived_between jlp 0 t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp

job_arrival jlp < t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
progr_t1:= service sched jlp t1: nat
fpt: instant
H_fpt_is_preemption_point: job_preemptable jlp (progr_t1 + fpt)
H_fpt_is_first_preemption_point: forall ρ : nat, progr_t1 <= ρ <= progr_t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service sched jlp t1 + fpt <= ρ
H_progr_le_max_nonp_segment: fpt <= job_max_nonpreemptive_segment jlp - 1
ARRs: arrives_in arr_seq jlp

t1 <= t1 < t2
by move: (H_busy_interval_prefix) => [NEM [QT1 [NQT HPJ]]]; apply/andP. Qed. End FirstPreemptionPointOfjlp. (** For the next step, we assume an ideal-progress processor. *) Hypothesis H_progress : ideal_progress_proc_model PState. (** Next, we combine the above facts to conclude the lemma. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat

exists pt : nat, (service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp pt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
EX: exists pt : nat, (service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp pt
exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat

exists pt : nat, (service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp pt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
ARRs: arrives_in arr_seq jlp

exists pt : nat, (service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp pt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
ARRs: arrives_in arr_seq jlp
EXPP: nonpreemptive_regions_have_bounded_length jlp

exists pt : nat, (service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp pt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
ARRs: arrives_in arr_seq jlp
EXPP: nonpreemptive_regions_have_bounded_length jlp
A: jobs_come_from_arrival_sequence sched arr_seq
B: jobs_must_be_ready_to_execute sched

exists pt : nat, (service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp pt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
ARRs: arrives_in arr_seq jlp
EXPP: 0 <= service jlp t1 <= job_cost jlp -> exists pp : duration, service jlp t1 <= pp <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1) /\ job_preemptable jlp pp
A: jobs_come_from_arrival_sequence sched arr_seq
B: jobs_must_be_ready_to_execute sched

exists pt : nat, (service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp pt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
ARRs: arrives_in arr_seq jlp
EXPP: 0 <= service jlp t1 <= job_cost jlp -> exists pp : duration, service jlp t1 <= pp <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1) /\ job_preemptable jlp pp
A: jobs_come_from_arrival_sequence sched arr_seq
B: jobs_must_be_ready_to_execute sched

0 <= service jlp t1 <= job_cost jlp
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
ARRs: arrives_in arr_seq jlp
EXPP: exists pp : duration, service jlp t1 <= pp <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1) /\ job_preemptable jlp pp
A: jobs_come_from_arrival_sequence sched arr_seq
B: jobs_must_be_ready_to_execute sched
exists pt : nat, (service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp pt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
ARRs: arrives_in arr_seq jlp
EXPP: 0 <= service jlp t1 <= job_cost jlp -> exists pp : duration, service jlp t1 <= pp <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1) /\ job_preemptable jlp pp
A: jobs_come_from_arrival_sequence sched arr_seq
B: jobs_must_be_ready_to_execute sched

0 <= service jlp t1 <= job_cost jlp
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
ARRs: arrives_in arr_seq jlp
EXPP: 0 <= service jlp t1 <= job_cost jlp -> exists pp : duration, service jlp t1 <= pp <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1) /\ job_preemptable jlp pp
A: jobs_come_from_arrival_sequence sched arr_seq
B: jobs_must_be_ready_to_execute sched

service jlp t1 <= job_cost jlp
exact: service_at_most_cost.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
ARRs: arrives_in arr_seq jlp
EXPP: exists pp : duration, service jlp t1 <= pp <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1) /\ job_preemptable jlp pp
A: jobs_come_from_arrival_sequence sched arr_seq
B: jobs_must_be_ready_to_execute sched

exists pt : nat, (service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp pt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
ARRs: arrives_in arr_seq jlp
A: jobs_come_from_arrival_sequence sched arr_seq
B: jobs_must_be_ready_to_execute sched
pt: duration
NEQ: service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
PP: job_preemptable jlp pt

exists pt : nat, (service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp pt
by exists pt; apply/andP.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
EX: exists pt : nat, (service jlp t1 <= pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp pt

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
NEQ: service jlp t1 <= sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
PP: job_preemptable jlp sm_pt
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> sm_pt <= n

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
NEQ: service jlp t1 <= sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
PP: job_preemptable jlp sm_pt
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> sm_pt <= n

exists Δ : nat, sm_pt = service jlp t1 + Δ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
NEQ: service jlp t1 <= sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
PP: job_preemptable jlp sm_pt
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> sm_pt <= n
Fact: exists Δ : nat, sm_pt = service jlp t1 + Δ
exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
NEQ: service jlp t1 <= sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
PP: job_preemptable jlp sm_pt
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> sm_pt <= n

exists Δ : nat, sm_pt = service jlp t1 + Δ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
NEQ: service jlp t1 <= sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
PP: job_preemptable jlp sm_pt
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> sm_pt <= n

sm_pt = service jlp t1 + (sm_pt - service jlp t1)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
NEQ: service jlp t1 <= sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
PP: job_preemptable jlp sm_pt
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> sm_pt <= n

service jlp t1 <= sm_pt
by move: NEQ => /andP [T _].
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
NEQ: service jlp t1 <= sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
PP: job_preemptable jlp sm_pt
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> sm_pt <= n
Fact: exists Δ : nat, sm_pt = service jlp t1 + Δ

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> service jlp t1 + sm_pt <= n
PP: job_preemptable jlp (service jlp t1 + sm_pt)
NEQ: service jlp t1 <= service jlp t1 + sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> service jlp t1 + sm_pt <= n
PP: job_preemptable jlp (service jlp t1 + sm_pt)
NEQ: service jlp t1 <= service jlp t1 + sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

preemption_time arr_seq sched (t1 + sm_pt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> service jlp t1 + sm_pt <= n
PP: job_preemptable jlp (service jlp t1 + sm_pt)
NEQ: service jlp t1 <= service jlp t1 + sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
t1 <= t1 + sm_pt <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> service jlp t1 + sm_pt <= n
PP: job_preemptable jlp (service jlp t1 + sm_pt)
NEQ: service jlp t1 <= service jlp t1 + sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

preemption_time arr_seq sched (t1 + sm_pt)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> service jlp t1 + sm_pt <= n
PP: job_preemptable jlp (service jlp t1 + sm_pt)
NEQ: service jlp t1 <= service jlp t1 + sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

forall ρ : nat, service_during sched jlp 0 t1 <= ρ <= service_during sched jlp 0 t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service_during sched jlp 0 t1 + sm_pt <= ρ
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> service jlp t1 + sm_pt <= n
PP: job_preemptable jlp (service jlp t1 + sm_pt)
NEQ: service jlp t1 <= service jlp t1 + sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
sm_pt <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> service jlp t1 + sm_pt <= n
PP: job_preemptable jlp (service jlp t1 + sm_pt)
NEQ: service jlp t1 <= service jlp t1 + sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

forall ρ : nat, service_during sched jlp 0 t1 <= ρ <= service_during sched jlp 0 t1 + (job_max_nonpreemptive_segment jlp - 1) -> job_preemptable jlp ρ -> service_during sched jlp 0 t1 + sm_pt <= ρ
by intros; apply MIN; apply/andP; split.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> service jlp t1 + sm_pt <= n
PP: job_preemptable jlp (service jlp t1 + sm_pt)
NEQ: service jlp t1 <= service jlp t1 + sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

sm_pt <= job_max_nonpreemptive_segment jlp - 1
by lia.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> service jlp t1 + sm_pt <= n
PP: job_preemptable jlp (service jlp t1 + sm_pt)
NEQ: service jlp t1 <= service jlp t1 + sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

t1 <= t1 + sm_pt <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
jlp: Job
H_jlp_is_scheduled: scheduled_at sched jlp t1
H_jlp_low_priority: ~~ hep_job jlp j
H_progress: ideal_progress_proc_model PState
service:= service.service sched: Job -> instant -> nat
sm_pt: nat
MIN: forall n : nat, (service jlp t1 <= n <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)) && job_preemptable jlp n -> service jlp t1 + sm_pt <= n
PP: job_preemptable jlp (service jlp t1 + sm_pt)
NEQ: service jlp t1 <= service jlp t1 + sm_pt <= service jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

sm_pt <= job_max_nonpreemptive_segment jlp - 1
by lia. Qed. End Case3. End CaseAnalysis. (** As Case 3 depends on unit-service and ideal-progress assumptions, we require the same here. *) Hypothesis H_unit : unit_service_proc_model PState. Hypothesis H_progress : ideal_progress_proc_model PState. (** By doing the case analysis, we show that indeed there is a preemption time in the time interval [[t1, t1 + max_lp_nonpreemptive_segment j t1]]. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
H_progress: ideal_progress_proc_model PState

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
H_progress: ideal_progress_proc_model PState

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
H_progress: ideal_progress_proc_model PState
Idle: is_idle arr_seq sched t1

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
H_progress: ideal_progress_proc_model PState
s: Job
Sched_s: scheduled_at sched s t1
exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
H_progress: ideal_progress_proc_model PState
Idle: is_idle arr_seq sched t1

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
by apply preemption_time_exists_case1.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
H_progress: ideal_progress_proc_model PState
s: Job
Sched_s: scheduled_at sched s t1

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
H_progress: ideal_progress_proc_model PState
s: Job
Sched_s: scheduled_at sched s t1
PRIO: hep_job s j = true

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
H_progress: ideal_progress_proc_model PState
s: Job
Sched_s: scheduled_at sched s t1
PRIO: hep_job s j = false
exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
H_progress: ideal_progress_proc_model PState
s: Job
Sched_s: scheduled_at sched s t1
PRIO: hep_job s j = true

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
exact: preemption_time_exists_case2.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
H_progress: ideal_progress_proc_model PState
s: Job
Sched_s: scheduled_at sched s t1
PRIO: hep_job s j = false

exists pr_t : instant, preemption_time arr_seq sched pr_t /\ t1 <= pr_t <= t1 + max_lp_nonpreemptive_segment j t1
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_unit: unit_service_proc_model PState
H_progress: ideal_progress_proc_model PState
s: Job
Sched_s: scheduled_at sched s t1
PRIO: hep_job s j = false

~~ hep_job s j
by rewrite -eqbF_neg; apply /eqP. Qed. End PreemptionTimeExists. (** In this section we prove that if a preemption point [ppt] exists in a job's busy window, it suffers no priority inversion after [ppt]. Equivalently the [cumulative_priority_inversion] of the job in the busy window [t1,t2] is bounded by the [cumulative_priority_inversion] of the job in the time window [t1,[ppt]). *) Section NoPriorityInversionAfterPreemptionPoint. (** Consider the preemption point [ppt]. *) Variable ppt: instant. Hypothesis H_preemption_point : preemption_time arr_seq sched ppt. Hypothesis H_after_t1 : t1 <= ppt. (** We first establish the aforementioned result by showing that [j] cannot suffer priority inversion after the preemption time [ppt] ... *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt

forall t : nat, ppt <= t < t2 -> ~~ priority_inversion arr_seq sched j t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt

forall t : nat, ppt <= t < t2 -> ~~ priority_inversion arr_seq sched j t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2

~~ priority_inversion arr_seq sched j t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
PI: priority_inversion arr_seq sched j t

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp: Job
jlp_sched_pi: jlp \in scheduled_jobs_at arr_seq sched t
nHEPj: ~~ hep_job jlp j

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp: Job
jlp_sched_pi: jlp \in scheduled_jobs_at arr_seq sched t
nHEPj: ~~ hep_job jlp j
j': Job
SCHED2: scheduled_jobs_at arr_seq sched t = [:: j']

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp: Job
nHEPj: ~~ hep_job jlp j
j': Job
SCHED2: scheduled_jobs_at arr_seq sched t = [:: j']
jlp_sched_pi: jlp == j'

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp: Job
nHEPj: ~~ hep_job jlp j
j': Job
SCHED2: scheduled_jobs_at arr_seq sched t = [:: j']
HJLP: jlp = j'

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp: Job
nHEPj: ~~ hep_job jlp j
j': Job
SCHED2: scheduled_jobs_at arr_seq sched t = [:: jlp]

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp: Job
nHEPj: ~~ hep_job jlp j
j': Job
SCHED2: scheduled_jobs_at arr_seq sched t == [:: jlp]

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp: Job
nHEPj: ~~ hep_job jlp j
j': Job
SCHED2: scheduled_at sched jlp t

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp: Job
nHEPj: ~~ hep_job jlp j
j': Job
SCHED2: scheduled_at sched jlp t

exists ptst : nat, ppt <= ptst <= t /\ preemption_time arr_seq sched ptst /\ scheduled_at sched jlp ptst
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp: Job
nHEPj: ~~ hep_job jlp j
j': Job
SCHED2: scheduled_at sched jlp t
ptst: nat
IN1: ppt <= ptst <= t
PTT: preemption_time arr_seq sched ptst
STT: scheduled_at sched jlp ptst
False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp: Job
nHEPj: ~~ hep_job jlp j
j': Job
SCHED2: scheduled_at sched jlp t

exists ptst : nat, ppt <= ptst <= t /\ preemption_time arr_seq sched ptst /\ scheduled_at sched jlp ptst
by apply: scheduling_of_any_segment_starts_with_preemption_time_continuously_sched.
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp: Job
nHEPj: ~~ hep_job jlp j
j': Job
SCHED2: scheduled_at sched jlp t
ptst: nat
IN1: ppt <= ptst <= t
PTT: preemption_time arr_seq sched ptst
STT: scheduled_at sched jlp ptst

False
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp, j': Job
SCHED2: scheduled_at sched jlp t
ptst: nat
IN1: ppt <= ptst <= t
PTT: preemption_time arr_seq sched ptst
STT: scheduled_at sched jlp ptst

~ ~~ hep_job jlp j
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp, j': Job
SCHED2: scheduled_at sched jlp t
ptst: nat
IN1: ppt <= ptst <= t
PTT: preemption_time arr_seq sched ptst
STT: scheduled_at sched jlp ptst

hep_job jlp j
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
t: nat
pptt: ppt <= t
tt2: t < t2
j_nsched_pi: j \notin scheduled_jobs_at arr_seq sched t
jlp, j': Job
SCHED2: scheduled_at sched jlp t
ptst: nat
IN1: ppt <= ptst <= t
PTT: preemption_time arr_seq sched ptst
STT: scheduled_at sched jlp ptst

t1 <= ptst < t2
by lia. Qed. (** ... and then lift this fact to cumulative priority inversion. *)
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt

cumulative_priority_inversion arr_seq sched j t1 t2 <= cumulative_priority_inversion arr_seq sched j t1 ppt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt

cumulative_priority_inversion arr_seq sched j t1 t2 <= cumulative_priority_inversion arr_seq sched j t1 ppt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
LEQ: t1 <= t2

cumulative_priority_inversion arr_seq sched j t1 t2 <= cumulative_priority_inversion arr_seq sched j t1 ppt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
LEQ: t1 <= t2
LT: ppt < t2

cumulative_priority_inversion arr_seq sched j t1 t2 <= cumulative_priority_inversion arr_seq sched j t1 ppt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
LEQ: t1 <= t2
LT: ppt < t2
T: t1 <= job_arrival j

cumulative_priority_inversion arr_seq sched j t1 t2 <= cumulative_priority_inversion arr_seq sched j t1 ppt
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
LEQ: t1 <= t2
LT: ppt < t2
T: t1 <= job_arrival j

\sum_(t1 <= i < ppt) priority_inversion arr_seq sched j i + \sum_(ppt <= i < t2) priority_inversion arr_seq sched j i <= \sum_(t1 <= t < ppt) priority_inversion arr_seq sched j t
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
LEQ: t1 <= t2
LT: ppt < t2
T: t1 <= job_arrival j

\sum_(ppt <= i < t2) priority_inversion arr_seq sched j i == 0
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
LEQ: t1 <= t2
LT: ppt < t2
T: t1 <= job_arrival j
t: nat
GEt: ppt <= t
LEt: t < t2

priority_inversion arr_seq sched j t = 0
Task: TaskType
H: TaskCost Task
Job: JobType
H0: JobTask Job Task
H1: JobArrival Job
H2: JobCost Job
arr_seq: arrival_sequence Job
H_valid_arrivals: valid_arrival_sequence arr_seq
PState: ProcessorState Job
H_uni: uniprocessor_model PState
sched: schedule PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
H3: TaskMaxNonpreemptiveSegment Task
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_interval_prefix: busy_interval_prefix arr_seq sched j t1 t2
ppt: instant
H_preemption_point: preemption_time arr_seq sched ppt
H_after_t1: t1 <= ppt
LEQ: t1 <= t2
LT: ppt < t2
T: t1 <= job_arrival j
t: nat
GEt: ppt <= t
LEt: t < t2

~~ priority_inversion arr_seq sched j t
by apply/no_priority_inversion_after_preemption_point/andP. Qed. End NoPriorityInversionAfterPreemptionPoint. End PriorityInversionIsBounded.