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 .
Require Export  prosa.model.schedule.work_conserving.[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.job_properties.
 Require Export  prosa.analysis.facts.model.service_of_jobs.
 Require Export  prosa.analysis.definitions.work_bearing_readiness.
 Require Export  prosa.analysis.facts.priority.inversion .
 
(** * Existence of Busy Interval for JLFP-models *) 
(** In this module we derive a sufficient condition for existence of 
    busy intervals for uni-processor for JLFP schedulers. *) 
 Section  ExistsBusyIntervalJLFP .
 
  (** Consider any type of tasks ... *) 
    Context  {Task  : TaskType}.
    Context  `{TaskCost Task}.
 
  (**  ... and any type of jobs associated with these tasks. *) 
    Context  {Job  : JobType}.
    Context  {JobTask  : JobTask Job Task}.
    Context  {Arrival : JobArrival Job}.
    Context  {Cost  : JobCost Job}.
 
  (** Consider any valid arrival sequence. *) 
    Variable  arr_seq  : arrival_sequence Job.
    Hypothesis  H_valid_arrival_time  : valid_arrival_sequence arr_seq.
 
  (** Next, consider any schedule of this arrival sequence ... *) 
    Context  {PState  : ProcessorState Job}.
    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.
 
  (** Assume a given JLFP policy. *) 
    Context  {JLFP  : JLFP_policy Job}.
 
  (** Further, allow for any work-bearing notion of job readiness. *) 
    Context  `{@JobReady Job PState Cost Arrival}.
    Hypothesis  H_job_ready  : work_bearing_readiness arr_seq sched.
 
  (** For simplicity, let's define some local names. *) 
    Let  job_pending_at  := pending sched.
    Let  job_completed_by  := completed_by sched.
 
  (** Consider an arbitrary task [tsk]. *) 
    Variable  tsk  : Task.
 
  (** Consider an arbitrary job [j]. *) 
    Variable  j  : Job.
    Hypothesis  H_from_arrival_sequence  : arrives_in arr_seq j.
    Hypothesis  H_job_task  : job_of_task tsk j.
    Hypothesis  H_job_cost_positive  : job_cost_positive j.
 
  (** Recall the list of jobs that arrive in any interval. *) 
    Let  quiet_time  t1  := quiet_time arr_seq sched j t1.
    Let  quiet_time_dec  t1  := quiet_time_dec arr_seq sched j t1.
    Let  busy_interval_prefix  t1  t2  := busy_interval_prefix arr_seq sched j t1 t2.
    Let  busy_interval  t1  t2  := busy_interval arr_seq sched j t1 t2.
    Let  is_priority_inversion_bounded_by  K  := priority_inversion_of_job_is_bounded_by arr_seq sched j K.
 
  (** We begin by proving a few basic lemmas about busy intervals. *) 
    Section  BasicLemmas .
 
    (** Assume that the priority relation is reflexive. *) 
      Hypothesis  H_priority_is_reflexive  : reflexive_job_priorities JLFP.
 
    (** Consider any busy interval <<[t1, t2)>> of job [j]. *) 
      Variable  t1  t2  : instant.
      Hypothesis  H_busy_interval  : busy_interval t1 t2.
 
    (** We prove that job [j] completes by the end of the busy interval. *) 
      Lemma  job_completes_within_busy_interval :
      job_completed_by j t2.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_priority_is_reflexive :  reflexive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval :  busy_interval t1 t2 
job_completed_by j t2
      Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_priority_is_reflexive :  reflexive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval :  busy_interval t1 t2 
job_completed_by j t2
        rename  H_priority_is_reflexive into  REFL, H_busy_interval into  BUSY.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  REFL :  reflexive_job_priorities JLFP t1, t2 :  instant BUSY :  busy_interval t1 t2 
job_completed_by j t2
        move : BUSY => [[_ [_ [_ /andP [_ ARR]]]] QUIET].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  REFL :  reflexive_job_priorities JLFP t1, t2 :  instant ARR :  job_arrival j < t2 QUIET :  classical.quiet_time arr_seq sched j t2 
job_completed_by j t2
        exact : QUIET.
      Qed .
 
    End  BasicLemmas .
 
  (** In this section, we prove that during a busy interval there 
      always exists a pending job. *) 
    Section  ExistsPendingJob .
 
    (** Let <<[t1, t2]>> be any interval where time [t1] is quiet and time [t2] is not quiet. *) 
      Variable  t1  t2  : instant.
      Hypothesis  H_interval  : t1 <= t2.
      Hypothesis  H_quiet  : quiet_time t1.
      Hypothesis  H_not_quiet  : ~ quiet_time t2.
 
    (** Then, we prove that there is a job pending at time [t2] 
        that has higher or equal priority (with respect to [tsk]). *) 
      Lemma  not_quiet_implies_exists_pending_job :
      exists  j_hp ,
        arrives_in arr_seq j_hp /\
        arrived_between j_hp t1 t2 /\
        hep_job j_hp j /\
        ~ job_completed_by j_hp t2.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 H_quiet :  quiet_time t1 H_not_quiet :  ~ quiet_time t2 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
      Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 H_quiet :  quiet_time t1 H_not_quiet :  ~ quiet_time t2 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
        rename  H_quiet into  QUIET, H_not_quiet into  NOTQUIET.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
        destruct  (has (fun  j_hp  => (~~ job_completed_by j_hp t2) && hep_job j_hp j)
                    (arrivals_between arr_seq t1 t2)) eqn :COMP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 COMP :  has
  (fun  j_hp  : Job =>
   ~~ job_completed_by j_hp t2 &&
   hep_job j_hp j)
  (arrivals_between arr_seq t1 t2) = true 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
        { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 COMP :  has
  (fun  j_hp  : Job =>
   ~~ job_completed_by j_hp t2 &&
   hep_job j_hp j)
  (arrivals_between arr_seq t1 t2) = true 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
  move : COMP => /hasP [j_hp ARR /andP [NOTCOMP HP]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 j_hp :  Job ARR :  j_hp \in  arrivals_between arr_seq t1 t2 NOTCOMP :  ~~ job_completed_by j_hp t2 HP :  hep_job j_hp j 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
          move : (ARR) => INarr.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 j_hp :  Job ARR :  j_hp \in  arrivals_between arr_seq t1 t2 NOTCOMP :  ~~ job_completed_by j_hp t2 HP :  hep_job j_hp j INarr :  j_hp \in  arrivals_between arr_seq t1 t2 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
          apply  in_arrivals_implies_arrived_between in  ARR => [|//].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 j_hp :  Job ARR :  arrived_between j_hp t1 t2 NOTCOMP :  ~~ job_completed_by j_hp t2 HP :  hep_job j_hp j INarr :  j_hp \in  arrivals_between arr_seq t1 t2 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
          apply  in_arrivals_implies_arrived in  INarr.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 j_hp :  Job ARR :  arrived_between j_hp t1 t2 NOTCOMP :  ~~ job_completed_by j_hp t2 HP :  hep_job j_hp j INarr :  arrives_in arr_seq j_hp 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
          by  exists  j_hp ; repeat  split ; last  by  apply /negP.
        } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 COMP :  has
  (fun  j_hp  : Job =>
   ~~ job_completed_by j_hp t2 &&
   hep_job j_hp j)
  (arrivals_between arr_seq t1 t2) = false 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
        { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 COMP :  has
  (fun  j_hp  : Job =>
   ~~ job_completed_by j_hp t2 &&
   hep_job j_hp j)
  (arrivals_between arr_seq t1 t2) = false 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
          apply  negbT in  COMP; rewrite  -all_predC in  COMP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 COMP :  all 
  (predC
     (fun  j_hp  : Job =>
      ~~ job_completed_by j_hp t2 &&
      hep_job j_hp j))
  (arrivals_between arr_seq t1 t2)
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
          move : COMP => /allP COMP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 COMP :  {in  arrivals_between arr_seq t1 t2,
  forall  x  : Job,
  predC
    (fun  j_hp  : Job =>
     ~~ job_completed_by j_hp t2 &&
     hep_job j_hp j) x} 
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
          exfalso ; apply  NOTQUIET; intros  j_hp IN HP ARR.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 COMP :  {in  arrivals_between arr_seq t1 t2,
  forall  x  : Job,
  predC
    (fun  j_hp  : Job =>
     ~~ job_completed_by j_hp t2 &&
     hep_job j_hp j) x} j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t2 
completed_by sched j_hp t2
          destruct  (ltnP (job_arrival j_hp) t1) as  [BEFORE | AFTER];
          first  by  specialize  (QUIET j_hp IN HP BEFORE); apply  completion_monotonic with  (t := t1).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 COMP :  {in  arrivals_between arr_seq t1 t2,
  forall  x  : Job,
  predC
    (fun  j_hp  : Job =>
     ~~ job_completed_by j_hp t2 &&
     hep_job j_hp j) x} j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t2 AFTER :  t1 <= job_arrival j_hp 
completed_by sched j_hp t2
          feed (COMP j_hp). Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 COMP :  {in  arrivals_between arr_seq t1 t2,
  forall  x  : Job,
  predC
    (fun  j_hp  : Job =>
     ~~ job_completed_by j_hp t2 &&
     hep_job j_hp j) x} j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t2 AFTER :  t1 <= job_arrival j_hp 
j_hp \in  arrivals_between arr_seq t1 t2
          { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 COMP :  {in  arrivals_between arr_seq t1 t2,
  forall  x  : Job,
  predC
    (fun  j_hp  : Job =>
     ~~ job_completed_by j_hp t2 &&
     hep_job j_hp j) x} j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t2 AFTER :  t1 <= job_arrival j_hp 
j_hp \in  arrivals_between arr_seq t1 t2
  by  apply : arrived_between_implies_in_arrivals => //;  apply /andP; split .  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t1, t2 :  instant H_interval :  t1 <= t2 QUIET :  quiet_time t1 NOTQUIET :  ~ quiet_time t2 j_hp :  Job COMP :  (fun  x  : Job =>
 is_true
   (predC
      (fun  j_hp  : Job =>
       ~~ job_completed_by j_hp t2 &&
       hep_job j_hp j) x)) j_hp IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t2 AFTER :  t1 <= job_arrival j_hp 
completed_by sched j_hp t2
          by  rewrite  /= HP andbT negbK in  COMP.
        } 
      Qed .
 
    End  ExistsPendingJob .
 
  (** In this section, we prove that during a busy interval the 
      processor is never idle. *) 
    Section  ProcessorAlwaysBusy .
 
    (** Assume that the schedule is work-conserving ... *) 
      Hypothesis  H_work_conserving  : work_conserving arr_seq sched.
 
    (** ... and the priority relation is reflexive and transitive. *) 
      Hypothesis  H_priority_is_reflexive  : reflexive_job_priorities JLFP.
      Hypothesis  H_priority_is_transitive  : transitive_job_priorities JLFP.
 
    (** Consider any busy interval prefix <<[t1, t2)>>. *) 
      Variable  t1  t2  : instant.
      Hypothesis  H_busy_interval_prefix  : busy_interval_prefix t1 t2.
 
    (** We prove that if the processor is idle at a time instant [t], 
        then the next time instant [t+1] will be a quiet time. *) 
      Lemma  idle_time_implies_quiet_time_at_the_next_time_instant :
      forall  (t  : instant),
        is_idle arr_seq sched t ->
        quiet_time t.+1 .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 
forall  t  : instant,
is_idle arr_seq sched t -> quiet_time t.+1 
      Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 
forall  t  : instant,
is_idle arr_seq sched t -> quiet_time t.+1 
        intros  t IDLE jhp ARR HP AB.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  
completed_by sched jhp t.+1 
        apply  negbNE; apply /negP; intros  NCOMP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  
False 
        have  PEND : job_pending_at jhp t.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  
job_pending_at jhp t
        { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  
job_pending_at jhp t
  apply /andP; split => [//|].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  
~~ completed_by sched jhp t
          by  move : NCOMP; apply  contra, completion_monotonic.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  PEND :  job_pending_at jhp t 
False 
        apply  H_job_ready in  PEND => //; destruct  PEND as  [j' [ARR' [READY' _]]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t 
False 
        move :(H_work_conserving j' t) => WC.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t WC :  arrives_in arr_seq j' ->
backlogged sched j' t ->
exists  j_other  : Job,
  scheduled_at sched j_other t 
False 
        feed_n 2  WC => [//||]. Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t WC :  backlogged sched j' t ->
exists  j_other  : Job,
  scheduled_at sched j_other t 
backlogged sched j' t
        { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t WC :  backlogged sched j' t ->
exists  j_other  : Job,
  scheduled_at sched j_other t 
backlogged sched j' t
  apply /andP; split => [//|].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t WC :  backlogged sched j' t ->
exists  j_other  : Job,
  scheduled_at sched j_other t 
~~ scheduled_at sched j' t
          exact : not_scheduled_when_idle.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t WC :  exists  j_other  : Job,
  scheduled_at sched j_other t
False 
        move : WC => [jo +]; apply /negP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  instant IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j AB :  arrived_before jhp t.+1  NCOMP :  ~~ completed_by sched jhp t.+1  j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t jo :  Job 
~~ scheduled_at sched jo t
        exact : not_scheduled_when_idle.
      Qed .
 
    (** Next, we prove that at any time instant [t] within the busy interval there exists a job 
        [jhp] such that (1) job [jhp] is pending at time [t] and (2) job [jhp] has higher-or-equal 
        priority than task [tsk]. *) 
      Lemma  pending_hp_job_exists :
      forall  t ,
        t1 <= t < t2 ->
        exists  jhp ,
          arrives_in arr_seq jhp /\
          job_pending_at jhp t /\
          hep_job jhp j.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 
forall  t  : nat,
t1 <= t < t2 ->
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
      Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 
forall  t  : nat,
t1 <= t < t2 ->
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
        move  => t /andP [GE LT]; move : (H_busy_interval_prefix) => [_ [QTt [NQT REL]]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
        move : (ltngtP t1.+1  t2) => [GT|CONTR|EQ]; first  last .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 EQ :  t1.+1  = t2 
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
        - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 EQ :  t1.+1  = t2 
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
  subst  t2; rewrite  ltnS in  LT.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t1.+1  t :  nat GE :  t1 <= t QTt :  classical.quiet_time arr_seq sched j t1 REL :  t1 <= job_arrival j < t1.+1  NQT :  forall  t  : nat,
t1 < t < t1.+1  ->
~ classical.quiet_time arr_seq sched j tLT :  t <= t1 
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
          have  EQ: t1 = t by  apply /eqP; rewrite  eqn_leq; apply /andP; split .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t1.+1  t :  nat GE :  t1 <= t QTt :  classical.quiet_time arr_seq sched j t1 REL :  t1 <= job_arrival j < t1.+1  NQT :  forall  t  : nat,
t1 < t < t1.+1  ->
~ classical.quiet_time arr_seq sched j tLT :  t <= t1 EQ :  t1 = t 
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
          subst  t1; clear  GE LT.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t :  nat NQT :  forall  t0  : nat,
t < t0 < t.+1  ->
~ classical.quiet_time arr_seq sched j t0REL :  t <= job_arrival j < t.+1  QTt :  classical.quiet_time arr_seq sched j t H_busy_interval_prefix :  busy_interval_prefix t t.+1  
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
          exists  j ; repeat  split => //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t :  nat NQT :  forall  t0  : nat,
t < t0 < t.+1  ->
~ classical.quiet_time arr_seq sched j t0REL :  t <= job_arrival j < t.+1  QTt :  classical.quiet_time arr_seq sched j t H_busy_interval_prefix :  busy_interval_prefix t t.+1  
job_pending_at j t
          + Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t :  nat NQT :  forall  t0  : nat,
t < t0 < t.+1  ->
~ classical.quiet_time arr_seq sched j t0REL :  t <= job_arrival j < t.+1  QTt :  classical.quiet_time arr_seq sched j t H_busy_interval_prefix :  busy_interval_prefix t t.+1  
job_pending_at j t
  move : REL; rewrite  ltnS -eqn_leq eq_sym; move  => /eqP REL.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t :  nat NQT :  forall  t0  : nat,
t < t0 < t.+1  ->
~ classical.quiet_time arr_seq sched j t0QTt :  classical.quiet_time arr_seq sched j t H_busy_interval_prefix :  busy_interval_prefix t t.+1  REL :  job_arrival j = t 
job_pending_at j t
              by  rewrite  -REL; eapply  job_pending_at_arrival; eauto  2 .
        - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 CONTR :  t2 < t1.+1  
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
  by  exfalso ; move_neq_down CONTR; eapply  leq_ltn_trans; eauto  2 .
        - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
  have  EX: exists  hp__seq : seq Job,
        forall  j__hp , j__hp \in  hp__seq <-> arrives_in arr_seq j__hp /\ job_pending_at j__hp t /\ hep_job j__hp j.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 
exists  hp__seq  : seq Job,
  forall  j__hp  : Job,
  j__hp \in  hp__seq <->
  arrives_in arr_seq j__hp /\
  job_pending_at j__hp t /\ hep_job j__hp j
          { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 
exists  hp__seq  : seq Job,
  forall  j__hp  : Job,
  j__hp \in  hp__seq <->
  arrives_in arr_seq j__hp /\
  job_pending_at j__hp t /\ hep_job j__hp j
  exists  (filter  (fun  jo  => (job_pending_at jo t) && (hep_job jo j)) (arrivals_between arr_seq 0  t.+1 )).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 
forall  j__hp  : Job,
j__hp
  \in  [seq jo <- arrivals_between arr_seq 0  t.+1 
         | job_pending_at jo t
         & hep_job jo j] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp j
            intros ; split ; intros  T.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 j__hp :  Job T :  j__hp
  \in  [seq jo <- 
       arrivals_between arr_seq 0  t.+1 
         | 
       job_pending_at jo t
         & 
       hep_job jo j] 
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp j
            - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 j__hp :  Job T :  j__hp
  \in  [seq jo <- 
       arrivals_between arr_seq 0  t.+1 
         | 
       job_pending_at jo t
         & 
       hep_job jo j] 
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp j
  move : T; rewrite  mem_filter; move  => /andP [/andP [PEN HP] IN].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 j__hp :  Job PEN :  job_pending_at j__hp t HP :  hep_job j__hp j IN :  j__hp \in  arrivals_between arr_seq 0  t.+1  
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp j
              repeat  split ; eauto using  in_arrivals_implies_arrived.
            - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 j__hp :  Job T :  arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp j 
j__hp
  \in  [seq jo <- arrivals_between arr_seq 0  t.+1 
         | job_pending_at jo t
         & hep_job jo j]
  move : T => [ARR [PEN HP]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 j__hp :  Job ARR :  arrives_in arr_seq j__hp PEN :  job_pending_at j__hp t HP :  hep_job j__hp j 
j__hp
  \in  [seq jo <- arrivals_between arr_seq 0  t.+1 
         | job_pending_at jo t
         & hep_job jo j]
              rewrite  mem_filter; apply /andP; split ; first  (apply /andP; split => //).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 j__hp :  Job ARR :  arrives_in arr_seq j__hp PEN :  job_pending_at j__hp t HP :  hep_job j__hp j 
j__hp \in  arrivals_between arr_seq 0  t.+1 
              apply : arrived_between_implies_in_arrivals => //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 j__hp :  Job ARR :  arrives_in arr_seq j__hp PEN :  job_pending_at j__hp t HP :  hep_job j__hp j 
arrived_between j__hp 0  t.+1 
              by  apply /andP; split ; last  rewrite  ltnS; move : PEN => /andP [T _].
          } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 EX :  exists  hp__seq  : seq Job,
  forall  j__hp  : Job,
  j__hp \in  hp__seq <->
  arrives_in arr_seq j__hp /\
  job_pending_at j__hp t /\ hep_job j__hp j
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
  move : EX => [hp__seq SE]; case  FL: (hp__seq) => [ | jhp jhps].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 hp__seq :  seq Job SE :  forall  j__hp  : Job,
j__hp \in  hp__seq <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp jFL :  hp__seq = [::] 
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
          + Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 hp__seq :  seq Job SE :  forall  j__hp  : Job,
j__hp \in  hp__seq <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp jFL :  hp__seq = [::] 
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
  subst  hp__seq; exfalso .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp j
False 
            move : GE; rewrite  leq_eqVlt; move  => /orP [/eqP EQ| GE].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp jEQ :  t1 = t 
False 
            * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp jEQ :  t1 = t 
False 
  subst  t.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 LT :  t1 < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t1 /\ hep_job j__hp j
False 
              apply  NQT with  t1.+1 ; first  by  apply /andP; split .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 LT :  t1 < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t1 /\ hep_job j__hp j
classical.quiet_time arr_seq sched j t1.+1 
              intros  jhp ARR HP ARRB; apply  negbNE; apply /negP; intros  NCOMP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 LT :  t1 < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t1 /\ hep_job j__hp jjhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j ARRB :  arrived_before jhp t1.+1  NCOMP :  ~~ completed_by sched jhp t1.+1  
False 
              move : (SE jhp) => [_ SE2].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 LT :  t1 < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t1 /\ hep_job j__hp jjhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j ARRB :  arrived_before jhp t1.+1  NCOMP :  ~~ completed_by sched jhp t1.+1  SE2 :  arrives_in arr_seq jhp /\
job_pending_at jhp t1 /\ hep_job jhp j ->
jhp \in  [::] 
False 
              rewrite  in_nil in  SE2; feed SE2=> [|//]; clear  SE2.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 LT :  t1 < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t1 /\ hep_job j__hp jjhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j ARRB :  arrived_before jhp t1.+1  NCOMP :  ~~ completed_by sched jhp t1.+1  
arrives_in arr_seq jhp /\
job_pending_at jhp t1 /\ hep_job jhp j
              repeat  split => //; first  apply /andP; split => //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 LT :  t1 < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t1 /\ hep_job j__hp jjhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j ARRB :  arrived_before jhp t1.+1  NCOMP :  ~~ completed_by sched jhp t1.+1  
~~ completed_by sched jhp t1
              apply /negP; intros  COMLP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 LT :  t1 < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t1 /\ hep_job j__hp jjhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j ARRB :  arrived_before jhp t1.+1  NCOMP :  ~~ completed_by sched jhp t1.+1  COMLP :  completed_by sched jhp t1 
False 
              move : NCOMP => /negP NCOMP; apply : NCOMP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 LT :  t1 < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t1 /\ hep_job j__hp jjhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j ARRB :  arrived_before jhp t1.+1  COMLP :  completed_by sched jhp t1 
completed_by sched jhp t1.+1 
              by  apply  completion_monotonic with  t1.
            * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp jGE :  t1 < t 
False 
  apply  NQT with  t; first  by  apply /andP; split .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp jGE :  t1 < t 
classical.quiet_time arr_seq sched j t
              intros  jhp ARR HP ARRB; apply  negbNE; apply /negP; intros  NCOMP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp jGE :  t1 < t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j ARRB :  arrived_before jhp t NCOMP :  ~~ completed_by sched jhp t 
False 
              move : (SE jhp) => [_ SE2].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp jGE :  t1 < t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j ARRB :  arrived_before jhp t NCOMP :  ~~ completed_by sched jhp t SE2 :  arrives_in arr_seq jhp /\
job_pending_at jhp t /\ hep_job jhp j ->
jhp \in  [::] 
False 
              rewrite  in_nil in  SE2; feed SE2 => [|//]; clear  SE2.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 SE :  forall  j__hp  : Job,
j__hp \in  [::] <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp jGE :  t1 < t jhp :  Job ARR :  arrives_in arr_seq jhp HP :  hep_job jhp j ARRB :  arrived_before jhp t NCOMP :  ~~ completed_by sched jhp t 
arrives_in arr_seq jhp /\
job_pending_at jhp t /\ hep_job jhp j
              by  repeat  split ; auto ; apply /andP; split ; first  apply  ltnW.
          + Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 hp__seq :  seq Job SE :  forall  j__hp  : Job,
j__hp \in  hp__seq <->
arrives_in arr_seq j__hp /\
job_pending_at j__hp t /\ hep_job j__hp jjhp :  Job jhps :  seq Job FL :  hp__seq = jhp :: jhps 
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
  move : (SE jhp)=> [SE1 _]; subst ; clear  SE.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat GE :  t1 <= t LT :  t < t2 QTt :  classical.quiet_time arr_seq sched j t1 NQT :  forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j tREL :  t1 <= job_arrival j < t2 GT :  t1.+1  < t2 jhp :  Job jhps :  seq Job SE1 :  jhp \in  jhp :: jhps ->
arrives_in arr_seq jhp /\
job_pending_at jhp t /\ hep_job jhp j 
exists  jhp  : Job,
  arrives_in arr_seq jhp /\
  job_pending_at jhp t /\ hep_job jhp j
            by  exists  jhp ; apply  SE1; rewrite  in_cons; apply /orP; left .
      Qed .
 
    (** We prove that at any time instant [t] within <<[t1, t2)>> the processor is not idle. *) 
      Lemma  not_quiet_implies_not_idle :
      forall  t ,
        t1 <= t < t2 ->
        ~ is_idle arr_seq sched t.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 
forall  t  : nat,
t1 <= t < t2 -> ~ is_idle arr_seq sched t
      Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 
forall  t  : nat,
t1 <= t < t2 -> ~ is_idle arr_seq sched t
        intros  t NEQ IDLE.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat NEQ :  t1 <= t < t2 IDLE :  is_idle arr_seq sched t 
False 
        move : (pending_hp_job_exists _ NEQ) => [jhp [ARR [PEND HP]]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat NEQ :  t1 <= t < t2 IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp PEND :  job_pending_at jhp t HP :  hep_job jhp j 
False 
        apply  H_job_ready in  PEND => //; destruct  PEND as  [j' [ARR' [READY' _]]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat NEQ :  t1 <= t < t2 IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t HP :  hep_job jhp j 
False 
        feed (H_work_conserving _ t ARR'). Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat NEQ :  t1 <= t < t2 IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t HP :  hep_job jhp j 
backlogged sched j' t
        { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat NEQ :  t1 <= t < t2 IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t HP :  hep_job jhp j 
backlogged sched j' t
  apply /andP; split => [//|].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 t :  nat NEQ :  t1 <= t < t2 IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t HP :  hep_job jhp j 
~~ scheduled_at sched j' t
          exact : not_scheduled_when_idle.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t :  nat H_work_conserving :  exists  j_other  : Job,
  scheduled_at sched j_other tH_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 NEQ :  t1 <= t < t2 IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t HP :  hep_job jhp j 
False 
        move : (H_work_conserving) => [jo +]; apply /negP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t :  nat H_work_conserving :  exists  j_other  : Job,
  scheduled_at sched j_other tH_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP t1, t2 :  instant H_busy_interval_prefix :  busy_interval_prefix t1 t2 NEQ :  t1 <= t < t2 IDLE :  is_idle arr_seq sched t jhp :  Job ARR :  arrives_in arr_seq jhp j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t HP :  hep_job jhp j jo :  Job 
~~ scheduled_at sched jo t
        exact : not_scheduled_when_idle.
      Qed .
 
    End  ProcessorAlwaysBusy .
 
  (** In section we prove a few auxiliary lemmas about quiet time and service.  *) 
    Section  QuietTimeAndServiceOfJobs .
 
    (** Assume that the schedule is work-conserving ... *) 
      Hypothesis  H_work_conserving  : work_conserving arr_seq sched.
 
    (** ... and there are no duplicate job arrivals. *) 
      Hypothesis  H_arrival_sequence_is_a_set :
      arrival_sequence_uniq arr_seq.
 
    (** Let [t1] be a quiet time. *) 
      Variable  t1  : instant.
      Hypothesis  H_quiet_time  : quiet_time t1.
 
    (** Assume that there is no quiet time in the interval <<(t1, t1 + Δ]>>. *) 
      Variable  Δ  : duration.
      Hypothesis  H_no_quiet_time  : forall  t , t1 < t <= t1 + Δ -> ~ quiet_time t.
 
    (** For clarity, we introduce a notion of the total service of 
        jobs released in time interval <<[t_beg, t_end)>> during the 
        time interval <<[t1, t1 + Δ)>>. *) 
      Let  service_received_by_hep_jobs_released_during  t_beg  t_end  :=
      service_of_higher_or_equal_priority_jobs
        sched (arrivals_between arr_seq t_beg t_end) j t1 (t1 + Δ).
 
    (** We prove that jobs with higher-than-or-equal priority that 
        released before time instant [t1] receive no service after time 
        instant [t1]. *) 
      Lemma  hep_jobs_receive_no_service_before_quiet_time :
      service_received_by_hep_jobs_released_during t1 (t1 + Δ) =
      service_received_by_hep_jobs_released_during 0  (t1 + Δ).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat 
service_received_by_hep_jobs_released_during t1
  (t1 + Δ) =
service_received_by_hep_jobs_released_during 0 
  (t1 + Δ)
      Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat 
service_received_by_hep_jobs_released_during t1
  (t1 + Δ) =
service_received_by_hep_jobs_released_during 0 
  (t1 + Δ)
        intros .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat 
service_received_by_hep_jobs_released_during t1
  (t1 + Δ) =
service_received_by_hep_jobs_released_during 0 
  (t1 + Δ)
        rewrite  /service_received_by_hep_jobs_released_during
              /service_of_higher_or_equal_priority_jobs /service_of_jobs.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat 
\sum_(j0 <- arrivals_between arr_seq t1 (t1 + Δ) | 
hep_job j0 j) service_during sched j0 t1 (t1 + Δ) =
\sum_(j0 <- arrivals_between arr_seq 0  (t1 + Δ) | 
hep_job j0 j) service_during sched j0 t1 (t1 + Δ)
        rewrite  [in  X in  _ = X](arrivals_between_cat _ _ t1);
        [ | by  [] | rewrite  leq_addr//].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat 
\sum_(j0 <- arrivals_between arr_seq t1 (t1 + Δ) | 
hep_job j0 j) service_during sched j0 t1 (t1 + Δ) =
\sum_(j0 <- (arrivals_between arr_seq 0  t1 ++
             arrivals_between arr_seq t1 (t1 + Δ)) | 
hep_job j0 j) service_during sched j0 t1 (t1 + Δ)
        rewrite  big_cat //=.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat 
\sum_(j0 <- arrivals_between arr_seq t1 (t1 + Δ) | 
hep_job j0 j) service_during sched j0 t1 (t1 + Δ) =
\sum_(i <- arrivals_between arr_seq 0  t1 | hep_job i j)
   service_during sched i t1 (t1 + Δ) +
\sum_(i <- arrivals_between arr_seq t1 (t1 + Δ) | 
hep_job i j) service_during sched i t1 (t1 + Δ)
        rewrite  -{1 }[\sum_(j <- arrivals_between arr_seq _ (t1 + Δ) | _)
                    service_during sched j t1 (t1 + Δ)]add0n.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat 
0  +
\sum_(j0 <- arrivals_between arr_seq t1 (t1 + Δ) | 
hep_job j0 j) service_during sched j0 t1 (t1 + Δ) =
\sum_(i <- arrivals_between arr_seq 0  t1 | hep_job i j)
   service_during sched i t1 (t1 + Δ) +
\sum_(i <- arrivals_between arr_seq t1 (t1 + Δ) | 
hep_job i j) service_during sched i t1 (t1 + Δ)
        apply /eqP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat 
0  +
\sum_(j0 <- arrivals_between arr_seq t1 (t1 + Δ) | 
hep_job j0 j) service_during sched j0 t1 (t1 + Δ) ==
\sum_(i <- arrivals_between arr_seq 0  t1 | hep_job i j)
   service_during sched i t1 (t1 + Δ) +
\sum_(i <- arrivals_between arr_seq t1 (t1 + Δ) | 
hep_job i j) service_during sched i t1 (t1 + Δ)
  rewrite  eqn_add2r eq_sym exchange_big //=.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat 
\sum_(t1 <= j0 < t1 + Δ)
   \sum_(i <- arrivals_between arr_seq 0  t1 | hep_job
                                                i j)
      service_at sched i j0 == 0 
        rewrite  big1_seq //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat 
forall  i  : Datatypes_nat__canonical__eqtype_Equality,
true && (i \in  index_iota t1 (t1 + Δ)) ->
\sum_(i0 <- arrivals_between arr_seq 0  t1 | hep_job i0
                                              j)
   service_at sched i0 i = 0 
        move  => t' /andP [_ NEQ]; rewrite  mem_iota in  NEQ.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat t' :  Datatypes_nat__canonical__eqtype_Equality NEQ :  t1 <= t' < t1 + (t1 + Δ - t1) 
\sum_(i <- arrivals_between arr_seq 0  t1 | hep_job i j)
   service_at sched i t' = 0 
        rewrite  big1_seq //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat t' :  Datatypes_nat__canonical__eqtype_Equality NEQ :  t1 <= t' < t1 + (t1 + Δ - t1) 
forall  i  : Job,
hep_job i j && (i \in  arrivals_between arr_seq 0  t1) ->
service_at sched i t' = 0 
        move  => jhp /andP [HP ARR].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat t' :  Datatypes_nat__canonical__eqtype_Equality NEQ :  t1 <= t' < t1 + (t1 + Δ - t1) jhp :  Job HP :  hep_job jhp j ARR :  jhp \in  arrivals_between arr_seq 0  t1 
service_at sched jhp t' = 0 
        apply : not_scheduled_implies_no_service.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat t' :  Datatypes_nat__canonical__eqtype_Equality NEQ :  t1 <= t' < t1 + (t1 + Δ - t1) jhp :  Job HP :  hep_job jhp j ARR :  jhp \in  arrivals_between arr_seq 0  t1 
~~ scheduled_at sched jhp t'
        apply  (completed_implies_not_scheduled _ _ H_completed_jobs_dont_execute).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat t' :  Datatypes_nat__canonical__eqtype_Equality NEQ :  t1 <= t' < t1 + (t1 + Δ - t1) jhp :  Job HP :  hep_job jhp j ARR :  jhp \in  arrivals_between arr_seq 0  t1 
completed_by sched jhp t'
        apply  completion_monotonic with  t1; first  by  move : NEQ => /andP[].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat t' :  Datatypes_nat__canonical__eqtype_Equality NEQ :  t1 <= t' < t1 + (t1 + Δ - t1) jhp :  Job HP :  hep_job jhp j ARR :  jhp \in  arrivals_between arr_seq 0  t1 
completed_by sched jhp t1
        apply  H_quiet_time => //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat t' :  Datatypes_nat__canonical__eqtype_Equality NEQ :  t1 <= t' < t1 + (t1 + Δ - t1) jhp :  Job HP :  hep_job jhp j ARR :  jhp \in  arrivals_between arr_seq 0  t1 
arrives_in arr_seq jhp
        - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat t' :  Datatypes_nat__canonical__eqtype_Equality NEQ :  t1 <= t' < t1 + (t1 + Δ - t1) jhp :  Job HP :  hep_job jhp j ARR :  jhp \in  arrivals_between arr_seq 0  t1 
arrives_in arr_seq jhp
  exact : in_arrivals_implies_arrived.
        - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat t' :  Datatypes_nat__canonical__eqtype_Equality NEQ :  t1 <= t' < t1 + (t1 + Δ - t1) jhp :  Job HP :  hep_job jhp j ARR :  jhp \in  arrivals_between arr_seq 0  t1 
arrived_before jhp t1
  exact : in_arrivals_implies_arrived_before.
      Qed .
 
    (** Next, assume that the processor is an ideal-progress, unit-speed uniprocessor. *) 
      Hypothesis  H_uni  : uniprocessor_model PState.
      Hypothesis  H_unit  : unit_service_proc_model PState.
      Hypothesis  H_progress  : ideal_progress_proc_model PState.
 
    (** Under this assumption, we prove that the total service within a 
        "non-quiet" time interval <<[t1, t1 + Δ)>> is exactly [Δ]. *) 
      Lemma  no_idle_time_within_non_quiet_time_interval :
      total_service_of_jobs_in sched (arrivals_between arr_seq 0  (t1 + Δ)) t1 (t1 + Δ) = Δ.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState 
total_service_of_jobs_in sched
  (arrivals_between arr_seq 0  (t1 + Δ)) t1 (t1 + Δ) =
Δ
      Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState 
total_service_of_jobs_in sched
  (arrivals_between arr_seq 0  (t1 + Δ)) t1 (t1 + Δ) =
Δ
        intros ; unfold  total_service_of_jobs_in, service_of_jobs, service_of_higher_or_equal_priority_jobs.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState 
\sum_(j <- arrivals_between arr_seq 0  (t1 + Δ) | predT
                                                 j)
   service_during sched j t1 (t1 + Δ) = Δ
        rewrite  -{3 }[Δ](sum_of_ones t1) exchange_big //=.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState 
\sum_(t1 <= j < t1 + Δ)
   \sum_(i <- arrivals_between arr_seq 0  (t1 + Δ))
      service_at sched i j = \sum_(t1 <= x < t1 + Δ) 1 
        apply /eqP; rewrite  eqn_leq; apply /andP; split .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState 
\sum_(t1 <= j < t1 + Δ)
   \sum_(i <- arrivals_between arr_seq 0  (t1 + Δ))
      service_at sched i j <=
\sum_(t1 <= x < t1 + Δ) 1 
        { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState 
\sum_(t1 <= j < t1 + Δ)
   \sum_(i <- arrivals_between arr_seq 0  (t1 + Δ))
      service_at sched i j <=
\sum_(t1 <= x < t1 + Δ) 1 
  rewrite  leq_sum // => t' _.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat 
\sum_(i <- arrivals_between arr_seq 0  (t1 + Δ))
   service_at sched i t' <= 1 
          have  SCH := @service_of_jobs_le_1 _ _ _ _ sched predT (arrivals_between arr_seq 0  (t1 + Δ)).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat SCH :  unit_service_proc_model PState ->
uniprocessor_model PState ->
uniq (arrivals_between arr_seq 0  (t1 + Δ)) ->
forall  t  : instant,
service_of_jobs_at sched predT
  (arrivals_between arr_seq 0  (t1 + Δ)) t <= 1  
\sum_(i <- arrivals_between arr_seq 0  (t1 + Δ))
   service_at sched i t' <= 1 
          by  eapply  leq_trans; [apply  leqnn | apply  SCH; eauto using  arrivals_uniq with  basic_rt_facts].  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState 
\sum_(t1 <= x < t1 + Δ) 1  <=
\sum_(t1 <= j < t1 + Δ)
   \sum_(i <- arrivals_between arr_seq 0  (t1 + Δ))
      service_at sched i j
        { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState 
\sum_(t1 <= x < t1 + Δ) 1  <=
\sum_(t1 <= j < t1 + Δ)
   \sum_(i <- arrivals_between arr_seq 0  (t1 + Δ))
      service_at sched i j
  rewrite  [in  X in  X <= _]big_nat_cond [in  X in  _ <= X]big_nat_cond //=
                leq_sum // => t' /andP [/andP [LT GT] _].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ 
0  <
\sum_(i <- arrivals_between arr_seq 0  (t1 + Δ))
   service_at sched i t'
          rewrite  sum_nat_gt0 filter_predT; apply /hasP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ 
exists2  x : Job,
  x \in  arrivals_between arr_seq 0  (t1 + Δ) &
  0  < service_at sched x t'
          have  [Idle|[jo Sched_jo]] := (scheduled_at_cases _ H_valid_arrival_time sched ltac :(auto ) ltac :(auto ) t').Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' 
exists2  x : Job,
  x \in  arrivals_between arr_seq 0  (t1 + Δ) &
  0  < service_at sched x t'
          { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' 
exists2  x : Job,
  x \in  arrivals_between arr_seq 0  (t1 + Δ) &
  0  < service_at sched x t'
  exfalso ; move : LT; rewrite  leq_eqVlt; move  => /orP [/eqP EQ|LT].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' EQ :  t1 = t' 
False 
            { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' EQ :  t1 = t' 
False 
  subst  t'.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState Idle :  is_idle arr_seq sched t1 GT :  t1 < t1 + Δ 
False 
              feed (H_no_quiet_time t1.+1 ); first  by  apply /andP; split . Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  ~ quiet_time t1.+1  service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState Idle :  is_idle arr_seq sched t1 GT :  t1 < t1 + Δ 
False 
              by  apply  H_no_quiet_time, idle_time_implies_quiet_time_at_the_next_time_instant.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' 
False 
            { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' 
False 
  feed (H_no_quiet_time t'); first  by  apply /andP; split ; last  rewrite  ltnW. Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' 
False 
              apply : H_no_quiet_time; intros  j_hp IN HP ARR.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' 
completed_by sched j_hp t'
              apply  contraT; intros  NCOMP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' 
false
              have  PEND : job_pending_at j_hp t'.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' 
job_pending_at j_hp t'
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' 
job_pending_at j_hp t'
  apply /andP; split .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' 
has_arrived j_hp t'
                - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' 
has_arrived j_hp t'
  by  rewrite  /has_arrived ltnW.
                - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' 
~~ completed_by sched j_hp t'
  by  move : NCOMP; apply  contra, completion_monotonic.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' PEND :  job_pending_at j_hp t' 
false
              apply  H_job_ready in  PEND => //; destruct  PEND as  [j' [ARR' [READY' _]]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t' 
false
              feed (H_work_conserving _ t' ARR'). Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t' 
backlogged sched j' t'
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration t' :  nat H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t' 
backlogged sched j' t'
  by  apply /andP; split  => //; apply : not_scheduled_when_idle.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t' :  nat H_work_conserving :  exists  j_other  : Job,
  scheduled_at sched j_other t'H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t' 
false
              exfalso ; move : H_work_conserving => [j_other +]; apply /negP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  t' :  nat H_work_conserving :  exists  j_other  : Job,
  scheduled_at sched j_other t'H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  ~ quiet_time t' service_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState GT :  t' < t1 + Δ Idle :  is_idle arr_seq sched t' LT :  t1 < t' j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t' NCOMP :  ~~ completed_by sched j_hp t' j' :  Job ARR' :  arrives_in arr_seq j' READY' :  job_ready sched j' t' j_other :  Job 
~~ scheduled_at sched j_other t'
              exact : not_scheduled_when_idle.  }   } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ jo :  Job Sched_jo :  scheduled_at sched jo t' 
exists2  x : Job,
  x \in  arrivals_between arr_seq 0  (t1 + Δ) &
  0  < service_at sched x t'
          { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ jo :  Job Sched_jo :  scheduled_at sched jo t' 
exists2  x : Job,
  x \in  arrivals_between arr_seq 0  (t1 + Δ) &
  0  < service_at sched x t'
  exists  jo .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ jo :  Job Sched_jo :  scheduled_at sched jo t' 
jo \in  arrivals_between arr_seq 0  (t1 + Δ)
            - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ jo :  Job Sched_jo :  scheduled_at sched jo t' 
jo \in  arrivals_between arr_seq 0  (t1 + Δ)
  apply  arrived_between_implies_in_arrivals => //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ jo :  Job Sched_jo :  scheduled_at sched jo t' 
arrived_between jo 0  (t1 + Δ)
              apply /andP; split => [//|].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ jo :  Job Sched_jo :  scheduled_at sched jo t' 
job_arrival jo < t1 + Δ
              apply  H_jobs_must_arrive_to_execute in  Sched_jo.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ jo :  Job Sched_jo :  has_arrived jo t' 
job_arrival jo < t1 + Δ
              by  apply  leq_ltn_trans with  t'.
            - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq t1 :  instant H_quiet_time :  quiet_time t1 Δ :  duration H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + Δ -> ~ quiet_time tservice_received_by_hep_jobs_released_during :=  fun 
  t_beg 
   t_end  : instant
=>
service_of_higher_or_equal_priority_jobs
  sched
  (arrivals_between
     arr_seq
     t_beg t_end)
  j t1 (t1 + Δ):  instant ->
instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t' :  nat LT :  t1 <= t' GT :  t' < t1 + Δ jo :  Job Sched_jo :  scheduled_at sched jo t' 
0  < service_at sched jo t'
  by  apply : H_progress.  }   } 
      Qed .
 
    End  QuietTimeAndServiceOfJobs .
 
  (** In this section, we show that the length of any busy interval 
      is bounded, as long as there is enough supply to accommodate 
      the workload of tasks with higher or equal priority. *) 
    Section  BoundingBusyInterval .
 
    (** Assume that the schedule is work-conserving, ... *) 
      Hypothesis  H_work_conserving  : work_conserving arr_seq sched.
 
    (** ... and there are no duplicate job arrivals, ... *) 
      Hypothesis  H_arrival_sequence_is_a_set :
      arrival_sequence_uniq arr_seq.
 
    (** ... and the priority relation is reflexive and transitive. *) 
      Hypothesis  H_priority_is_reflexive : reflexive_job_priorities JLFP.
      Hypothesis  H_priority_is_transitive : transitive_job_priorities JLFP.
 
    (** Next, we recall the notion of workload of all jobs released in 
        a given interval <<[t1, t2)>> that have higher-or-equal 
        priority w.r.t. the job [j] being analyzed. *) 
      Let  hp_workload  t1  t2  :=
      workload_of_hep_jobs arr_seq j t1 t2.
 
    (** With regard to the jobs with higher-or-equal priority that are released 
           in a given interval <<[t1, t2)>>, we also recall the service received by these 
           jobs in the same interval <<[t1, t2)>>. *) 
      Let  hp_service  t1  t2  :=
      service_of_higher_or_equal_priority_jobs
        sched (arrivals_between arr_seq t1 t2) j t1 t2.
 
    (** Now we begin the proof. First, we show that the busy interval is bounded. *) 
      Section  BoundingBusyInterval .
 
      (** Suppose that job [j] is pending at time [t_busy]. *) 
        Variable  t_busy  : instant.
        Hypothesis  H_j_is_pending  : job_pending_at j t_busy.
 
      (** First, we show that there must exist a busy interval prefix. *) 
        Section  LowerBound .
 
        (** Since job [j] is pending, there is a (potentially unbounded) 
            busy interval that starts no later than with the arrival of [j]. *) 
          Lemma  exists_busy_interval_prefix :
          exists  t1 ,
            busy_interval_prefix t1 t_busy.+1  /\
            t1 <= job_arrival j <= t_busy.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy 
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
          Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy 
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
            rename  H_j_is_pending into  PEND, H_work_conserving into  WORK.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy 
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
            destruct  ([exists  t :'I_t_busy.+1 , quiet_time_dec t]) eqn :EX.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy EX :  [exists  t , quiet_time_dec t] = true 
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
            - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy EX :  [exists  t , quiet_time_dec t] = true 
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
  set  last0 := \max_(t < t_busy.+1  | quiet_time_dec t) t.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy EX :  [exists  t , quiet_time_dec t] = true last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat 
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
              move : EX => /existsP [t EX].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t 
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
              have  PRED: quiet_time_dec last0 by  apply  (bigmax_pred t_busy.+1  (quiet_time_dec) t).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
              have  QUIET: quiet_time last0.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 
quiet_time last0
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 
quiet_time last0
  intros  j_hp IN HP ARR; move : PRED => /allP PRED; feed (PRED j_hp).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp last0 PRED :  {in  arrivals_before arr_seq last0,
  forall  x  : Job,
  hep_job x j ==> completed_by sched x last0} 
j_hp \in  arrivals_before arr_seq last0
                - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp last0 PRED :  {in  arrivals_before arr_seq last0,
  forall  x  : Job,
  hep_job x j ==> completed_by sched x last0} 
j_hp \in  arrivals_before arr_seq last0
  by  eapply  arrived_between_implies_in_arrivals; eauto .
                - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t j_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp last0 PRED :  (fun  x  : Job =>
 is_true
   (hep_job x j ==> completed_by sched x last0))
  j_hp 
completed_by sched j_hp last0
  by  rewrite  HP implyTb in  PRED.
              } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
              exists  last0 .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 
busy_interval_prefix last0 t_busy.+1  /\
last0 <= job_arrival j <= t_busy
              have  JAIN: last0 <= job_arrival j <= t_busy.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 
last0 <= job_arrival j <= t_busy
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 
last0 <= job_arrival j <= t_busy
  apply /andP; split ; last  by  move : PEND => /andP [ARR _].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 
last0 <= job_arrival j
                move_neq_up BEFORE. Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 BEFORE :  job_arrival j < last0 
False 
                move : PEND => /andP [_ NOTCOMP].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 BEFORE :  job_arrival j < last0 NOTCOMP :  ~~ completed_by sched j t_busy 
False 
                feed (QUIET j H_from_arrival_sequence); first  by  apply  H_priority_is_reflexive. Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  arrived_before j last0 ->
completed_by sched j last0 BEFORE :  job_arrival j < last0 NOTCOMP :  ~~ completed_by sched j t_busy 
False 
                specialize  (QUIET BEFORE).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  completed_by sched j last0 BEFORE :  job_arrival j < last0 NOTCOMP :  ~~ completed_by sched j t_busy 
False 
                apply  completion_monotonic with  (t' := t_busy) in  QUIET; first  by  rewrite  QUIET in  NOTCOMP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  completed_by sched j last0 BEFORE :  job_arrival j < last0 NOTCOMP :  ~~ completed_by sched j t_busy 
last0 <= t_busy
                  by  apply  bigmax_ltn_ord with  (i0 := t).
              } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 JAIN :  last0 <= job_arrival j <= t_busy 
busy_interval_prefix last0 t_busy.+1  /\
last0 <= job_arrival j <= t_busy
              repeat  split => //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 JAIN :  last0 <= job_arrival j <= t_busy 
last0 < t_busy.+1 
              * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 JAIN :  last0 <= job_arrival j <= t_busy 
last0 < t_busy.+1 
  by  apply  bigmax_ltn_ord with  (i0 := t).
              * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 JAIN :  last0 <= job_arrival j <= t_busy 
forall  t  : nat,
last0 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j t
  move  => t0 /andP [GTlast LTbusy] QUIET0.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 JAIN :  last0 <= job_arrival j <= t_busy t0 :  nat GTlast :  last0 < t0 LTbusy :  t0 < t_busy.+1  QUIET0 :  classical.quiet_time arr_seq sched j t0 
False 
                have  PRED0: quiet_time_dec t0 by  apply /quiet_time_P.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 JAIN :  last0 <= job_arrival j <= t_busy t0 :  nat GTlast :  last0 < t0 LTbusy :  t0 < t_busy.+1  QUIET0 :  classical.quiet_time arr_seq sched j t0 PRED0 :  quiet_time_dec t0 
False 
                move : (@leq_bigmax_cond _ (fun  (x : 'I_t_busy.+1 ) => quiet_time_dec x) (fun  x  => x) (Ordinal LTbusy) PRED0) => /=.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy last0 :=  \max_(t < t_busy.+1  | quiet_time_dec t) t :  nat t :  fintype_ordinal__canonical__fintype_Finite
  t_busy.+1  EX :  quiet_time_dec t PRED :  quiet_time_dec last0 QUIET :  quiet_time last0 JAIN :  last0 <= job_arrival j <= t_busy t0 :  nat GTlast :  last0 < t0 LTbusy :  t0 < t_busy.+1  QUIET0 :  classical.quiet_time arr_seq sched j t0 PRED0 :  quiet_time_dec t0 
t0 <= \max_(i < t_busy.+1  | quiet_time_dec i) i ->
False 
                by  rewrite  -/last0; move : GTlast; clear ; lia .
            - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy EX :  [exists  t , quiet_time_dec t] = false 
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
  apply  negbT in  EX; rewrite  negb_exists in  EX; move : EX => /forallP /= ALL.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy ALL :  forall  x  : 'I_t_busy.+1 , ~~ quiet_time_dec x
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
              exists  0 ; split ; last  by  apply /andP; split ; last  by  move : PEND => /andP [ARR _].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy ALL :  forall  x  : 'I_t_busy.+1 , ~~ quiet_time_dec x
busy_interval_prefix 0  t_busy.+1 
              repeat  split ; first  by  intros  j_hp _ _ ARR; rewrite  /arrived_before ltn0 in  ARR.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy ALL :  forall  x  : 'I_t_busy.+1 , ~~ quiet_time_dec x
forall  t  : nat,
0  < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j t
              * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy ALL :  forall  x  : 'I_t_busy.+1 , ~~ quiet_time_dec x
forall  t  : nat,
0  < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j t
  move  => t /andP [GE LT] /quiet_time_P QUIET.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy ALL :  forall  x  : 'I_t_busy.+1 , ~~ quiet_time_dec xt :  nat GE :  0  < tLT :  t < t_busy.+1  QUIET :  consistent_arrival_times arr_seq ->
classical.quiet_time_dec arr_seq sched j t 
False 
                apply /negP; [exact : (ALL (Ordinal LT))|] => /=.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy ALL :  forall  x  : 'I_t_busy.+1 , ~~ quiet_time_dec xt :  nat GE :  0  < tLT :  t < t_busy.+1  QUIET :  consistent_arrival_times arr_seq ->
classical.quiet_time_dec arr_seq sched j t 
quiet_time_dec t
                exact : QUIET.
              * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy ALL :  forall  x  : 'I_t_busy.+1 , ~~ quiet_time_dec x
0  <= job_arrival j < t_busy.+1 
  apply /andP; split => [//|].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  WORK :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant PEND :  job_pending_at j t_busy ALL :  forall  x  : 'I_t_busy.+1 , ~~ quiet_time_dec x
job_arrival j < t_busy.+1 
                by  move : PEND => /andP[].
          Qed .
 
        End  LowerBound .
 
      (** Next we prove that, if there is a point where the requested 
          workload is upper-bounded by the supply, then the busy 
          interval eventually ends. *) 
        Section  UpperBound .
 
        (** The following proofs assume that the processor is an ideal-progress, 
            unit-speed uniprocessor. *) 
          Hypothesis  H_uni  : uniprocessor_model PState.
          Hypothesis  H_unit  : unit_service_proc_model PState.
          Hypothesis  H_progress  : ideal_progress_proc_model PState.
 
        (** Consider any busy interval prefix of job [j]. *) 
          Variable  t1  : instant.
          Hypothesis  H_is_busy_prefix  : busy_interval_prefix t1 t_busy.+1 .
 
        (** Let's define A as the relative arrival time of job [j] 
            (with respect to time [t1]). *) 
          Let  A  := job_arrival j - t1.
 
        (** Let [priority_inversion_bound] be a constant that bounds 
            the length of any priority inversion. *) 
          Variable  priority_inversion_bound  : instant -> instant.
          Hypothesis  H_priority_inversion_is_bounded  :
          is_priority_inversion_bounded_by priority_inversion_bound.
 
        (** Next, assume that for some positive delta, the sum of requested workload 
            at time [t1 + delta] and constant priority_inversion_bound is bounded by 
            delta (i.e., the supply). *) 
          Variable  delta  : duration.
          Hypothesis  H_delta_positive  : delta > 0 .
          Hypothesis  H_workload_is_bounded  :
          priority_inversion_bound A + hp_workload t1 (t1 + delta) <= delta.
 
        (** If there is a quiet time by time [t1 + delta], it 
            trivially follows that the busy interval is bounded. 
            Thus, let's consider first the harder case where there is 
            no quiet time, which turns out to be impossible. *) 
          Section  CannotBeBusyForSoLong .
 
          (** Assume that there is no quiet time in the interval <<(t1, t1 + delta]>>. *) 
            Hypothesis  H_no_quiet_time :
            forall  t , t1 < t <= t1 + delta -> ~ quiet_time t.
 
          (** Since the interval is always non-quiet, the processor is 
              always busy with tasks of higher-or-equal priority or 
              some lower priority job which was scheduled, i.e., the 
              sum of service done by jobs with actual arrival time in 
              <<[t1, t1 + delta)>> and priority inversion equals 
              [delta]. *) 
            Lemma  busy_interval_has_uninterrupted_service :
            delta <= priority_inversion_bound A + hp_service t1 (t1 + delta).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time t
delta <=
priority_inversion_bound A +
hp_service t1 (t1 + delta)
            Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time t
delta <=
priority_inversion_bound A +
hp_service t1 (t1 + delta)
              move : H_is_busy_prefix => [H_strictly_larger [H_quiet [_ EXj]]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  
delta <=
priority_inversion_bound A +
hp_service t1 (t1 + delta)
              destruct  (delta <= priority_inversion_bound A) eqn :KLEΔ.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  (delta <= priority_inversion_bound A) = true 
delta <=
priority_inversion_bound A +
hp_service t1 (t1 + delta)
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  (delta <= priority_inversion_bound A) = true 
delta <=
priority_inversion_bound A +
hp_service t1 (t1 + delta)
  by  apply  leq_trans with  (priority_inversion_bound A); last  rewrite  leq_addr.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  (delta <= priority_inversion_bound A) = false 
delta <=
priority_inversion_bound A +
hp_service t1 (t1 + delta)
              apply  negbT in  KLEΔ; rewrite  -ltnNge in  KLEΔ.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta 
delta <=
priority_inversion_bound A +
hp_service t1 (t1 + delta)
              apply  leq_trans with  (cumulative_priority_inversion arr_seq sched j t1 (t1 + delta) + hp_service t1 (t1 + delta)).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta 
delta <=
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta) + hp_service t1 (t1 + delta)
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta 
delta <=
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta) + hp_service t1 (t1 + delta)
  rewrite  /hp_service hep_jobs_receive_no_service_before_quiet_time // /service_of_higher_or_equal_priority_jobs.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta 
delta <=
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta) +
service_of_jobs sched (hep_job^~ j)
  (arrivals_between arr_seq 0  (t1 + delta)) t1
  (t1 + delta)
                rewrite  service_of_jobs_negate_pred // addnBA; last  by  apply  service_of_jobs_pred_impl; eauto  2 .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta 
delta <=
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta) +
total_service_of_jobs_in sched
  (arrivals_between arr_seq 0  (t1 + delta)) t1
  (t1 + delta) -
service_of_jobs sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t1
  (t1 + delta)
                rewrite  addnC -addnBA; first  by  rewrite  no_idle_time_within_non_quiet_time_interval // leq_addr.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta 
service_of_jobs sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t1
  (t1 + delta) <=
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta)
                rewrite  service_of_jobs_sum_over_time_interval //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta 
\sum_(t1 <= t < t1 + delta)
   service_of_jobs_at sched
     (fun  j0  : Job => ~~ hep_job j0 j)
     (arrivals_between arr_seq 0  (t1 + delta)) t <=
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta)
                apply  leq_sum_seq; move  => t II _; rewrite  mem_index_iota in  II; move : II => /andP [GEi LEt].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta 
service_of_jobs_at sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t <=
priority_inversion arr_seq sched j t
                have  [IDLE|[j' SCHED]] := (scheduled_at_cases _ H_valid_arrival_time sched ltac :(auto ) ltac :(auto ) t).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta IDLE :  is_idle arr_seq sched t 
service_of_jobs_at sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t <=
priority_inversion arr_seq sched j t
                { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta IDLE :  is_idle arr_seq sched t 
service_of_jobs_at sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t <=
priority_inversion arr_seq sched j t
  apply  leq_trans with  0 ; [rewrite  leqn0; apply /eqP | by  apply  leq0n].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta IDLE :  is_idle arr_seq sched t 
service_of_jobs_at sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t = 0 
                  apply : big1 => j' NHEP.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta IDLE :  is_idle arr_seq sched t j' :  Job NHEP :  ~~ hep_job j' j 
service_at sched j' t = 0 
                  by  apply /not_scheduled_implies_no_service/not_scheduled_when_idle.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t 
service_of_jobs_at sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t <=
priority_inversion arr_seq sched j t
                { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t 
service_of_jobs_at sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t <=
priority_inversion arr_seq sched j t
  destruct  (hep_job j' j) eqn :PRIO1.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = true 
service_of_jobs_at sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t <=
priority_inversion arr_seq sched j t
                  - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = true 
service_of_jobs_at sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t <=
priority_inversion arr_seq sched j t
  rewrite  service_of_jobs_nsched_or_unsat//.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = true 
forall  j0  : Job,
j0 \in  arrivals_between arr_seq 0  (t1 + delta) ->
~~ (~~ hep_job j0 j && scheduled_at sched j0 t)
                    intros  j'' IN; apply /andP; intros  [NHEP SCHED''].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = true j'' :  Job IN :  j'' \in  arrivals_between arr_seq 0  (t1 + delta) NHEP :  ~~ hep_job j'' j SCHED'' :  scheduled_at sched j'' t 
False 
                    have  EQ: j'' = j' by  eapply  H_uni; eauto  2 .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = true j'' :  Job IN :  j'' \in  arrivals_between arr_seq 0  (t1 + delta) NHEP :  ~~ hep_job j'' j SCHED'' :  scheduled_at sched j'' t EQ :  j'' = j' 
False 
                    by  subst  j''; rewrite  PRIO1 in  NHEP.
                  - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = false 
service_of_jobs_at sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t <=
priority_inversion arr_seq sched j t
  have  SCH := @service_of_jobs_le_1 _ _ _ _ _ (fun  i  => ~~ hep_job i j) (arrivals_between arr_seq 0  (t1 + delta)).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = false SCH :  forall  p  : ProcessorState Job,
unit_service_proc_model p ->
uniprocessor_model p ->
forall  (s  : schedule p) (j0  : JLFP_policy Job),
uniq (arrivals_between arr_seq 0  (t1 + delta)) ->
forall  t  : instant,
service_of_jobs_at s
  (fun  i  : Job => ~~ hep_job i j)
  (arrivals_between arr_seq 0  (t1 + delta)) t <=
1 
service_of_jobs_at sched
  (fun  j0  : Job => ~~ hep_job j0 j)
  (arrivals_between arr_seq 0  (t1 + delta)) t <=
priority_inversion arr_seq sched j t
                    eapply  leq_trans; first  by  apply : SCH; eauto using  arrivals_uniq with  basic_rt_facts.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = false SCH :  forall  p  : ProcessorState Job,
unit_service_proc_model p ->
uniprocessor_model p ->
forall  (s  : schedule p) (j0  : JLFP_policy Job),
uniq (arrivals_between arr_seq 0  (t1 + delta)) ->
forall  t  : instant,
service_of_jobs_at s
  (fun  i  : Job => ~~ hep_job i j)
  (arrivals_between arr_seq 0  (t1 + delta)) t <=
1 
0  < priority_inversion arr_seq sched j t
                    clear  SCH; rewrite  lt0b; apply /andP; split .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = false 
j \notin scheduled_jobs_at arr_seq sched t
                    + Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = false 
j \notin scheduled_jobs_at arr_seq sched t
  apply /negP; intros  SCHED'.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = false SCHED' :  j \in  scheduled_jobs_at arr_seq sched t 
False 
                      have  EQ : j = j'.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = false SCHED' :  j \in  scheduled_jobs_at arr_seq sched t 
j = j'
                      { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = false SCHED' :  j \in  scheduled_jobs_at arr_seq sched t 
j = j'
  apply : H_uni SCHED.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job PRIO1 :  hep_job j' j = false SCHED' :  j \in  scheduled_jobs_at arr_seq sched t 
scheduled_at sched j t
                        by  rewrite  -(scheduled_jobs_at_iff arr_seq).  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = false SCHED' :  j \in  scheduled_jobs_at arr_seq sched t EQ :  j = j' 
False 
                      subst ; move : PRIO1 => /negP PRIO1; apply : PRIO1.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j' :  Job is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j'] :  (duration ->
 duration) -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j' t1]:  instant -> instant -> Prop  busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j' t1]:  instant -> instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j'] :  instant -> bool quiet_time :=  [eta classical.quiet_time arr_seq sched j'] :  instant -> Prop  H_job_cost_positive :  job_cost_positive j' H_job_task :  job_of_task tsk j' H_from_arrival_sequence :  arrives_in arr_seq j' H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2)
  j' t1 t2:  instant -> instant -> nat hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j' t1]:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j' t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant A :=  job_arrival j' - t1 :  nat H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_strictly_larger :  t1 < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta EXj :  t1 <= job_arrival j' < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j' t1 t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta SCHED :  scheduled_at sched j' t SCHED' :  j' \in  scheduled_jobs_at arr_seq sched t 
hep_job j' j'
                      apply  H_priority_is_reflexive.
                    + Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = false 
has (fun  jlp  : Job => ~~ hep_job jlp j)
  (scheduled_jobs_at arr_seq sched t)
  apply /hasP; exists  j' ; last  by  rewrite  PRIO1.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta t :  Datatypes_nat__canonical__eqtype_Equality GEi :  t1 <= t LEt :  t < t1 + delta j' :  Job SCHED :  scheduled_at sched j' t PRIO1 :  hep_job j' j = false 
j' \in  scheduled_jobs_at arr_seq sched t
                      by  rewrite  scheduled_jobs_at_iff.  }   } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta 
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta) + hp_service t1 (t1 + delta) <=
priority_inversion_bound A +
hp_service t1 (t1 + delta)
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta 
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta) + hp_service t1 (t1 + delta) <=
priority_inversion_bound A +
hp_service t1 (t1 + delta)
  rewrite  leq_add2r.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta 
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta) <= priority_inversion_bound A
                destruct  (t1 + delta <= t_busy.+1 ) eqn :NEQ; [ | apply  negbT in  NEQ; rewrite  -ltnNge in  NEQ].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta NEQ :  (t1 + delta <= t_busy.+1 ) = true 
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta) <= priority_inversion_bound A
                - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta NEQ :  (t1 + delta <= t_busy.+1 ) = true 
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta) <= priority_inversion_bound A
  apply  leq_trans with  (cumulative_priority_inversion arr_seq sched j t1 t_busy.+1 ); last  eauto  2 .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta NEQ :  (t1 + delta <= t_busy.+1 ) = true 
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta) <=
cumulative_priority_inversion arr_seq sched j t1
  t_busy.+1 
                  by  rewrite  [in  X in  _ <= X](cumulative_priority_inversion_cat _ _ _ (t1 + delta)) //= leq_addr.
                - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta NEQ :  t_busy.+1  < t1 + delta 
cumulative_priority_inversion arr_seq sched j t1
  (t1 + delta) <= priority_inversion_bound A
   apply  H_priority_inversion_is_bounded; repeat  split => //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta NEQ :  t_busy.+1  < t1 + delta 
t1 < t1 + delta
                   + Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta NEQ :  t_busy.+1  < t1 + delta 
t1 < t1 + delta
  by  rewrite  -addn1 leq_add2l.
                   + Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta NEQ :  t_busy.+1  < t1 + delta 
forall  t  : nat,
t1 < t < t1 + delta ->
~ classical.quiet_time arr_seq sched j t
  by  move  => t' /andP [LT GT]; apply  H_no_quiet_time; apply /andP; split ; last  rewrite  ltnW.
                   + Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tH_strictly_larger :  t1 < t_busy.+1  H_quiet :  classical.quiet_time arr_seq sched j t1 EXj :  t1 <= job_arrival j < t_busy.+1  KLEΔ :  priority_inversion_bound A < delta NEQ :  t_busy.+1  < t1 + delta 
t1 <= job_arrival j < t1 + delta
  by  move : EXj => /andP [T1 T2]; apply /andP; split ; last  apply  ltn_trans with  (t_busy.+1 ).  } 
            Qed .
 
          (** Moreover, the fact that the interval is not quiet also 
              implies that there's more workload requested than 
              service received. *) 
            Lemma  busy_interval_too_much_workload :
            hp_workload t1 (t1 + delta) > hp_service t1 (t1 + delta).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time t
hp_service t1 (t1 + delta) <
hp_workload t1 (t1 + delta)
            Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time t
hp_service t1 (t1 + delta) <
hp_workload t1 (t1 + delta)
              have  PEND := not_quiet_implies_exists_pending_job.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time tPEND :  forall  t1  t2  : instant,
t1 <= t2 ->
quiet_time t1 ->
~ quiet_time t2 ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
hp_service t1 (t1 + delta) <
hp_workload t1 (t1 + delta)
              rename  H_no_quiet_time into  NOTQUIET,
            H_is_busy_prefix into  PREFIX.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  forall  t1  t2  : instant,
t1 <= t2 ->
quiet_time t1 ->
~ quiet_time t2 ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2
hp_service t1 (t1 + delta) <
hp_workload t1 (t1 + delta)
              set  l := arrivals_between arr_seq t1 (t1 + delta).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  forall  t1  t2  : instant,
t1 <= t2 ->
quiet_time t1 ->
~ quiet_time t2 ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2l :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job 
hp_service t1 (t1 + delta) <
hp_workload t1 (t1 + delta)
              set  hep := hep_job.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  forall  t1  t2  : instant,
t1 <= t2 ->
quiet_time t1 ->
~ quiet_time t2 ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2l :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job 
hp_service t1 (t1 + delta) <
hp_workload t1 (t1 + delta)
              unfold  hp_service, service_of_higher_or_equal_priority_jobs, service_of_jobs,
            hp_workload, workload_of_hep_jobs, workload_of_jobs.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  forall  t1  t2  : instant,
t1 <= t2 ->
quiet_time t1 ->
~ quiet_time t2 ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2l :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job 
\sum_(j0 <- arrivals_between arr_seq t1 (t1 + delta) | 
hep_job j0 j) service_during sched j0 t1 (t1 + delta) <
\sum_(j0 <- arrivals_between arr_seq t1 (t1 + delta) | 
hep_job j0 j) job_cost j0
              fold  l hep.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  forall  t1  t2  : instant,
t1 <= t2 ->
quiet_time t1 ->
~ quiet_time t2 ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2l :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job 
\sum_(j0 <- l | hep j0 j)
   service_during sched j0 t1 (t1 + delta) <
\sum_(j0 <- l | hep j0 j) job_cost j0
              move : (PREFIX) => [_ [QUIET _]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  forall  t1  t2  : instant,
t1 <= t2 ->
quiet_time t1 ->
~ quiet_time t2 ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2l :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 
\sum_(j0 <- l | hep j0 j)
   service_during sched j0 t1 (t1 + delta) <
\sum_(j0 <- l | hep j0 j) job_cost j0
              move : (NOTQUIET) => NOTQUIET'.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  forall  t1  t2  : instant,
t1 <= t2 ->
quiet_time t1 ->
~ quiet_time t2 ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2l :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time t
\sum_(j0 <- l | hep j0 j)
   service_during sched j0 t1 (t1 + delta) <
\sum_(j0 <- l | hep j0 j) job_cost j0
              feed (NOTQUIET' (t1 + delta)). Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  forall  t1  t2  : instant,
t1 <= t2 ->
quiet_time t1 ->
~ quiet_time t2 ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2l :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time t
t1 < t1 + delta <= t1 + delta
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  forall  t1  t2  : instant,
t1 <= t2 ->
quiet_time t1 ->
~ quiet_time t2 ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2l :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time t
t1 < t1 + delta <= t1 + delta
  by  apply /andP; split ; first  rewrite  -addn1 leq_add2l.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  forall  t1  t2  : instant,
t1 <= t2 ->
quiet_time t1 ->
~ quiet_time t2 ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 t2 /\
  hep_job j_hp j /\ ~ job_completed_by j_hp t2l :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) 
\sum_(j0 <- l | hep j0 j)
   service_during sched j0 t1 (t1 + delta) <
\sum_(j0 <- l | hep j0 j) job_cost j0
              feed (PEND t1 (t1 + delta)); first  by  apply  leq_addr. Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  quiet_time t1 ->
~ quiet_time (t1 + delta) ->
exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 (t1 + delta) /\
  hep_job j_hp j /\
  ~ job_completed_by j_hp (t1 + delta) l :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) 
\sum_(j0 <- l | hep j0 j)
   service_during sched j0 t1 (t1 + delta) <
\sum_(j0 <- l | hep j0 j) job_cost j0
              specialize  (PEND QUIET NOTQUIET').Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tPEND :  exists  j_hp  : Job,
  arrives_in arr_seq j_hp /\
  arrived_between j_hp t1 (t1 + delta) /\
  hep_job j_hp j /\
  ~ job_completed_by j_hp (t1 + delta)l :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) 
\sum_(j0 <- l | hep j0 j)
   service_during sched j0 t1 (t1 + delta) <
\sum_(j0 <- l | hep j0 j) job_cost j0
              move : PEND => [j0 [ARR0 [/andP [GE0 LT0] [HP0 NOTCOMP0]]]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) 
\sum_(j0 <- l | hep j0 j)
   service_during sched j0 t1 (t1 + delta) <
\sum_(j0 <- l | hep j0 j) job_cost j0
              have  IN0: j0 \in  l.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) 
j0 \in  l
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) 
j0 \in  l
  by  apply : arrived_between_implies_in_arrivals => //; apply /andP; split .  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l 
\sum_(j0 <- l | hep j0 j)
   service_during sched j0 t1 (t1 + delta) <
\sum_(j0 <- l | hep j0 j) job_cost j0
              have  UNIQ: uniq l by  eapply  arrivals_uniq; eauto  1 .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l UNIQ :  uniq l 
\sum_(j0 <- l | hep j0 j)
   service_during sched j0 t1 (t1 + delta) <
\sum_(j0 <- l | hep j0 j) job_cost j0
              rewrite  big_mkcond [\sum_(_ <- _ | _ _ _)_]big_mkcond //=.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l UNIQ :  uniq l 
\sum_(i <- l)
   (if  hep i j
    then  service_during sched i t1 (t1 + delta)
    else  0 ) <
\sum_(i <- l) (if  hep i j then  job_cost i else  0 )
              rewrite  (bigD1_seq j0)//= (bigD1_seq j0)//= /hep HP0.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l UNIQ :  uniq l 
service_during sched j0 t1 (t1 + delta) +
\sum_(i <- l | i != j0)
   (if  hep_job i j
    then  service_during sched i t1 (t1 + delta)
    else  0 ) <
job_cost j0 +
\sum_(i <- l | i != j0)
   (if  hep_job i j then  job_cost i else  0 )
              rewrite  -add1n addnA [1  + _]addnC addn1.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l UNIQ :  uniq l 
(service_during sched j0 t1 (t1 + delta)).+1  +
\sum_(i <- l | i != j0)
   (if  hep_job i j
    then  service_during sched i t1 (t1 + delta)
    else  0 ) <=
job_cost j0 +
\sum_(i <- l | i != j0)
   (if  hep_job i j then  job_cost i else  0 )
              apply  leq_add; last first .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l UNIQ :  uniq l 
\sum_(i <- l | i != j0)
   (if  hep_job i j
    then  service_during sched i t1 (t1 + delta)
    else  0 ) <=
\sum_(i <- l | i != j0)
   (if  hep_job i j then  job_cost i else  0 )
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l UNIQ :  uniq l 
\sum_(i <- l | i != j0)
   (if  hep_job i j
    then  service_during sched i t1 (t1 + delta)
    else  0 ) <=
\sum_(i <- l | i != j0)
   (if  hep_job i j then  job_cost i else  0 )
  apply : leq_sum=>  j1 NEQ.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l UNIQ :  uniq l j1 :  Job NEQ :  j1 != j0 
(if  hep_job j1 j
 then  service_during sched j1 t1 (t1 + delta)
 else  0 ) <= (if  hep_job j1 j then  job_cost j1 else  0 )
                case : (hep_job _ _) => //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l UNIQ :  uniq l j1 :  Job NEQ :  j1 != j0 
service_during sched j1 t1 (t1 + delta) <= job_cost j1
                by  apply : cumulative_service_le_job_cost.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l UNIQ :  uniq l 
service_during sched j0 t1 (t1 + delta) < job_cost j0
              rewrite  ignore_service_before_arrival//.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l UNIQ :  uniq l 
service_during sched j0 (job_arrival j0) (t1 + delta) <
job_cost j0
              rewrite  -(ignore_service_before_arrival _ _ _ 0 )//.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant PREFIX :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta NOTQUIET :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tl :=  arrivals_between arr_seq t1 (t1 + delta) :  seq Job hep :=  hep_job :  rel Job QUIET :  classical.quiet_time arr_seq sched j t1 NOTQUIET' :  ~ quiet_time (t1 + delta) j0 :  Job ARR0 :  arrives_in arr_seq j0 GE0 :  t1 <= job_arrival j0 LT0 :  job_arrival j0 < t1 + delta HP0 :  hep_job j0 j NOTCOMP0 :  ~ job_completed_by j0 (t1 + delta) IN0 :  j0 \in  l UNIQ :  uniq l 
service_during sched j0 0  (t1 + delta) < job_cost j0
              by  rewrite  ltnNge; apply /negP.
            Qed .
 
          (** Using the two lemmas above, we infer that the workload 
              is larger than the interval length. However, this 
              contradicts the assumption [H_workload_is_bounded]. *) 
            Corollary  busy_interval_workload_larger_than_interval :
            priority_inversion_bound A + hp_workload t1 (t1 + delta) > delta.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time t
delta <
priority_inversion_bound A +
hp_workload t1 (t1 + delta)
            Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time t
delta <
priority_inversion_bound A +
hp_workload t1 (t1 + delta)
              apply  leq_ltn_trans with  (priority_inversion_bound A + hp_service t1 (t1 + delta)).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time t
delta <=
priority_inversion_bound A +
hp_service t1 (t1 + delta)
              - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time t
delta <=
priority_inversion_bound A +
hp_service t1 (t1 + delta)
  by  apply  busy_interval_has_uninterrupted_service.
              - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time t
priority_inversion_bound A +
hp_service t1 (t1 + delta) <
priority_inversion_bound A +
hp_workload t1 (t1 + delta)
  rewrite  ltn_add2l.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta H_no_quiet_time :  forall  t  : nat,
t1 < t <= t1 + delta ->
~ quiet_time t
hp_service t1 (t1 + delta) <
hp_workload t1 (t1 + delta)
                by  apply  busy_interval_too_much_workload.
            Qed .
 
          End  CannotBeBusyForSoLong .
 
        (** Since the interval cannot remain busy for so long, we 
            prove that the busy interval finishes at some point [t2 <= 
            t1 + delta]. *) 
          Lemma  busy_interval_is_bounded :
          exists  t2 ,
            t2 <= t1 + delta /\
            busy_interval t1 t2.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta 
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2
          Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta 
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2
            move : H_is_busy_prefix => [LT [QT [NQ NEQ]]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2
            destruct  ([exists  t2 :'I_(t1 + delta).+1 , (t2 > t1) && quiet_time_dec t2]) eqn :EX.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  EX :  [exists  t2 , (t1 < t2) && quiet_time_dec t2] =
true 
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2
            - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  EX :  [exists  t2 , (t1 < t2) && quiet_time_dec t2] =
true 
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2
  have  EX': exists  (t2  : instant), ((t1 < t2 <= t1 + delta) && quiet_time_dec t2).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  EX :  [exists  t2 , (t1 < t2) && quiet_time_dec t2] =
true 
exists  t2  : instant,
  (t1 < t2 <= t1 + delta) && quiet_time_dec t2
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  EX :  [exists  t2 , (t1 < t2) && quiet_time_dec t2] =
true 
exists  t2  : instant,
  (t1 < t2 <= t1 + delta) && quiet_time_dec t2
  move : EX => /existsP [t2 /andP [LE QUIET]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  fintype_ordinal__canonical__fintype_Finite
  (t1 + delta).+1  LE :  t1 < t2 QUIET :  quiet_time_dec t2 
exists  t2  : instant,
  (t1 < t2 <= t1 + delta) && quiet_time_dec t2
                exists  t2 ; apply /andP; split => [|//].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  fintype_ordinal__canonical__fintype_Finite
  (t1 + delta).+1  LE :  t1 < t2 QUIET :  quiet_time_dec t2 
t1 < t2 <= t1 + delta
                by  apply /andP; split ; last  (rewrite  -ltnS; apply  ltn_ord).  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  EX :  [exists  t2 , (t1 < t2) && quiet_time_dec t2] =
true EX' :  exists  t2  : instant,
  (t1 < t2 <= t1 + delta) && quiet_time_dec t2
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2
              move : (ex_minnP EX') => [t2 /andP [/andP [GT LE] QUIET] MIN]; clear  EX EX'.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= n
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2
              exists  t2 ; split ; [ | split ; [repeat  split  | ]] => //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= n
forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j t
              + Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= n
forall  t  : nat,
t1 < t < t2 ->
~ classical.quiet_time arr_seq sched j t
  move  => t /andP [GT1 LT2] BUG.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nt :  nat GT1 :  t1 < t LT2 :  t < t2 BUG :  classical.quiet_time arr_seq sched j t 
False 
                feed (MIN t); first  (apply /andP; split ). Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nt :  nat GT1 :  t1 < t LT2 :  t < t2 BUG :  classical.quiet_time arr_seq sched j t 
t1 < t <= t1 + delta
                * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nt :  nat GT1 :  t1 < t LT2 :  t < t2 BUG :  classical.quiet_time arr_seq sched j t 
t1 < t <= t1 + delta
  by  apply /andP; split ; last  by  apply  leq_trans with  (n := t2); eauto using  ltnW.
                * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nt :  nat GT1 :  t1 < t LT2 :  t < t2 BUG :  classical.quiet_time arr_seq sched j t 
quiet_time_dec t
  by  apply /quiet_time_P.
                * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 t :  nat MIN :  t2 <= t GT1 :  t1 < t LT2 :  t < t2 BUG :  classical.quiet_time arr_seq sched j t 
False 
  by  apply  leq_ltn_trans with  (p := t2) in  MIN; first  by  rewrite  ltnn in  MIN.
              + Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= n
t1 <= job_arrival j < t2
  move : NEQ => /andP [IN1 IN2].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tt2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nIN1 :  t1 <= job_arrival j IN2 :  job_arrival j < t_busy.+1  
t1 <= job_arrival j < t2
                apply /andP; split => [//|].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tt2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nIN1 :  t1 <= job_arrival j IN2 :  job_arrival j < t_busy.+1  
job_arrival j < t2
                apply  leq_ltn_trans with  t_busy; eauto  2 .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tt2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nIN1 :  t1 <= job_arrival j IN2 :  job_arrival j < t_busy.+1  
t_busy < t2
                rewrite  ltnNge; apply /negP; intros  CONTR.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tt2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nIN1 :  t1 <= job_arrival j IN2 :  job_arrival j < t_busy.+1  CONTR :  t2 <= t_busy 
False 
                apply  NQ with  t2.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tt2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nIN1 :  t1 <= job_arrival j IN2 :  job_arrival j < t_busy.+1  CONTR :  t2 <= t_busy 
t1 < t2 < t_busy.+1 
                * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tt2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nIN1 :  t1 <= job_arrival j IN2 :  job_arrival j < t_busy.+1  CONTR :  t2 <= t_busy 
t1 < t2 < t_busy.+1 
  by  apply /andP; split ; last  rewrite  ltnS.
                * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tt2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nIN1 :  t1 <= job_arrival j IN2 :  job_arrival j < t_busy.+1  CONTR :  t2 <= t_busy 
classical.quiet_time arr_seq sched j t2
  by  apply /quiet_time_P.
              + Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= n
classical.quiet_time arr_seq sched j t2
  intros  j_hp IN HP ARR.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta QUIET :  quiet_time_dec t2 MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nj_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t2 
completed_by sched j_hp t2
                move : QUIET => /allP QUIET; feed (QUIET j_hp).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nj_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t2 QUIET :  {in  arrivals_before arr_seq t2,
  forall  x  : Job,
  hep_job x j ==> completed_by sched x t2} 
j_hp \in  arrivals_before arr_seq t2
                * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nj_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t2 QUIET :  {in  arrivals_before arr_seq t2,
  forall  x  : Job,
  hep_job x j ==> completed_by sched x t2} 
j_hp \in  arrivals_before arr_seq t2
  by  eapply  arrived_between_implies_in_arrivals; last  apply  ARR.
                * Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  t2 :  nat GT :  t1 < t2 LE :  t2 <= t1 + delta MIN :  forall  n  : nat,
(t1 < n <= t1 + delta) && quiet_time_dec n ->
t2 <= nj_hp :  Job IN :  arrives_in arr_seq j_hp HP :  hep_job j_hp j ARR :  arrived_before j_hp t2 QUIET :  (fun  x  : Job =>
 is_true
   (hep_job x j ==> completed_by sched x t2))
  j_hp 
completed_by sched j_hp t2
  by  move : QUIET => /implyP QUIET; apply  QUIET.
            - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  EX :  [exists  t2 , (t1 < t2) && quiet_time_dec t2] =
false 
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2
  apply  negbT in  EX; rewrite  negb_exists in  EX; move : EX => /forallP /= ALL'.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  ALL' :  forall  x  : 'I_(t1 + delta).+1 ,
~~ ((t1 < x) && quiet_time_dec x)
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2
              have  ALL: forall  t , t1 < t <= t1 + delta -> ~ quiet_time t.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  ALL' :  forall  x  : 'I_(t1 + delta).+1 ,
~~ ((t1 < x) && quiet_time_dec x)
forall  t  : nat, t1 < t <= t1 + delta -> ~ quiet_time t
              { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  ALL' :  forall  x  : 'I_(t1 + delta).+1 ,
~~ ((t1 < x) && quiet_time_dec x)
forall  t  : nat, t1 < t <= t1 + delta -> ~ quiet_time t
  move  => t /andP [GTt LEt] QUIET; rewrite  -ltnS in  LEt.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  ALL' :  forall  x  : 'I_(t1 + delta).+1 ,
~~ ((t1 < x) && quiet_time_dec x)t :  nat GTt :  t1 < t QUIET :  quiet_time t LEt :  t < (t1 + delta).+1  
False 
                move : (ALL' (Ordinal LEt)) => /negP /=; apply .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  ALL' :  forall  x  : 'I_(t1 + delta).+1 ,
~~ ((t1 < x) && quiet_time_dec x)t :  nat GTt :  t1 < t QUIET :  quiet_time t LEt :  t < (t1 + delta).+1  
(t1 < t) && quiet_time_dec t
                by  apply /andP; split  => //; apply /quiet_time_P.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  ALL' :  forall  x  : 'I_(t1 + delta).+1 ,
~~ ((t1 < x) && quiet_time_dec x)ALL :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time t
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2
              clear  ALL'; exfalso .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  ALL :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time t
False 
              have  TOOMUCH := busy_interval_workload_larger_than_interval.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  ALL :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tTOOMUCH :  (forall  t  : nat,
 t1 < t <= t1 + delta -> ~ quiet_time t) ->
delta <
priority_inversion_bound A +
hp_workload t1 (t1 + delta) 
False 
              have  BOUNDED := H_workload_is_bounded.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat t_busy :  instant H_j_is_pending :  job_pending_at j t_busy H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState t1 :  instant H_is_busy_prefix :  busy_interval_prefix t1 t_busy.+1  A :=  job_arrival j - t1 :  nat priority_inversion_bound :  instant -> instant H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <=
delta LT :  t1 < t_busy.+1  QT :  classical.quiet_time arr_seq sched j t1 NQ :  forall  t  : nat,
t1 < t < t_busy.+1  ->
~ classical.quiet_time arr_seq sched j tNEQ :  t1 <= job_arrival j < t_busy.+1  ALL :  forall  t  : nat,
t1 < t <= t1 + delta -> ~ quiet_time tTOOMUCH :  (forall  t  : nat,
 t1 < t <= t1 + delta -> ~ quiet_time t) ->
delta <
priority_inversion_bound A +
hp_workload t1 (t1 + delta) BOUNDED :  priority_inversion_bound A +
hp_workload t1 (t1 + delta) <= delta 
False 
              by  move : (leq_trans (TOOMUCH ALL) BOUNDED); rewrite  ltnn.
          Qed .
 
        End  UpperBound .
 
      End  BoundingBusyInterval .
 
    (** The following proofs assume that the processor is an ideal-progress, 
        unit-speed uniprocessor. *) 
      Hypothesis  H_uni  : uniprocessor_model PState.
      Hypothesis  H_unit  : unit_service_proc_model PState.
      Hypothesis  H_progress  : ideal_progress_proc_model PState.
 
    (** In this section, we show that from a workload bound we can 
        infer the existence of a busy interval. *) 
      Section  BusyIntervalFromWorkloadBound .
 
      (** Let [priority_inversion_bound] be a constant that bounds the 
          length of a priority inversion. *) 
        Variable  priority_inversion_bound  : duration -> duration.
        Hypothesis  H_priority_inversion_is_bounded  :
        is_priority_inversion_bounded_by priority_inversion_bound .
 
      (** Assume that for some positive delta, the sum of requested workload at 
          time [t1 + delta] and priority inversion is bounded by delta (i.e., the supply). *) 
        Variable  delta  : duration.
        Hypothesis  H_delta_positive  : delta > 0 .
        Hypothesis  H_workload_is_bounded  :
        forall  t , priority_inversion_bound (job_arrival j - t) + hp_workload t (t + delta) <= delta.
 
      (** Next, we assume that job j has positive cost, from which we 
          can infer that there is a time in which j is pending. *) 
        Hypothesis  H_positive_cost  : job_cost j > 0 .
 
      (** Therefore there must exists a busy interval <<[t1, t2)>> that contains the arrival time of [j]. *) 
        Corollary  exists_busy_interval :
        exists  t1  t2 ,
          t1 <= job_arrival j < t2 /\
          t2 <= t1 + delta /\
          busy_interval t1 t2.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost j
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2
        Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost j
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2
          have  PREFIX := exists_busy_interval_prefix.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jPREFIX :  forall  t_busy  : instant,
job_pending_at j t_busy ->
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busy
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2
          move : (H_workload_is_bounded) => WORK.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jPREFIX :  forall  t_busy  : instant,
job_pending_at j t_busy ->
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busyWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= delta
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2
          feed (PREFIX (job_arrival j)). Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jPREFIX :  forall  t_busy  : instant,
job_pending_at j t_busy ->
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busyWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= delta
job_pending_at j (job_arrival j)
          { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jPREFIX :  forall  t_busy  : instant,
job_pending_at j t_busy ->
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busyWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= delta
job_pending_at j (job_arrival j)
  apply /andP; split ; first  by  apply  leqnn.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jPREFIX :  forall  t_busy  : instant,
job_pending_at j t_busy ->
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busyWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= delta
~~ completed_by sched j (job_arrival j)
            rewrite  /completed_by /service.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jPREFIX :  forall  t_busy  : instant,
job_pending_at j t_busy ->
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busyWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= delta
~~
(job_cost j <=
 service_during sched j 0  (job_arrival j))
            rewrite  ignore_service_before_arrival // /service_during.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jPREFIX :  forall  t_busy  : instant,
job_pending_at j t_busy ->
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busyWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= delta
~~
(job_cost j <=
 \sum_(job_arrival j <= t < job_arrival j)
    service_at sched j t)
            rewrite  big_geq; last  by  apply  leqnn.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jPREFIX :  forall  t_busy  : instant,
job_pending_at j t_busy ->
exists  t1  : instant,
  busy_interval_prefix t1 t_busy.+1  /\
  t1 <= job_arrival j <= t_busyWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= delta
~~ (job_cost j <= 0 )
              by  rewrite  -ltnNge.
          } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jPREFIX :  exists  t1  : instant,
  busy_interval_prefix t1 (job_arrival j).+1  /\
  t1 <= job_arrival j <= job_arrival jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= delta
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2
          move : PREFIX => [t1 [PREFIX /andP [GE1 GEarr]]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant PREFIX :  busy_interval_prefix t1 (job_arrival j).+1  GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j 
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2
          have  BOUNDED := busy_interval_is_bounded
                          (job_arrival j) _ H_uni H_unit H_progress t1  PREFIX priority_inversion_bound _ delta
                          H_delta_positive.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant PREFIX :  busy_interval_prefix t1 (job_arrival j).+1  GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j BOUNDED :  job_pending_at j (job_arrival j) ->
is_priority_inversion_bounded_by
  priority_inversion_bound ->
priority_inversion_bound
  (job_arrival j - t1) +
hp_workload t1 (t1 + delta) <= delta ->
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2 
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2
          feed_n 3  BOUNDED => //. Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant PREFIX :  busy_interval_prefix t1 (job_arrival j).+1  GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j BOUNDED :  job_pending_at j (job_arrival j) ->
is_priority_inversion_bounded_by
  priority_inversion_bound ->
priority_inversion_bound
  (job_arrival j - t1) +
hp_workload t1 (t1 + delta) <= delta ->
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2 
job_pending_at j (job_arrival j)
          { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant PREFIX :  busy_interval_prefix t1 (job_arrival j).+1  GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j BOUNDED :  job_pending_at j (job_arrival j) ->
is_priority_inversion_bounded_by
  priority_inversion_bound ->
priority_inversion_bound
  (job_arrival j - t1) +
hp_workload t1 (t1 + delta) <= delta ->
exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2 
job_pending_at j (job_arrival j)
  by  apply  job_pending_at_arrival.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant PREFIX :  busy_interval_prefix t1 (job_arrival j).+1  GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j BOUNDED :  exists  t2  : nat,
  t2 <= t1 + delta /\ busy_interval t1 t2
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2
          move : BOUNDED => [t2 [GE2 BUSY]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant PREFIX :  busy_interval_prefix t1 (job_arrival j).+1  GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j t2 :  nat GE2 :  t2 <= t1 + delta BUSY :  busy_interval t1 t2 
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2
          exists  t1 , t2; split .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant PREFIX :  busy_interval_prefix t1 (job_arrival j).+1  GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j t2 :  nat GE2 :  t2 <= t1 + delta BUSY :  busy_interval t1 t2 
t1 <= job_arrival j < t2
          { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant PREFIX :  busy_interval_prefix t1 (job_arrival j).+1  GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j t2 :  nat GE2 :  t2 <= t1 + delta BUSY :  busy_interval t1 t2 
t1 <= job_arrival j < t2
  apply /andP; split => [//|].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant PREFIX :  busy_interval_prefix t1 (job_arrival j).+1  GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j t2 :  nat GE2 :  t2 <= t1 + delta BUSY :  busy_interval t1 t2 
job_arrival j < t2
            apply  contraT; rewrite  -leqNgt; intro  BUG.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant PREFIX :  busy_interval_prefix t1 (job_arrival j).+1  GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j t2 :  nat GE2 :  t2 <= t1 + delta BUSY :  busy_interval t1 t2 BUG :  t2 <= job_arrival j 
false
            move : BUSY PREFIX => [[LE12 _] QUIET] [_ [_ [NOTQUIET _]]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j t2 :  nat GE2 :  t2 <= t1 + delta BUG :  t2 <= job_arrival j LE12 :  t1 < t2 QUIET :  classical.quiet_time arr_seq sched j t2 NOTQUIET :  forall  t  : nat,
t1 < t < (job_arrival j).+1  ->
~ classical.quiet_time arr_seq sched j t
false
            feed (NOTQUIET t2); first  by  apply /andP; split . Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j t2 :  nat GE2 :  t2 <= t1 + delta BUG :  t2 <= job_arrival j LE12 :  t1 < t2 QUIET :  classical.quiet_time arr_seq sched j t2 NOTQUIET :  ~ classical.quiet_time arr_seq sched j t2 
false
              by  exfalso ; apply  NOTQUIET.
          } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaH_positive_cost :  0  < job_cost jWORK :  forall  t  : nat,
priority_inversion_bound (job_arrival j - t) +
hp_workload t (t + delta) <= deltat1 :  instant PREFIX :  busy_interval_prefix t1 (job_arrival j).+1  GE1 :  t1 <= job_arrival j GEarr :  job_arrival j <= job_arrival j t2 :  nat GE2 :  t2 <= t1 + delta BUSY :  busy_interval t1 t2 
t2 <= t1 + delta /\ busy_interval t1 t2
          by  split .
        Qed .
 
      End  BusyIntervalFromWorkloadBound .
 
    (** If we know that the workload is bounded, we can also use the 
        busy interval to infer a response-time bound. *) 
      Section  ResponseTimeBoundFromBusyInterval .
 
      (** Let priority_inversion_bound be a constant that bounds the length of a priority inversion. *) 
        Variable  priority_inversion_bound : duration -> duration.
        Hypothesis  H_priority_inversion_is_bounded :
        is_priority_inversion_bounded_by priority_inversion_bound.
 
      (** Assume that for some positive delta, the sum of requested workload at 
          time [t1 + delta] and priority inversion is bounded by delta (i.e., the supply). *) 
        Variable  delta : duration.
        Hypothesis  H_delta_positive : delta > 0 .
        Hypothesis  H_workload_is_bounded :
        forall  t , priority_inversion_bound (job_arrival j - t) + hp_workload t (t + delta) <= delta.
 
      (** Then, job [j] must complete by [job_arrival j + delta]. *) 
        Lemma  busy_interval_bounds_response_time :
        job_completed_by j (job_arrival j + delta).Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
delta
job_completed_by j (job_arrival j + delta)
        Proof .Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
delta
job_completed_by j (job_arrival j + delta)
          have  BUSY := exists_busy_interval priority_inversion_bound _ delta.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaBUSY :  is_priority_inversion_bounded_by
  priority_inversion_bound ->
0  < delta ->
(forall  t  : nat,
 priority_inversion_bound (job_arrival j - t) +
 hp_workload t (t + delta) <= delta) ->
0  < job_cost j ->
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2 
job_completed_by j (job_arrival j + delta)
          move : (posnP (@job_cost _ Cost j)) => [ZERO|POS].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaBUSY :  is_priority_inversion_bounded_by
  priority_inversion_bound ->
0  < delta ->
(forall  t  : nat,
 priority_inversion_bound (job_arrival j - t) +
 hp_workload t (t + delta) <= delta) ->
0  < job_cost j ->
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2 ZERO :  job_cost j = 0  
job_completed_by j (job_arrival j + delta)
          { Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaBUSY :  is_priority_inversion_bounded_by
  priority_inversion_bound ->
0  < delta ->
(forall  t  : nat,
 priority_inversion_bound (job_arrival j - t) +
 hp_workload t (t + delta) <= delta) ->
0  < job_cost j ->
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2 ZERO :  job_cost j = 0  
job_completed_by j (job_arrival j + delta)
  by  rewrite  /job_completed_by /completed_by ZERO.  } Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaBUSY :  is_priority_inversion_bounded_by
  priority_inversion_bound ->
0  < delta ->
(forall  t  : nat,
 priority_inversion_bound (job_arrival j - t) +
 hp_workload t (t + delta) <= delta) ->
0  < job_cost j ->
exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2 POS :  0  < job_cost j
job_completed_by j (job_arrival j + delta)
          feed_n 4  BUSY => //. Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaBUSY :  exists  t1  t2  : nat,
  t1 <= job_arrival j < t2 /\
  t2 <= t1 + delta /\ busy_interval t1 t2POS :  0  < job_cost j
job_completed_by j (job_arrival j + delta)
          move : BUSY => [t1 [t2 [/andP [GE1 LT2] [GE2 BUSY]]]].Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaPOS :  0  < job_cost jt1, t2 :  nat GE1 :  t1 <= job_arrival j LT2 :  job_arrival j < t2 GE2 :  t2 <= t1 + delta BUSY :  busy_interval t1 t2 
job_completed_by j (job_arrival j + delta)
          apply  completion_monotonic with  (t := t2) => //.Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaPOS :  0  < job_cost jt1, t2 :  nat GE1 :  t1 <= job_arrival j LT2 :  job_arrival j < t2 GE2 :  t2 <= t1 + delta BUSY :  busy_interval t1 t2 
t2 <= job_arrival j + delta
            - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaPOS :  0  < job_cost jt1, t2 :  nat GE1 :  t1 <= job_arrival j LT2 :  job_arrival j < t2 GE2 :  t2 <= t1 + delta BUSY :  busy_interval t1 t2 
t2 <= job_arrival j + delta
  by  apply  leq_trans with  (n := t1 + delta); [| rewrite  leq_add2r].
            - Task :  TaskType H :  TaskCost Task Job :  JobType JobTask :  concept.JobTask Job Task Arrival :  JobArrival Job Cost :  JobCost Job arr_seq :  arrival_sequence Job H_valid_arrival_time :  valid_arrival_sequence arr_seq PState :  ProcessorState Job 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 H0 :  JobReady Job PState H_job_ready :  work_bearing_readiness arr_seq sched job_pending_at :=  pending sched :  Job -> instant -> bool job_completed_by :=  completed_by sched :  Job -> instant -> bool tsk :  Task j :  Job H_from_arrival_sequence :  arrives_in arr_seq j H_job_task :  job_of_task tsk j H_job_cost_positive :  job_cost_positive j quiet_time :=  [eta classical.quiet_time arr_seq sched j] :  instant -> Prop  quiet_time_dec :=  [eta classical.quiet_time_dec arr_seq
       sched j] :  instant -> bool busy_interval_prefix :=  fun  t1  : instant =>
[eta classical.busy_interval_prefix
       arr_seq sched j t1]:  instant -> instant -> Prop  busy_interval :=  fun  t1  : instant =>
[eta classical.busy_interval arr_seq
       sched j t1]:  instant -> instant -> Prop  is_priority_inversion_bounded_by :=  [eta priority_inversion_of_job_is_bounded_by
       arr_seq sched
       j] :  (duration ->
 duration) -> Prop  H_work_conserving :  work_conserving arr_seq sched H_arrival_sequence_is_a_set :  arrival_sequence_uniq
  arr_seq H_priority_is_reflexive :  reflexive_job_priorities
  JLFP H_priority_is_transitive :  transitive_job_priorities
  JLFP hp_workload :=  fun  t1  : instant =>
[eta workload_of_hep_jobs arr_seq j t1]:  instant -> instant -> nat hp_service :=  fun  t1  t2  : instant =>
service_of_higher_or_equal_priority_jobs
  sched (arrivals_between arr_seq t1 t2) j
  t1 t2:  instant -> instant -> nat H_uni :  uniprocessor_model PState H_unit :  unit_service_proc_model PState H_progress :  ideal_progress_proc_model PState priority_inversion_bound :  duration -> duration H_priority_inversion_is_bounded :  is_priority_inversion_bounded_by
  priority_inversion_bound delta :  duration H_delta_positive :  0  < deltaH_workload_is_bounded :  forall  t  : nat,
priority_inversion_bound
  (job_arrival j - t) +
hp_workload t (t + delta) <=
deltaPOS :  0  < job_cost jt1, t2 :  nat GE1 :  t1 <= job_arrival j LT2 :  job_arrival j < t2 GE2 :  t2 <= t1 + delta BUSY :  busy_interval t1 t2 
completed_by sched j t2
  by  apply  job_completes_within_busy_interval with  (t1 := t1).
        Qed .
 
      End  ResponseTimeBoundFromBusyInterval .
 
    End  BoundingBusyInterval .
 
 End  ExistsBusyIntervalJLFP .