diff --git a/bertogna_edf_theory.v b/bertogna_edf_theory.v
index bec683cd67df47e02f4873a836d5fc0cf2d6d6cc..90eb0c29e68fab09824cffabcaf70fb807681a3f 100644
--- a/bertogna_edf_theory.v
+++ b/bertogna_edf_theory.v
@@ -250,18 +250,13 @@ Module ResponseTimeAnalysisEDF.
           apply leq_trans with (n := workload job_task sched tsk_other
                                          (job_arrival j) (job_arrival j + R));
             first by apply task_interference_le_workload.
-          apply workload_bounded_by_W with (task_deadline0 := task_deadline) (job_cost0 := job_cost) (job_deadline0 := job_deadline); try (by ins); last 2 first;
+          by apply workload_bounded_by_W with (task_deadline0 := task_deadline)
+               (job_cost0 := job_cost) (job_deadline0 := job_deadline); try (by ins); last 2 first;
             [ by apply bertogna_edf_R_other_ge_cost
-            | by ins; apply BEFOREok with (tsk_other := tsk_other)
+            | by ins; apply NOMISS
             | by ins; apply TASK_PARAMS
-            | by ins; apply RESTR |].
-          red; move => j' JOBtsk' LEdl; unfold job_misses_no_deadline.
-          assert (PARAMS' := PARAMS j'); des; rewrite PARAMS'1 JOBtsk'.
-          apply completion_monotonic with (t := job_arrival j' + (R_other)); ins;
-            first by rewrite leq_add2l; apply NOMISS.
-          apply BEFOREok with (tsk_other := tsk_other); ins.
-          apply leq_ltn_trans with (n := job_arrival j' + job_deadline j'); last by done.
-          by specialize (PARAMS j'); des; rewrite leq_add2l PARAMS1 JOBtsk'; apply NOMISS.
+            | by ins; apply RESTR
+            | by ins; apply BEFOREok with (tsk_other := tsk_other)].
         Qed.
 
         (* Recall that the edf-specific interference bound also holds. *)
diff --git a/bertogna_fp_theory.v b/bertogna_fp_theory.v
index 6959795294eeeb087b86969b805ddf9bd83bbef3..5ddae8efae4e7513c095f40a98cb2e50ec15f000 100644
--- a/bertogna_fp_theory.v
+++ b/bertogna_fp_theory.v
@@ -237,18 +237,14 @@ Module ResponseTimeAnalysisFP.
           apply leq_trans with (n := workload job_task sched tsk_other
                                               (job_arrival j) (job_arrival j + R));
             first by apply task_interference_le_workload.
-          apply workload_bounded_by_W with (task_deadline0 := task_deadline)
+          by apply workload_bounded_by_W with (task_deadline0 := task_deadline)
                     (job_cost0 := job_cost) (job_deadline0 := job_deadline);
             try (by ins); last 2 first;
               [ by ins; apply GE_COST 
-              | by ins; apply RESP with (hp_tsk := tsk_other)
+              | by ins; apply NOMISS
               | by ins; apply TASK_PARAMS
-              | by ins; apply RESTR |].
-          red; red; move => j' JOBtsk' _; unfold job_misses_no_deadline.
-          specialize (PARAMS j'); des.
-          rewrite PARAMS1 JOBtsk'.
-          by apply completion_monotonic with (t := job_arrival j' + R_other); ins;
-            [by rewrite leq_add2l; apply NOMISS | by apply (RESP tsk_other)].
+              | by ins; apply RESTR
+              | by ins; apply RESP with (hp_tsk := tsk_other)].
         Qed.
 
       End LemmasAboutInterferingTasks.
diff --git a/workload_bound.v b/workload_bound.v
index 3e63f8b9516eb18b533b10d8b1ef43b5a30ab0bf..5dd34515383ab42eed1fcb4cfbb93d350db59142 100644
--- a/workload_bound.v
+++ b/workload_bound.v
@@ -154,9 +154,7 @@ Module WorkloadBound.
 
     (* Before starting the proof, let's give simpler names to the definitions. *)
     Let job_has_completed_by := completed job_cost sched.
-    Let no_deadline_misses_by (tsk: sporadic_task) (t: time) :=
-      task_misses_no_deadline_before job_cost job_deadline job_task
-                                     sched tsk t.
+
     Let workload_of (tsk: sporadic_task) (t1 t2: time) :=
       workload job_task sched tsk t1 t2.
 
@@ -180,22 +178,22 @@ Module WorkloadBound.
        middle jobs (i.e., number of jobs - 2 in the worst case). *)
     Hypothesis H_restricted_deadline: task_deadline tsk <= task_period tsk.
       
-    (* Consider an interval [t1, t1 + delta), with no deadline misses. *)
+    (* Consider an interval [t1, t1 + delta). *)
     Variable t1 delta: time.
-    Hypothesis H_no_deadline_misses_during_interval: no_deadline_misses_by tsk (t1 + delta).
 
     (* Assume that a response-time bound R_tsk for that task in any
-       schedule of this processor platform is also given,
-       such that R_tsk >= task_cost tsk. *)
+       schedule of this processor platform is also given, ... *)
     Variable R_tsk: time.
 
-    Hypothesis H_response_time_ge_cost: R_tsk >= task_cost tsk.
-
     Hypothesis H_response_time_bound :    
       forall (j: JobIn arr_seq),
       job_task j = tsk ->
       job_arrival j + R_tsk < t1 + delta ->
       job_has_completed_by j (job_arrival j + R_tsk).
+
+    (* ... such that R_tsk >= task_cost tsk and R_tsk <= task_deadline tsk. *)    
+    Hypothesis H_response_time_ge_cost: R_tsk >= task_cost tsk.
+    Hypothesis H_no_deadline_miss: R_tsk <= task_deadline tsk.
     
     Section MainProof.
 
@@ -546,55 +544,6 @@ Module WorkloadBound.
           by rewrite subh3 // addnC; move: INnth => /eqP INnth; rewrite -INnth.
         Qed.
 
-        (* Now, we prove an auxiliary lemma for the next result.
-           The statement is not meaningful, since it's part of a proof
-           by contradiction. *)
-        Lemma workload_bound_helper_lemma :
-          job_arrival j_fst + task_period tsk + delta <= job_arrival j_lst ->
-          t1 <= job_arrival j_fst + task_deadline tsk.
-        Proof.
-          intros LE.
-          rename H_jobs_have_valid_parameters into PARAMS,
-                 H_completed_jobs_dont_execute into EXEC,
-                 H_no_deadline_misses_during_interval into NOMISS.
-          unfold task_misses_no_deadline_before, valid_sporadic_job,
-                 job_misses_no_deadline, completed in *; des.
-          exploit workload_bound_all_jobs_from_tsk.
-          {
-            apply mem_nth; instantiate (1 := 0).
-            apply ltn_trans with (n := 1); [by done | by rewrite H_at_least_two_jobs].
-          }
-          instantiate (1 := elem); move => [FSTtsk [/eqP FSTserv FSTin]].
-          exploit (NOMISS j_fst FSTtsk); last intros COMP.
-          { 
-            (* Prove that arr_fst + d_k <= t2 *)
-            apply leq_ltn_trans with (n := job_arrival j_lst);
-              last by apply workload_bound_last_job_arrives_before_end_of_interval.
-            apply leq_trans with (n := job_arrival j_fst + task_period tsk + delta); last by done.
-            rewrite -addnA leq_add2l -[job_deadline _]addn0.
-            apply leq_add; last by ins.
-            specialize (PARAMS j_fst); des.
-            by rewrite PARAMS1 FSTtsk H_restricted_deadline.
-          }
-          rewrite leqNgt; apply/negP; unfold not; intro LTt1.
-          (* Now we assume that (job_arrival j_fst + d_k < t1) and reach a contradiction.
-             Since j_fst doesn't miss deadlines, then the service it receives between t1 and t2
-             equals 0, which contradicts the previous assumption that j_fst interferes in
-             the scheduling window. *)
-          apply FSTserv.
-          {
-              unfold service_during; apply/eqP; rewrite -leqn0.
-              rewrite <- leq_add2l with (p := job_cost j_fst); rewrite addn0.
-              move: COMP => /eqP COMP; unfold service in COMP; rewrite -{1}COMP.
-              apply leq_trans with (n := service sched j_fst t2); last by apply EXEC.
-              unfold service; rewrite -> big_cat_nat with (m := 0) (p := t2) (n := t1);
-                [rewrite leq_add2r /= | by ins | by apply leq_addr].
-              rewrite -> big_cat_nat with (p := t1) (n := job_arrival j_fst + job_deadline j_fst);
-                [by rewrite /= -{1}[\sum_(_ <= _ < _) _]addn0 leq_add2l | by ins | ].
-              by apply ltnW; specialize (PARAMS j_fst); des; rewrite PARAMS1 FSTtsk.
-          }
-        Qed.
-        
         (* Prove that n_k is at least the number of the middle jobs *)
         Lemma workload_bound_n_k_covers_middle_jobs :
           n_k >= num_mid_jobs.
@@ -631,7 +580,9 @@ Module WorkloadBound.
             last by apply leq_trans with (n := job_arrival j_fst + task_period tsk + delta);
               [rewrite leq_add2r leq_add2l; apply H_restricted_deadline | apply DISTmax].
           unfold t2; rewrite leq_add2r.
-          by apply workload_bound_helper_lemma.
+          apply leq_trans with (n := job_arrival j_fst + R_tsk);
+            last by rewrite leq_add2l.
+          by apply workload_bound_response_time_of_first_job_inside_interval.
         Qed.
 
         (* If n_k = num_mid_jobs, then the workload bound holds. *)
@@ -719,12 +670,7 @@ Module WorkloadBound.
       Theorem workload_bounded_by_W :
         workload_of tsk t1 (t1 + delta) <= workload_bound.
       Proof.
-        rename H_jobs_have_valid_parameters into job_properties,
-               H_no_deadline_misses_during_interval into no_dl_misses,
-               H_valid_task_parameters into task_properties.
-        unfold valid_sporadic_job, valid_realtime_job, restricted_deadline_model,
-               valid_sporadic_taskset, is_valid_sporadic_task, sporadic_task_model,
-               workload_of, no_deadline_misses_by, workload_bound, W in *; ins; des.
+        unfold workload_of, workload_bound, W in *; ins; des.
         fold n_k.
 
         (* Use the definition of workload based on list of jobs. *)