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.busy_interval.pi. (** * Service Inversion Lemmas *) (** In this section, we prove a few lemmas about service inversion. *) Section ServiceInversion. (** Consider any type of jobs. *) Context {Job : JobType}. Context `{JobArrival Job}. Context `{JobCost Job}. (** Consider any kind of fully supply-consuming uniprocessor state model. *) Context `{PState : ProcessorState Job}. Hypothesis H_uniprocessor_proc_model : uniprocessor_model PState. Hypothesis H_consumed_supply_proc_model : fully_consuming_proc_model PState. (** Consider any arrival sequence with consistent, non-duplicate arrivals ... *) Variable arr_seq : arrival_sequence Job. Hypothesis H_valid_arrival_sequence : valid_arrival_sequence arr_seq. (** ... and any uni-processor schedule of this arrival sequence... *) Variable sched : schedule PState. Hypothesis H_jobs_come_from_arrival_sequence : jobs_come_from_arrival_sequence sched arr_seq. (** ... where jobs do not execute before their arrival or after completion. *) Hypothesis H_jobs_must_arrive_to_execute : jobs_must_arrive_to_execute sched. Hypothesis H_completed_jobs_dont_execute : completed_jobs_dont_execute sched. (** In this section, we prove a few basic lemmas about priority inversion. *) Section BasicLemmas. (** Consider an JLDP policy that indicates a higher-or-equal priority relation, and assume that the relation is reflexive. *) Context {JLDP : JLDP_policy Job}. Hypothesis H_priority_is_reflexive : reflexive_priorities JLDP. (** First, we show that a blackout at a time instant [t] implies that there is no service inversion at time [t]. *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP

forall (j : Job) (t : instant), is_blackout sched t -> ~~ service_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP

forall (j : Job) (t : instant), is_blackout sched t -> ~~ service_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
t: instant
SUP: is_blackout sched t

~~ service_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
t: instant
SUP: is_blackout sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j

False
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
t: instant
SUP: is_blackout sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j

has_supply sched t
by apply: receives_service_implies_has_supply. Qed. (** Similarly, there is no service inversion at an idle time instant. *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP

forall (j : Job) (t : instant), is_idle arr_seq sched t -> ~~ service_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP

forall (j : Job) (t : instant), is_idle arr_seq sched t -> ~~ service_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
t: instant
IDLE: is_idle arr_seq sched t

~~ ((j \notin served_jobs_at arr_seq sched t) && has (fun jlp : Job => ~~ hep_job_at t jlp j) (served_jobs_at arr_seq sched t))
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
t: instant
IDLE: is_idle arr_seq sched t

~~ has (fun jlp : Job => ~~ hep_job_at t jlp j) (served_jobs_at arr_seq sched t)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
t: instant
IDLE: is_idle arr_seq sched t
s: Job
A: s \in served_jobs_at arr_seq sched t

~~ ~~ hep_job_at t s j
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
t: instant
IDLE: is_idle arr_seq sched t
s: Job
A: receives_service_at sched s t

~~ ~~ hep_job_at t s j
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
t: instant
IDLE: is_idle arr_seq sched t
s: Job
A: receives_service_at sched s t

False
by apply/negP; first apply: no_service_received_when_idle => //. Qed. (** Next, we prove that if a job [j] receives service at time [t], job [j] does not incur service inversion at time [t]. *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP

forall (j : Job) (t : instant), receives_service_at sched j t -> ~~ service_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP

forall (j : Job) (t : instant), receives_service_at sched j t -> ~~ service_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
t: instant
RSERV: receives_service_at sched j t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j

False
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
t: instant
RSERV: receives_service_at sched j t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j
EQ: j = s

False
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
s: Job
RSERV: receives_service_at sched s t
IN: s \in served_jobs_at arr_seq sched t

hep_job_at t s s
by apply H_priority_is_reflexive. Qed. (** We show that cumulative service inversion received during an interval <<[t1, t2)>> can be split into the sum of cumulative service inversion <<[t1, t)>> and <<[t, t2)>> for any <<t2 \in [t1, t3]>>. *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP

forall (j : Job) (t1 t2 t : instant), t1 <= t -> t <= t2 -> cumulative_service_inversion arr_seq sched j t1 t2 = cumulative_service_inversion arr_seq sched j t1 t + cumulative_service_inversion arr_seq sched j t t2
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP

forall (j : Job) (t1 t2 t : instant), t1 <= t -> t <= t2 -> cumulative_service_inversion arr_seq sched j t1 t2 = cumulative_service_inversion arr_seq sched j t1 t + cumulative_service_inversion arr_seq sched j t t2
by move=> j t1 t2 t LE1 LE2; rewrite -big_cat_nat //=. Qed. (** Next, we show that cumulative service inversion on an interval <<[al, ar)>> is bounded by the cumulative service inversion on an interval <<[bl,br)>> if <<[al,ar)>> ⊆ <<[bl,br)>>. *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP

forall (j : Job) (al ar bl br : instant), bl <= al -> ar <= br -> cumulative_service_inversion arr_seq sched j al ar <= cumulative_service_inversion arr_seq sched j bl br
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP

forall (j : Job) (al ar bl br : instant), bl <= al -> ar <= br -> cumulative_service_inversion arr_seq sched j al ar <= cumulative_service_inversion arr_seq sched j bl br
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
al, ar, bl, br: instant
LE1: bl <= al
LE2: ar <= br

cumulative_service_inversion arr_seq sched j al ar <= cumulative_service_inversion arr_seq sched j bl br
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
al, ar, bl, br: instant
LE1: bl <= al
LE2: ar <= br

\sum_(al <= t < ar) service_inversion arr_seq sched j t <= \sum_(bl <= t < br) service_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
al, ar, bl, br: instant
LE1: bl <= al
LE2: ar <= br
NEQ1: al <= ar

\sum_(al <= t < ar) service_inversion arr_seq sched j t <= \sum_(bl <= t < br) service_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
j: Job
al, ar, bl, br: instant
LE1: bl <= al
LE2: ar <= br
NEQ1: al <= ar

\sum_(al <= t < ar) service_inversion arr_seq sched j t <= \sum_(bl <= i < al) service_inversion arr_seq sched j i + \sum_(al <= i < br) service_inversion arr_seq sched j i
by rewrite (big_cat_nat _ _ _ _ LE2) //= addnC -addnA leq_addr //=. Qed. End BasicLemmas. (** In the following section, we prove one rewrite rule about service inversion. *) Section ServiceInversionRewrite. (** Consider a reflexive JLDP policy. *) Context {JLDP : JLDP_policy Job}. Hypothesis H_priority_is_reflexive : reflexive_priorities JLDP. (** Consider a time instant [t] ... *) Variable t : instant. (** ... and assume that there is supply at [t]. *) Hypothesis H_supply : has_supply sched t. (** Consider two (not necessarily distinct) jobs [j] and [j'] and assume that job [j] is scheduled at time [t]. *) Variables j j' : Job. Hypothesis H_sched : scheduled_at sched j t. (** Then the predicate "is there service inversion for job [j'] at time [t]?" is equal to the predicate "is job [j] has lower priority than job [j']?" *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t

service_inversion arr_seq sched j' t = ~~ hep_job_at t j j'
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t

service_inversion arr_seq sched j' t = ~~ hep_job_at t j j'
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t

service_inversion arr_seq sched j' t = ~~ hep_job_at t j j'
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t

service_inversion arr_seq sched j' t -> ~~ hep_job_at t j j'
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t
~~ hep_job_at t j j' -> service_inversion arr_seq sched j' t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t

service_inversion arr_seq sched j' t -> ~~ hep_job_at t j j'
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t
IN: j' \notin served_jobs_at arr_seq sched t
s: Job
SE: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j'

~~ hep_job_at t j j'
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t
IN: j' \notin served_jobs_at arr_seq sched t
s: Job
SE: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j'
EQj: s = j

~~ hep_job_at t j j'
by subst.
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t

~~ hep_job_at t j j' -> service_inversion arr_seq sched j' t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t

~~ hep_job_at t j j' -> service_inversion arr_seq sched j' t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t
NHEP: ~~ hep_job_at t j j'

j' \notin served_jobs_at arr_seq sched t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t
NHEP: ~~ hep_job_at t j j'
has (fun jlp : Job => ~~ hep_job_at t jlp j') (served_jobs_at arr_seq sched t)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t
NHEP: ~~ hep_job_at t j j'

j' \notin served_jobs_at arr_seq sched t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t
SERV: j' \in served_jobs_at arr_seq sched t

hep_job_at t j j'
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t
SERV: j' \in served_jobs_at arr_seq sched t
EQj: j = j'

hep_job_at t j j'
by subst; apply H_priority_is_reflexive.
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t
NHEP: ~~ hep_job_at t j j'

has (fun jlp : Job => ~~ hep_job_at t jlp j') (served_jobs_at arr_seq sched t)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLDP: JLDP_policy Job
H_priority_is_reflexive: reflexive_priorities JLDP
t: instant
H_supply: has_supply sched t
j, j': Job
H_sched: scheduled_at sched j t
RSERV: receives_service_at sched j t
NHEP: ~~ hep_job_at t j j'

j \in served_jobs_at arr_seq sched t
by apply: receives_service_and_served_at_consistent. } Qed. End ServiceInversionRewrite. (** In the last section, we prove that cumulative service inversion is bounded by cumulative priority inversion. *) Section PriorityInversion. (** Consider a reflexive JLFP policy. Note that, unlike the other sections, this section assumes a JLFP policy. This is due to the fact that priority inversion is defined in terms of JLFP policies. This is not a fundamental assumption and may be relaxed in the future. *) Context {JLFP : JLFP_policy Job}. Hypothesis H_priority_is_reflexive : reflexive_job_priorities JLFP. (** We prove that service inversion implies priority inversion ... *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP

forall (j : Job) (t : instant), service_inversion arr_seq sched j t -> priority_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP

forall (j : Job) (t : instant), service_inversion arr_seq sched j t -> priority_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant

service_inversion arr_seq sched j t -> priority_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j

j \notin scheduled_jobs_at arr_seq sched t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j
has (fun jlp : Job => ~~ hep_job jlp j) (scheduled_jobs_at arr_seq sched t)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j

j \notin scheduled_jobs_at arr_seq sched t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j
INj: scheduled_at sched j t

False
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j
INj: scheduled_at sched j t

s = j
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j
INj: scheduled_at sched j t
EQ: s = j
False
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j
INj: scheduled_at sched j t

s = j
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j
INj: scheduled_at sched j t

scheduled_at sched s t
by eapply service_at_implies_scheduled_at, served_at_and_receives_service_consistent.
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j
INj: scheduled_at sched j t
EQ: s = j

False
by subst; move: LP => /negP LP; apply: LP; apply H_priority_is_reflexive.
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j

has (fun jlp : Job => ~~ hep_job jlp j) (scheduled_jobs_at arr_seq sched t)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j

has (fun jlp : Job => ~~ hep_job jlp j) (scheduled_jobs_at arr_seq sched t)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j

s \in scheduled_jobs_at arr_seq sched t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t: instant
NSERV: j \notin served_jobs_at arr_seq sched t
s: Job
IN: s \in served_jobs_at arr_seq sched t
LP: ~~ hep_job_at t s j

scheduled_at sched s t
by apply service_at_implies_scheduled_at; apply: served_at_and_receives_service_consistent. } Qed. (** ... and, as a corollary, it is easy to see that cumulative service inversion is bounded by cumulative priority inversion. *)
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP

forall (j : Job) (t1 t2 : instant), cumulative_service_inversion arr_seq sched j t1 t2 <= cumulative_priority_inversion arr_seq sched j t1 t2
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP

forall (j : Job) (t1 t2 : instant), cumulative_service_inversion arr_seq sched j t1 t2 <= cumulative_priority_inversion arr_seq sched j t1 t2
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t1, t2: instant
t: nat

service_inversion arr_seq sched j t <= priority_inversion arr_seq sched j t
Job: JobType
H: JobArrival Job
H0: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
H_jobs_come_from_arrival_sequence: jobs_come_from_arrival_sequence sched arr_seq
H_jobs_must_arrive_to_execute: jobs_must_arrive_to_execute sched
H_completed_jobs_dont_execute: completed_jobs_dont_execute sched
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
j: Job
t1, t2: instant
t: nat
L: forall a b : bool, (a -> b) -> a <= b

service_inversion arr_seq sched j t <= priority_inversion arr_seq sched j t
by apply L, service_inv_implies_priority_inv. Qed. End PriorityInversion. End ServiceInversion. (** In the following, we prove that the cumulative service inversion in a busy interval prefix is bounded. *) Section ServiceInversionIsBounded. (** Consider any type of tasks ... *) Context {Task : TaskType}. Context `{TaskCost Task}. Context `{TaskMaxNonpreemptiveSegment 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 kind of fully supply-consuming unit-supply uniprocessor state model. *) Context `{PState : ProcessorState Job}. Hypothesis H_uniprocessor_proc_model : uniprocessor_model PState. Hypothesis H_unit_supply_proc_model : unit_supply_proc_model PState. Hypothesis H_consumed_supply_proc_model : fully_consuming_proc_model PState. (** Consider an 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 any arrival sequence with consistent, non-duplicate arrivals ... *) Variable arr_seq : arrival_sequence Job. Hypothesis H_valid_arrival_sequence : valid_arrival_sequence arr_seq. (** ... and any uni-processor schedule of this arrival sequence. *) Variable sched : schedule PState. (** Next, allow for any work-bearing notion of job readiness ... *) Context `{!JobReady Job PState}. Hypothesis H_job_ready : work_bearing_readiness arr_seq sched. (** ... and assume that the schedule is valid. *) Hypothesis H_sched_valid : valid_schedule sched arr_seq. (** In addition, we assume the existence of a function mapping jobs to their preemption points ... *) Context `{JobPreemptable Job}. (** ... and assume that it defines a valid preemption model with bounded non-preemptive segments. *) Hypothesis H_valid_preemption_model : valid_preemption_model arr_seq sched. Hypothesis H_valid_model_with_bounded_nonpreemptive_segments : valid_model_with_bounded_nonpreemptive_segments arr_seq sched. (** Next, we assume that the schedule respects the scheduling policy. *) Hypothesis H_respects_policy : respects_JLFP_policy_at_preemption_point arr_seq sched JLFP. (** In the following section, we prove that cumulative service inversion in a busy-interval prefix is necessarily caused by one lower-priority job. *) Section CumulativeServiceInversionFromOneJob. (** Consider any job [j] with a positive job cost. *) Variable j : Job. Hypothesis H_j_arrives : arrives_in arr_seq j. Hypothesis H_job_cost_positive : job_cost_positive j. (** Let <[t1, t2)>> be a busy-interval prefix. *) Variable t1 t2 : instant. Hypothesis H_busy_prefix : busy_interval_prefix arr_seq sched j t1 t2. (** Consider a time instant [t : t <= t2] such that ... *) Variable t : instant. Hypothesis H_t_le_t2 : t <= t2. (** ... the cumulative service inversion is positive in <<[t1, t)>>. *) Hypothesis H_service_inversion_positive : 0 < cumulative_service_inversion arr_seq sched j t1 t. (** First, note that there is a lower-priority job that receives service at some time during the time interval <<[t1, t)>>. *)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t

exists (jlp : Job) (to : instant), t1 <= to < t /\ ~~ hep_job jlp j /\ receives_service_at sched jlp to
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t

exists (jlp : Job) (to : instant), t1 <= to < t /\ ~~ hep_job jlp j /\ receives_service_at sched jlp to
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
t': Datatypes_nat__canonical__eqtype_Equality
IN: t' \in index_iota t1 t
POS: 0 < service_inversion arr_seq sched j t'

exists (jlp : Job) (to : instant), t1 <= to < t /\ ~~ hep_job jlp j /\ receives_service_at sched jlp to
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
t': Datatypes_nat__canonical__eqtype_Equality
IN: t1 <= t' < t
POS: service_inversion arr_seq sched j t'

exists (jlp : Job) (to : instant), t1 <= to < t /\ ~~ hep_job jlp j /\ receives_service_at sched jlp to
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
t': Datatypes_nat__canonical__eqtype_Equality
IN: t1 <= t' < t
NIN: j \notin served_jobs_at arr_seq sched t'
jlp: Job
INlp: jlp \in served_jobs_at arr_seq sched t'
LP: ~~ hep_job_at t' jlp j

exists (jlp : Job) (to : instant), t1 <= to < t /\ ~~ hep_job jlp j /\ receives_service_at sched jlp to
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
t': Datatypes_nat__canonical__eqtype_Equality
IN: t1 <= t' < t
NIN: j \notin served_jobs_at arr_seq sched t'
jlp: Job
INlp: jlp \in served_jobs_at arr_seq sched t'
LP: ~~ hep_job_at t' jlp j

t1 <= t' < t /\ ~~ hep_job jlp j /\ receives_service_at sched jlp t'
by rewrite IN LP. Qed. (** Then we prove that the service inversion incurred by job [j] can only be caused by _one_ lower priority job. *)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t

exists jlp : Job, job_arrival jlp < t1 /\ ~~ hep_job jlp j /\ cumulative_service_inversion arr_seq sched j t1 t = service_during sched jlp t1 t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t

exists jlp : Job, job_arrival jlp < t1 /\ ~~ hep_job jlp j /\ cumulative_service_inversion arr_seq sched j t1 t = service_during sched jlp t1 t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to

exists jlp : Job, job_arrival jlp < t1 /\ ~~ hep_job jlp j /\ cumulative_service_inversion arr_seq sched j t1 t = service_during sched jlp t1 t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to

job_arrival jlp < t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
cumulative_service_inversion arr_seq sched j t1 t = service_during sched jlp t1 t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to

job_arrival jlp < t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to

t1 <= ?Goal0 < t2
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
scheduled_at sched jlp ?Goal0
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to

t1 <= ?Goal0 < t2
by instantiate (1 := to); lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to

scheduled_at sched jlp to
by apply service_at_implies_scheduled_at.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to

cumulative_service_inversion arr_seq sched j t1 t = service_during sched jlp t1 t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t

service_inversion arr_seq sched j t' == service_at sched jlp t'
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0

service_inversion arr_seq sched j t' == service_at sched jlp t'
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
POS: service_at sched jlp t' = 1
service_inversion arr_seq sched j t' == service_at sched jlp t'
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0

service_inversion arr_seq sched j t' == service_at sched jlp t'
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j

jlp = joo
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j
EQ: jlp = joo
False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j

jlp = joo
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j

t1 <= ?Goal1 < t2
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j
scheduled_at sched jlp ?Goal1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j
t1 <= ?Goal2 < t2
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j
scheduled_at sched joo ?Goal2
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j

t1 <= ?Goal1 < t2
by instantiate (1 := to); lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j

scheduled_at sched jlp to
by apply service_at_implies_scheduled_at.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j

t1 <= ?Goal1 < t2
by instantiate (1 := t'); lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j

scheduled_at sched joo t'
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j

0 < service_at sched joo t'
by apply: served_at_and_receives_service_consistent.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
joo: Job
SERVoo: joo \in served_jobs_at arr_seq sched t'
LPoo: ~~ hep_job_at t' joo j
EQ: jlp = joo

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
LPoo: ~~ hep_job_at t' jlp j
SERVoo: jlp \in served_jobs_at arr_seq sched t'

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
ZERO: service_at sched jlp t' = 0
LPoo: ~~ hep_job_at t' jlp j
SERVoo: receives_service_at sched jlp t'

False
by move: SERVoo; rewrite /receives_service_at ZERO.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
POS: service_at sched jlp t' = 1

service_inversion arr_seq sched j t' == service_at sched jlp t'
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
POS: service_at sched jlp t' = 1

j \notin served_jobs_at arr_seq sched t'
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
POS: service_at sched jlp t' = 1
has (fun jlp : Job => ~~ hep_job_at t' jlp j) (served_jobs_at arr_seq sched t')
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
POS: service_at sched jlp t' = 1

j \notin served_jobs_at arr_seq sched t'
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
POS: service_at sched jlp t' = 1
IN: receives_service_at sched j t'

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
POS: service_at sched jlp t' = 1
IN: receives_service_at sched j t'
EQ: j = jlp

False
by subst jlp; move: LP => /negP LP; apply: LP; apply H_priority_is_reflexive.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
POS: service_at sched jlp t' = 1

has (fun jlp : Job => ~~ hep_job_at t' jlp j) (served_jobs_at arr_seq sched t')
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
POS: service_at sched jlp t' = 1

jlp \in served_jobs_at arr_seq sched t'
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_job_cost_positive: job_cost_positive j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
H_service_inversion_positive: 0 < cumulative_service_inversion arr_seq sched j t1 t
jlp: Job
to: instant
NEQ: t1 <= to < t
LP: ~~ hep_job jlp j
SERV: receives_service_at sched jlp to
t': Datatypes_nat__canonical__eqtype_Equality
NEQt': t1 <= t' < t
POS: service_at sched jlp t' = 1

receives_service_at sched jlp t'
by rewrite /receives_service_at POS. Qed. End CumulativeServiceInversionFromOneJob. (** In this section, we prove that, given a job [j] with a busy interval prefix <<[t1, t2)>> and a lower-priority job [jlp], the service of [jlp] within the busy interval prefix is bounded by the maximum non-preemptive segment of job [jlp]. *) Section ServiceOfLowPriorityJobIsBounded. (** Consider an arbitrary job [j] with positive cost ... *) Variable j : Job. Hypothesis H_j_arrives : arrives_in arr_seq j. Hypothesis H_j_job_cost_positive : job_cost_positive j. (** ... and a lower-priority job [jlp]. *) Variable jlp : Job. Hypothesis H_jlp_arrives : arrives_in arr_seq jlp. Hypothesis H_jlp_lp : ~~ hep_job jlp j. (** Let <<[t1, t2)>> be a busy interval prefix of job [j]. *) Variable t1 t2 : instant. Hypothesis H_busy_prefix : busy_interval_prefix arr_seq sched j t1 t2. (** First, we consider a scenario when there is no preemption time inside of the busy interval prefix _but_ there is a time instant where [jlp] is scheduled. In this case, the cumulative service inversion of job [j] in the time interval <<[t1, t2)>> is bounded by the total service of job [jlp] received in the interval <<[t1, t2)>>. *)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2

(forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t) -> (exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t) -> cumulative_service_inversion arr_seq sched j t1 t2 <= service_during sched jlp t1 t2
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2

(forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t) -> (exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t) -> cumulative_service_inversion arr_seq sched j t1 t2 <= service_during sched jlp t1 t2
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
SCHED: exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t

cumulative_service_inversion arr_seq sched j t1 t2 <= service_during sched jlp t1 t2
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
SCHED: exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
t: Datatypes_nat__canonical__eqtype_Equality

t \in index_iota t1 t2 -> service_inversion arr_seq sched j t <= service_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
SCHED: exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2

service_inversion arr_seq sched j t <= service_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
SCHED: exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
F: forall (b : bool) (n : nat), (b -> 0 < n) -> b <= n

service_inversion arr_seq sched j t <= service_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
SCHED: exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j

0 < service_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
SCHED: exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j

h = jlp
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
SCHED: exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j

scheduled_at ?Goal h ?Goal0
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
SCHED: exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j
scheduled_at ?Goal jlp ?Goal0
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
SCHED: exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j

scheduled_at ?Goal h ?Goal0
by apply served_at_and_receives_service_consistent in IN; apply: service_at_implies_scheduled_at.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
SCHED: exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j

scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
SCHED: exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j

scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j
t': nat
LE': t1 <= t'
LT': t' < t2
SCHED: scheduled_at sched jlp t'

scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j
t': nat
LE': t1 <= t'
LT': t' < t2
SCHED: scheduled_at sched jlp t'

t1 <= t' < t2
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j
t': nat
LE': t1 <= t'
LT': t' < t2
SCHED: scheduled_at sched jlp t'
t1 <= t < t2
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j
t': nat
LE': t1 <= t'
LT': t' < t2
SCHED: scheduled_at sched jlp t'

t1 <= t' < t2
by generalize dependent t'; clear; lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
t: Datatypes_nat__canonical__eqtype_Equality
LE: t1 <= t
LT: t < t2
ZE: j \notin served_jobs_at arr_seq sched t
h: Job
IN: h \in served_jobs_at arr_seq sched t
LPh: ~~ hep_job_at t h j
t': nat
LE': t1 <= t'
LT': t' < t2
SCHED: scheduled_at sched jlp t'

t1 <= t < t2
by generalize dependent t; clear; lia. } Qed. (** In this section, we assume that [jlp] is scheduled inside of the busy interval prefix and prove that its service is bounded by [jlp]'s maximum non-preemptive segment. *) Section ServiceOfLPJobIsBounded. (** Consider an arbitrary time instant [t] such that [t <= t2]. *) Variables t : instant. Hypothesis H_t_le_t2 : t <= t2. (** Consider a second time instant [st] such that [t1 <= st < t] and [jlp] is scheduled at time [st]. *) Variable st : instant. Hypothesis H_t1_le_st_lt_t : t1 <= st < t. Hypothesis H_jlp_sched : scheduled_at sched jlp st. (** Consider a preemption point [σ] of job [jlp] such that ... *) Variable σ : duration. Hypothesis H_σ_is_pt : job_preemptable jlp σ. (** ... [σ] is greater than or equal to the service of [jlp] at time [t1] but exceeds the service by at most [job_max_nonpreemptive_segment jlp - ε]. *) Hypothesis H_σ_constrained : service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - ε). (** Next, we perform case analysis on whether job [jlp] has reached [σ] units of service by time [t]. *) (** First, assume that the service of [jlp] at time [t] is smaller than [σ]. In this case, it is easy to see from the hypothesis [H_σ_constrained] that the service received by [jlp] within time interval <<[t1, t)>> is bounded by [job_max_nonpreemptive_segment jlp - ε]. *)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

service sched jlp t < σ -> service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

service sched jlp t < σ -> service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
B: service sched jlp t < σ
CO: job_max_nonpreemptive_segment jlp - 1 < service_during sched jlp t1 t

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
B: service sched jlp t < σ
CO: job_max_nonpreemptive_segment jlp - 1 < service_during sched jlp t1 t
E: σ <= service sched jlp t1 + service_during sched jlp t1 t

False
by move: B E; rewrite service_cat /service; lia. Qed. (** Next, assume that [σ <= service sched jlp t]. In this case, we can show that [jlp] is preempted after it reaches [σ] units of service and hence, again, the service during <<[t1, t)>> is bounded by [job_max_nonpreemptive_segment jlp - ε]. *)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

σ <= service sched jlp t -> service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

σ <= service sched jlp t -> service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

σ <= service sched jlp t -> service sched jlp t1 + service_during sched jlp t1 t <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
EQ: σ = service sched jlp t

service sched jlp t1 + service_during sched jlp t1 t <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
service sched jlp t1 + service_during sched jlp t1 t <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
EQ: σ = service sched jlp t

service sched jlp t1 + service_during sched jlp t1 t <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
by rewrite service_cat; [ rewrite -EQ; move: H_σ_constrained => /andP [A B] | lia].
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t

service sched jlp t1 + service_during sched jlp t1 t <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t

exists pt : nat, pt < t /\ service sched jlp pt = σ
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t

exists pt : nat, pt < t /\ service sched jlp pt = σ
by apply exists_intermediate_service => //; apply unit_supply_is_unit_service.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ

~~ preemption_time arr_seq sched t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ

~~ preemption_time arr_seq sched t1
by eapply lower_priority_job_scheduled_implies_no_preemption_time with (t1 := t1) (t2:= t2) (t := st) (jlp := jlp) (j := j)=> //; lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1

t1 <= pt
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: t1 <= pt
False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1

t1 <= pt
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1

service sched jlp t1 = σ
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ
False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1

service sched jlp t1 = σ
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1

σ <= service sched jlp t1
by rewrite -EQ; apply: service_monotonic; lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ

preemption_time arr_seq sched t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ
PT: preemption_time arr_seq sched t1
False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ

preemption_time arr_seq sched t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ

match scheduled_job_at arr_seq sched t1 with | Some j => job_preemptable j (service sched j t1) | None => true end
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ

scheduled_job_at arr_seq sched t1 = Some jlp
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ
job_preemptable jlp (service sched jlp t1)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ

scheduled_job_at arr_seq sched t1 = Some jlp
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ

scheduled_at sched jlp t1
eapply lower_priority_job_continuously_scheduled with (t1 := t1) (t2:= t2) (t := st) (jlp := jlp) (j := j)=> //=; lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ

job_preemptable jlp (service sched jlp t1)
by rewrite EQ1.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: pt < t1
EQ1: service sched jlp t1 = σ
PT: preemption_time arr_seq sched t1

False
by rewrite PT in NPT.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: t1 <= pt

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: t1 <= pt
t': nat
NEQ': pt <= t' < t
SERV': service sched jlp t' = σ
SCHED': scheduled_at sched jlp t'

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: t1 <= pt
t': nat
NEQ': pt <= t' < t
SERV': service sched jlp t' = σ
SCHED': scheduled_at sched jlp t'

preemption_time arr_seq sched t'
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: t1 <= pt
t': nat
NEQ': pt <= t' < t
SERV': service sched jlp t' = σ
SCHED': scheduled_at sched jlp t'
PT: preemption_time arr_seq sched t'
False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: t1 <= pt
t': nat
NEQ': pt <= t' < t
SERV': service sched jlp t' = σ
SCHED': scheduled_at sched jlp t'

preemption_time arr_seq sched t'
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: t1 <= pt
t': nat
NEQ': pt <= t' < t
SERV': service sched jlp t' = σ

scheduled_job_at arr_seq sched t' == Some jlp -> preemption_time arr_seq sched t'
by rewrite /preemption_time; move => /eqP ->; rewrite SERV'.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: t1 <= pt
t': nat
NEQ': pt <= t' < t
SERV': service sched jlp t' = σ
SCHED': scheduled_at sched jlp t'
PT: preemption_time arr_seq sched t'

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: t1 <= pt
t': nat
NEQ': pt <= t' < t
SERV': service sched jlp t' = σ
SCHED': scheduled_at sched jlp t'
PT: preemption_time arr_seq sched t'

hep_job jlp j
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
GT: σ < service sched jlp t
pt: nat
LTpt: pt < t
EQ: service sched jlp pt = σ
NPT: ~~ preemption_time arr_seq sched t1
LEpt: t1 <= pt
t': nat
NEQ': pt <= t' < t
SERV': service sched jlp t' = σ
SCHED': scheduled_at sched jlp t'
PT: preemption_time arr_seq sched t'

t1 <= t' < t2
by move: NEQ' LEpt H_t_le_t2; clear; lia. Qed. (** Either way, the service of job [jlp] during the time interval <<[t1, t)>> is bounded by [job_max_nonpreemptive_segment jlp - ε]. *)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)

service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
S: service sched jlp t < σ

service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
B: σ <= service sched jlp t
service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
S: service sched jlp t < σ

service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
by apply small_service_implies_bounded_service.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: instant
H_t_le_t2: t <= t2
st: instant
H_t1_le_st_lt_t: t1 <= st < t
H_jlp_sched: scheduled_at sched jlp st
σ: duration
H_σ_is_pt: job_preemptable jlp σ
H_σ_constrained: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
B: σ <= service sched jlp t

service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
by apply big_service_implies_bounded_service. Qed. End ServiceOfLPJobIsBounded. (** Note that the preemption point [σ] assumed in the previous section always exists. *)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2

exists σ : nat, service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1) /\ job_preemptable jlp σ
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2

exists σ : nat, service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1) /\ job_preemptable jlp σ
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
EXPP: nonpreemptive_regions_have_bounded_length jlp

exists σ : nat, service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1) /\ job_preemptable jlp σ
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
EXPP: nonpreemptive_regions_have_bounded_length jlp

0 <= service sched jlp t1 <= job_cost jlp
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
EXPP: nonpreemptive_regions_have_bounded_length jlp
T: 0 <= service sched jlp t1 <= job_cost jlp
exists σ : nat, service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1) /\ job_preemptable jlp σ
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
EXPP: nonpreemptive_regions_have_bounded_length jlp

0 <= service sched jlp t1 <= job_cost jlp
by apply/andP; split=> [//|]; apply service_at_most_cost, unit_supply_is_unit_service => //.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
EXPP: nonpreemptive_regions_have_bounded_length jlp
T: 0 <= service sched jlp t1 <= job_cost jlp

exists σ : nat, service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1) /\ job_preemptable jlp σ
by move: (EXPP (service sched jlp t1) T) => [pt [NEQ2 PP]]; exists pt. Qed. (** We strengthen the lemma [lp_job_bounded_service_aux] by removing the assumption that [jlp] is scheduled somewhere in the busy interval prefix. *)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2

forall t : nat, t <= t2 -> service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2

forall t : nat, t <= t2 -> service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2

service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t

service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t
st: nat
NEQ: t1 <= st < t
SCHED: scheduled_at sched jlp st

service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t
st: nat
NEQ: t1 <= st < t
SCHED: scheduled_at sched jlp st
σ: nat
EX: service sched jlp t1 <= σ <= service sched jlp t1 + (job_max_nonpreemptive_segment jlp - 1)
PTσ: job_preemptable jlp σ

service_during sched jlp t1 t <= job_max_nonpreemptive_segment jlp - 1
by apply: lp_job_bounded_service_aux. Qed. (** Finally, we remove [jlp] from the RHS of the inequality by taking the maximum over all jobs that arrive before time [t1]. *)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2

forall t : nat, t <= t2 -> service_during sched jlp t1 t <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2

forall t : nat, t <= t2 -> service_during sched jlp t1 t <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2

service_during sched jlp t1 t <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t

service_during sched jlp t1 t <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t
st: nat
NEQ: t1 <= st < t
SCHED: scheduled_at sched jlp st

service_during sched jlp t1 t <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t
st: nat
NEQ: t1 <= st < t
SCHED: scheduled_at sched jlp st

job_max_nonpreemptive_segment jlp - 1 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t
st: nat
NEQ: t1 <= st < t
SCHED: scheduled_at sched jlp st

jlp \in arrivals_before arr_seq t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t
st: nat
NEQ: t1 <= st < t
SCHED: scheduled_at sched jlp st
~~ hep_job jlp j && (0 < job_cost jlp)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t
st: nat
NEQ: t1 <= st < t
SCHED: scheduled_at sched jlp st

jlp \in arrivals_before arr_seq t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t
st: nat
NEQ: t1 <= st < t
SCHED: scheduled_at sched jlp st

arrived_between jlp 0 t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t
st: nat
NEQ: t1 <= st < t
SCHED: scheduled_at sched jlp st

job_arrival jlp < t1
by (apply: low_priority_job_arrives_before_busy_interval_prefix; try apply: H_busy_prefix) => //; lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t
st: nat
NEQ: t1 <= st < t
SCHED: scheduled_at sched jlp st

~~ hep_job jlp j && (0 < job_cost jlp)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
j: Job
H_j_arrives: arrives_in arr_seq j
H_j_job_cost_positive: job_cost_positive j
jlp: Job
H_jlp_arrives: arrives_in arr_seq jlp
H_jlp_lp: ~~ hep_job jlp j
t1, t2: instant
H_busy_prefix: busy_interval_prefix arr_seq sched j t1 t2
t: nat
LT: t <= t2
POS: 0 < service_during sched jlp t1 t
st: nat
NEQ: t1 <= st < t
SCHED: scheduled_at sched jlp st

~~ hep_job jlp j && (0 < job_cost jlp)
by rewrite H_jlp_lp andTb; apply: scheduled_implies_positive_cost. } Qed. End ServiceOfLowPriorityJobIsBounded. (** Let [tsk] be any task to be analyzed. *) Variable tsk : Task. (** Let [blocking_bound] be a bound on the maximum length of a nonpreemptive segment of a lower-priority job. *) Variable blocking_bound : duration -> duration. (** We show that, if the maximum length of a nonpreemptive segment is bounded by the blocking bound, ... *) Hypothesis H_priority_inversion_is_bounded_by_blocking : forall j t1 t2, arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1). (** ... then the service inversion incurred by any job is bounded by the blocking bound. *)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)

service_inversion_is_bounded_by arr_seq sched tsk blocking_bound
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)

service_inversion_is_bounded_by arr_seq sched tsk blocking_bound
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2

cumulative_service_inversion arr_seq sched j t1 t2 <= blocking_bound (job_arrival j - t1)
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
CPI: cumulative_priority_inversion arr_seq sched j t1 t2 = 0

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
CPI: cumulative_priority_inversion arr_seq sched j t1 t2 = 0

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
by rewrite (leqRW (cumul_service_inv_le_cumul_priority_inv _ _ _ _ _ _ _ _ _ _)) //.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t

service_during sched jlp t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t
exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t

service_during sched jlp t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
by apply: lp_job_bounded_service_max.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
NPT: forall t : nat, t1 <= t < t2 -> ~~ preemption_time arr_seq sched t

exists t : nat, t1 <= t < t2 /\ scheduled_at sched jlp t
by exists t1; split => //; apply/andP; split; [ | move: BUSY => [T _]]; lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

cumulative_service_inversion arr_seq sched j t1 t2 <= cumulative_service_inversion arr_seq sched j t1 pt
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
LEQ: cumulative_service_inversion arr_seq sched j t1 t2 <= cumulative_service_inversion arr_seq sched j t1 pt
cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

cumulative_service_inversion arr_seq sched j t1 t2 <= cumulative_service_inversion arr_seq sched j t1 pt
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
LE: t2 <= pt

cumulative_service_inversion arr_seq sched j t1 t2 <= cumulative_service_inversion arr_seq sched j t1 pt
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
WF: pt < t2
cumulative_service_inversion arr_seq sched j t1 t2 <= cumulative_service_inversion arr_seq sched j t1 pt
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
LE: t2 <= pt

cumulative_service_inversion arr_seq sched j t1 t2 <= cumulative_service_inversion arr_seq sched j t1 pt
by rewrite (leqRW (service_inversion_widen arr_seq sched j t1 _ _ pt _ _ )) => //.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
WF: pt < t2

cumulative_service_inversion arr_seq sched j t1 t2 <= cumulative_service_inversion arr_seq sched j t1 pt
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
WF: pt < t2

cumulative_service_inversion arr_seq sched j t1 t2 <= cumulative_service_inversion arr_seq sched j t1 pt
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
WF: pt < t2

cumulative_priority_inversion arr_seq sched j pt t2 == 0
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
WF: pt < t2
t: nat
NEQ3: pt <= t < t2

priority_inversion arr_seq sched j t == 0
by rewrite eqb0; apply: no_priority_inversion_after_preemption_point => //; lia. }
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
LEQ: cumulative_service_inversion arr_seq sched j t1 t2 <= cumulative_service_inversion arr_seq sched j t1 pt

cumulative_service_inversion arr_seq sched j t1 t2 <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

service_during sched jlp t1 pt <= max_lp_nonpreemptive_segment arr_seq j t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
forall t : nat, t1 <= t < pt -> ~~ preemption_time arr_seq sched t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
exists t : nat, t1 <= t < pt /\ scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

service_during sched jlp t1 pt <= max_lp_nonpreemptive_segment arr_seq j t1
by apply: lp_job_bounded_service_max => //; lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

forall t : nat, t1 <= t < pt -> ~~ preemption_time arr_seq sched t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
exists t : nat, t1 <= t < pt /\ scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

forall t : nat, t1 <= t < pt -> ~~ preemption_time arr_seq sched t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'
t: nat
NEQ1: t1 <= t
NEQ2: t < pt
PTt: preemption_time arr_seq sched t

False
by specialize (MIN _ NEQ1 PTt); move: MIN NEQ2; clear; lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

exists t : nat, t1 <= t < pt /\ scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

exists t : nat, t1 <= t < pt /\ scheduled_at sched jlp t
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

t1 <= t1 < pt
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
pt: nat
LE1: t1 <= pt
LE2: pt < t2
PT: preemption_time arr_seq sched pt
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> pt <= t'

t1 < pt
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
LE: t1 <= t1
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> t1 <= t'
PT: preemption_time arr_seq sched t1
LE2: t1 < t2
LE1: t1 <= t1

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
LE: t1 <= t1
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> t1 <= t'
PT: preemption_time arr_seq sched t1
LE2: t1 < t2
LE1: t1 <= t1
PI: ~~ preemption_time arr_seq sched t1

False
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
LE: t1 <= t1
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> t1 <= t'
PT: preemption_time arr_seq sched t1
LE2: t1 < t2
LE1: t1 <= t1
t1 <= t1 < t2
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
LE: t1 <= t1
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> t1 <= t'
PT: preemption_time arr_seq sched t1
LE2: t1 < t2
LE1: t1 <= t1
t1 <= t1 <= t1
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
LE: t1 <= t1
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> t1 <= t'
PT: preemption_time arr_seq sched t1
LE2: t1 < t2
LE1: t1 <= t1
PI: ~~ preemption_time arr_seq sched t1

False
by rewrite PT in PI.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
LE: t1 <= t1
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> t1 <= t'
PT: preemption_time arr_seq sched t1
LE2: t1 < t2
LE1: t1 <= t1

t1 <= t1 < t2
by move: LE2; clear; lia.
Task: TaskType
H: TaskCost Task
H0: TaskMaxNonpreemptiveSegment Task
Job: JobType
H1: JobTask Job Task
H2: JobArrival Job
H3: JobCost Job
PState: ProcessorState Job
H_uniprocessor_proc_model: uniprocessor_model PState
H_unit_supply_proc_model: unit_supply_proc_model PState
H_consumed_supply_proc_model: fully_consuming_proc_model PState
JLFP: JLFP_policy Job
H_priority_is_reflexive: reflexive_job_priorities JLFP
H_priority_is_transitive: transitive_job_priorities JLFP
arr_seq: arrival_sequence Job
H_valid_arrival_sequence: valid_arrival_sequence arr_seq
sched: schedule PState
JobReady0: JobReady Job PState
H_job_ready: work_bearing_readiness arr_seq sched
H_sched_valid: valid_schedule sched arr_seq
H4: JobPreemptable Job
H_valid_preemption_model: valid_preemption_model arr_seq sched
H_valid_model_with_bounded_nonpreemptive_segments: valid_model_with_bounded_nonpreemptive_segments arr_seq sched
H_respects_policy: respects_JLFP_policy_at_preemption_point arr_seq sched JLFP
tsk: Task
blocking_bound: duration -> duration
H_priority_inversion_is_bounded_by_blocking: forall (j : Job) (t1 t2 : instant), arrives_in arr_seq j -> job_of_task tsk j -> busy_interval_prefix arr_seq sched j t1 t2 -> max_lp_nonpreemptive_segment arr_seq j t1 <= blocking_bound (job_arrival j - t1)
j: Job
ARR: arrives_in arr_seq j
TSK: job_of_task tsk j
POS: 0 < job_cost j
t1, t2: instant
BUSY: busy_interval_prefix arr_seq sched j t1 t2
PI: priority_inversion arr_seq sched j t1
jlp: Job
INjlp: jlp \in scheduled_jobs_at arr_seq sched t1
LPjlp: ~~ hep_job jlp j
SCHEDjlp: scheduled_at sched jlp t1
LE: t1 <= t1
MIN: forall t' : nat, t1 <= t' -> preemption_time arr_seq sched t' -> t1 <= t'
PT: preemption_time arr_seq sched t1
LE2: t1 < t2
LE1: t1 <= t1

t1 <= t1 <= t1
by clear; lia. } } } Qed. End ServiceInversionIsBounded.