Built with Alectryon, running Coq+SerAPI v8.20.0+0.20.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]
Serlib plugin: coq-elpi.elpi is not available: serlib support is missing. Incremental checking for commands in this plugin will be impacted.
[Loading ML file coq-elpi.elpi ... done]
[Loading ML file zify_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_core_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.definitions.work_bearing_readiness. Require Export prosa.analysis.facts.behavior.completion. Require Export prosa.analysis.facts.model.task_arrivals. (** Throughout this file, we assume the sequential task readiness model, which means that a job is ready to execute only if all prior jobs of the same task have completed. *) Require Export prosa.model.readiness.sequential. (** In this section, we show some useful properties of the sequential task readiness model. *) Section SequentialTasksReadiness. (** Consider any type of job associated with any type of tasks ... *) Context {Job : JobType}. Context {Task : TaskType}. Context `{JobTask Job Task}. Context `{JobArrival Job}. Context `{JobCost Job}. (** ... and any kind of processor state. *) Context {PState : ProcessorState Job}. (** Consider any arrival sequence with consistent arrivals. *) Variable arr_seq : arrival_sequence Job. Hypothesis H_arrival_times_are_consistent : consistent_arrival_times arr_seq. (** Recall that we assume sequential tasks. *) #[local] Instance sequential_readiness_instance : JobReady Job PState := sequential_ready_instance arr_seq. (** First, we observe that the sequential readiness model indeed lives up to its name. *)
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq

sequential_readiness sequential_readiness_instance arr_seq
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq

sequential_readiness sequential_readiness_instance arr_seq
by move=> sched j t; rewrite /job_ready //= => /andP [_ PRIO_COMP]. Qed. (** Consider any valid schedule of [arr_seq]. *) Variable sched : schedule PState. Hypothesis H_valid_schedule : valid_schedule sched arr_seq. (** Consider an FP policy that indicates a reflexive higher-or-equal priority relation. *) Context {FP : FP_policy Task}. Hypothesis H_priority_is_reflexive : reflexive_task_priorities FP. (** We show that the sequential readiness model is non-clairvoyant. *)
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP

nonclairvoyant_readiness sequential_readiness_instance
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP

nonclairvoyant_readiness sequential_readiness_instance
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
sched1, sched2: schedule PState
j: Job
h: instant
ID: identical_prefix sched1 sched2 h
t: nat
LE: t <= h

pending sched1 j t && prior_jobs_complete arr_seq sched1 j t = pending sched2 j t && prior_jobs_complete arr_seq sched2 j t
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
sched1, sched2: schedule PState
j: Job
h: instant
ID: identical_prefix sched1 sched2 h
t: nat
LE: t <= h

pending sched2 j t && prior_jobs_complete arr_seq sched1 j t = pending sched2 j t && prior_jobs_complete arr_seq sched2 j t
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
sched1, sched2: schedule PState
j: Job
h: instant
ID: identical_prefix sched1 sched2 h
t: nat
LE: t <= h

prior_jobs_complete arr_seq sched1 j t = prior_jobs_complete arr_seq sched2 j t
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
sched1, sched2: schedule PState
j: Job
h: instant
ID: identical_prefix sched1 sched2 h
t: nat
LE: t <= h
ALL: prior_jobs_complete arr_seq sched2 j t

prior_jobs_complete arr_seq sched1 j t == true
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
sched1, sched2: schedule PState
j: Job
h: instant
ID: identical_prefix sched1 sched2 h
t: nat
LE: t <= h
NOT_ALL: ~~ prior_jobs_complete arr_seq sched2 j t
prior_jobs_complete arr_seq sched1 j t == false
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
sched1, sched2: schedule PState
j: Job
h: instant
ID: identical_prefix sched1 sched2 h
t: nat
LE: t <= h
ALL: prior_jobs_complete arr_seq sched2 j t

prior_jobs_complete arr_seq sched1 j t == true
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
sched1, sched2: schedule PState
j: Job
h: instant
ID: identical_prefix sched1 sched2 h
t: nat
LE: t <= h
ALL: prior_jobs_complete arr_seq sched2 j t
x: Job
IN: x \in task_arrivals_before arr_seq (job_task j) (job_arrival j)

completed_by sched1 x t
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
sched1, sched2: schedule PState
j: Job
h: instant
ID: identical_prefix sched1 sched2 h
t: nat
LE: t <= h
x: Job
IN: x \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
ALL: (fun x : Job => is_true (completed_by sched2 x t)) x

completed_by sched1 x t
by erewrite identical_prefix_completed_by; eauto 2.
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
sched1, sched2: schedule PState
j: Job
h: instant
ID: identical_prefix sched1 sched2 h
t: nat
LE: t <= h
NOT_ALL: ~~ prior_jobs_complete arr_seq sched2 j t

prior_jobs_complete arr_seq sched1 j t == false
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
sched1, sched2: schedule PState
j: Job
h: instant
ID: identical_prefix sched1 sched2 h
t: nat
LE: t <= h
x: Job
IN: x \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched2 x t

prior_jobs_complete arr_seq sched1 j t == false
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
sched1, sched2: schedule PState
j: Job
h: instant
ID: identical_prefix sched1 sched2 h
t: nat
LE: t <= h
x: Job
IN: x \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched2 x t

~~ completed_by sched1 x t
by erewrite identical_prefix_completed_by; eauto 2. Qed. (** Next, we show that the sequential readiness model ensures that tasks are sequential. That is, that jobs of the same task execute in order of their arrival. *)
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP

sequential_tasks arr_seq sched
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP

sequential_tasks arr_seq sched
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j1, j2: Job
t: instant
ARR1: arrives_in arr_seq j1
ARR2: arrives_in arr_seq j2
SAME: same_task j1 j2
LT: job_arrival j1 < job_arrival j2
SCHED: scheduled_at sched j2 t

completed_by sched j1 t
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j1, j2: Job
t: instant
ARR1: arrives_in arr_seq j1
ARR2: arrives_in arr_seq j2
SAME: same_task j1 j2
LT: job_arrival j1 < job_arrival j2
SCHED: scheduled_at sched j2 t
READY: job_ready sched j2 t

completed_by sched j1 t
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j1, j2: Job
t: instant
ARR1: arrives_in arr_seq j1
ARR2: arrives_in arr_seq j2
SAME: same_task j1 j2
LT: job_arrival j1 < job_arrival j2
SCHED: scheduled_at sched j2 t
NREADY: ~~ job_ready sched j2 t
completed_by sched j1 t
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j1, j2: Job
t: instant
ARR1: arrives_in arr_seq j1
ARR2: arrives_in arr_seq j2
SAME: same_task j1 j2
LT: job_arrival j1 < job_arrival j2
SCHED: scheduled_at sched j2 t
READY: job_ready sched j2 t

completed_by sched j1 t
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j1, j2: Job
t: instant
ARR1: arrives_in arr_seq j1
ARR2: arrives_in arr_seq j2
SAME: same_task j1 j2
LT: job_arrival j1 < job_arrival j2
SCHED: scheduled_at sched j2 t
PEND: pending sched j2 t

j1 \in task_arrivals_before arr_seq (job_task j2) (job_arrival j2)
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j1, j2: Job
t: instant
ARR1: arrives_in arr_seq j1
ARR2: arrives_in arr_seq j2
SAME: same_task j1 j2
LT: job_arrival j1 < job_arrival j2
SCHED: scheduled_at sched j2 t
PEND: pending sched j2 t

j1 \in arrivals_between arr_seq 0 (job_arrival j2)
exact: arrived_between_implies_in_arrivals.
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j1, j2: Job
t: instant
ARR1: arrives_in arr_seq j1
ARR2: arrives_in arr_seq j2
SAME: same_task j1 j2
LT: job_arrival j1 < job_arrival j2
SCHED: scheduled_at sched j2 t
NREADY: ~~ job_ready sched j2 t

completed_by sched j1 t
by exfalso; apply/(negP NREADY)/job_scheduled_implies_ready. Qed. (** Finally, we show that the sequential readiness model is a work-bearing readiness model. That is, if a job [j] is pending but not ready at a time instant [t], then there exists another (earlier) job of the same task that is pending and ready at time [t]. *)
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP

work_bearing_readiness arr_seq sched
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP

work_bearing_readiness arr_seq sched
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j: Job

forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j: Job
EX: exists k : nat, job_arrival j <= k

forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat

forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j: Job
LE: job_arrival j <= 0
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
LE: job_arrival j <= k.+1
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j: Job
LE: job_arrival j <= 0
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j: Job
LE: job_arrival j <= 0
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
READY: job_ready sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j: Job
LE: job_arrival j <= 0
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
NREADY: ~~ job_ready sched j t
exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j: Job
LE: job_arrival j <= 0
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
READY: job_ready sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
by exists j; repeat split; eauto using H_priority_is_reflexive.
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j: Job
LE: job_arrival j <= 0
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
NREADY: ~~ job_ready sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j: Job
LE: job_arrival j <= 0
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
NREADY: ~~ job_ready sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j: Job
LE: job_arrival j <= 0
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
jhp: Job
IN: jhp \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched jhp t

exists j_hp : Job, arrives_in arr_seq j_hp /\ pending sched j_hp t && prior_jobs_complete arr_seq sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
j: Job
LE: job_arrival j <= 0
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
jhp: Job
IN: job_arrival jhp < job_arrival j
NCOMP: ~~ completed_by sched jhp t

exists j_hp : Job, arrives_in arr_seq j_hp /\ pending sched j_hp t && prior_jobs_complete arr_seq sched j_hp t /\ hep_job j_hp j
by exfalso; move: LE; rewrite leqn0 => /eqP EQ; rewrite EQ in IN. }
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
LE: job_arrival j <= k.+1
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
LE: job_arrival j <= k.+1
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
READY: job_ready sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
NREADY: ~~ job_ready sched j t
exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
READY: job_ready sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
by exists j; repeat split; eauto using H_priority_is_reflexive.
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
NREADY: ~~ job_ready sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
NREADY: ~~ job_ready sched j t

exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t

exists j_hp : Job, arrives_in arr_seq j_hp /\ pending sched j_hp t && prior_jobs_complete arr_seq sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t

job_arrival j' <= k
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
exists j_hp : Job, arrives_in arr_seq j_hp /\ pending sched j_hp t && prior_jobs_complete arr_seq sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t

job_arrival j' <= k
by apply arrives_in_task_arrivals_before_implies_arrives_before in IN; rewrite // -ltnS -EQ.
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k

exists j_hp : Job, arrives_in arr_seq j_hp /\ pending sched j_hp t && prior_jobs_complete arr_seq sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k

arrives_in arr_seq j'
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'
exists j_hp : Job, arrives_in arr_seq j_hp /\ pending sched j_hp t && prior_jobs_complete arr_seq sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k

arrives_in arr_seq j'
by eapply arrives_in_task_arrivals_implies_arrived; eauto 2.
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'

exists j_hp : Job, arrives_in arr_seq j_hp /\ pending sched j_hp t && prior_jobs_complete arr_seq sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'

pending sched j' t
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'
PEND': pending sched j' t
exists j_hp : Job, arrives_in arr_seq j_hp /\ pending sched j_hp t && prior_jobs_complete arr_seq sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'

pending sched j' t
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'

has_arrived j' t
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'
LE: has_arrived j t

has_arrived j' t
by unfold has_arrived in *; lia.
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
IHk: forall j : Job, job_arrival j <= k -> forall t : instant, arrives_in arr_seq j -> pending sched j t -> exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j
j: Job
t: instant
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
j': Job
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'
PEND': pending sched j' t

exists j_hp : Job, arrives_in arr_seq j_hp /\ pending sched j_hp t && prior_jobs_complete arr_seq sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
t: instant
j': Job
IHk: exists j_hp : Job, arrives_in arr_seq j_hp /\ job_ready sched j_hp t /\ hep_job j_hp j'
j: Job
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'
PEND': pending sched j' t

exists j_hp : Job, arrives_in arr_seq j_hp /\ pending sched j_hp t && prior_jobs_complete arr_seq sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
t: instant
j', j'': Job
ARR'': arrives_in arr_seq j''
READY'': job_ready sched j'' t
HEP'': hep_job j'' j'
j: Job
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'
PEND': pending sched j' t

exists j_hp : Job, arrives_in arr_seq j_hp /\ pending sched j_hp t && prior_jobs_complete arr_seq sched j_hp t /\ hep_job j_hp j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
t: instant
j', j'': Job
ARR'': arrives_in arr_seq j''
READY'': job_ready sched j'' t
HEP'': hep_job j'' j'
j: Job
ARR: arrives_in arr_seq j
PEND: pending sched j t
EQ: job_arrival j = k.+1
IN: j' \in task_arrivals_before arr_seq (job_task j) (job_arrival j)
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'
PEND': pending sched j' t

hep_job j'' j
Job: JobType
Task: TaskType
H: JobTask Job Task
H0: JobArrival Job
H1: JobCost Job
PState: ProcessorState Job
arr_seq: arrival_sequence Job
H_arrival_times_are_consistent: consistent_arrival_times arr_seq
sched: schedule PState
H_valid_schedule: valid_schedule sched arr_seq
FP: FP_policy Task
H_priority_is_reflexive: reflexive_task_priorities FP
k: nat
t: instant
j', j'': Job
ARR'': arrives_in arr_seq j''
READY'': job_ready sched j'' t
HEP'': hep_job j'' j'
j: Job
ARR: arrives_in arr_seq j
PEND: pending sched j t
NCOMP: ~~ completed_by sched j' t
LE': job_arrival j' <= k
ARR': arrives_in arr_seq j'
PEND': pending sched j' t
EQ: job_task j' = job_task j

hep_job j'' j
by rewrite /hep_job /FP_to_JLFP -EQ. } } Qed. End SequentialTasksReadiness.