Commit f7aaa70c authored by Xiaojie Guo's avatar Xiaojie Guo

Merge remote-tracking branch 'upstream/master'

parents cc5093e8 3b689961
Pipeline #18212 passed with stages
in 5 minutes and 57 seconds
# Configuration file for the 'ack' search utility
# See https://beyondgrep.com/ for details.
# Ignore misc files generated by the build process
--ignore-file=ext:glob,aux
--ignore-dir=html
\ No newline at end of file
*.v gitlab-language=coq
......@@ -2,6 +2,7 @@
*.glob
*.vo
*.html
/html
*.aux
Makefile*
_CoqProject
......@@ -10,3 +11,7 @@ _CoqProject
*.cache
*~
*.orig
*/.#*
#*#
.#*
*.DS_Store
\ No newline at end of file
stages:
- build
- process
.build:
stage: build
image: mathcomp/mathcomp:${CI_JOB_NAME}
script:
- ./create_makefile.sh
- make -j ${NJOBS}
1.8.0-coq-8.8:
extends: .build
1.9.0-coq-dev:
extends: .build
# it's ok to fail with an unreleased version of Coq
allow_failure: true
1.9.0-coq-8.9:
extends: .build
# Keep track of all compiled output and the build infrastructure
artifacts:
name: prosa-build-files
paths:
- _CoqProject
- Makefile
- Makefile.conf
# Ugly hack around https://gitlab.com/gitlab-org/gitlab-runner/issues/2620
- "*/*.vo"
- "*/*/*.vo"
- "*/*/*/*.vo"
- "*/*/*/*/*.vo"
- "*/*/*/*/*/*.vo"
- "*/*/*/*/*/*/*.vo"
- "*/*/*/*/*/*/*/*.vo"
- "*/*/*/*/*/*/*/*/*.vo"
- "*/*/*/*/*/*/*/*/*/*.vo"
- "*/*.glob"
- "*/*/*.glob"
- "*/*/*/*.glob"
- "*/*/*/*/*.glob"
- "*/*/*/*/*/*.glob"
- "*/*/*/*/*/*/*.glob"
- "*/*/*/*/*/*/*/*.glob"
- "*/*/*/*/*/*/*/*/*.glob"
- "*/*/*/*/*/*/*/*/*/*.glob"
expire_in: 1 week
validate:
stage: process
image: mathcomp/mathcomp:1.9.0-coq-8.9
dependencies:
- 1.9.0-coq-8.9
script: make validate
doc:
stage: process
image: mathcomp/mathcomp:1.9.0-coq-8.9
dependencies:
- 1.9.0-coq-8.9
script:
- make html
- mv html with-proofs
- make gallinahtml
- mv html without-proofs
artifacts:
name: "prosa-spec-$CI_COMMIT_REF_NAME"
paths:
- "with-proofs/"
- "without-proofs/"
expire_in: 1 week
proof-length:
stage: process
image: python:3-alpine
script:
- scripts/proofloc.py --check --long-proofs scripts/known-long-proofs.json `find . -iname *.v`
......@@ -972,8 +972,6 @@ Module ResponseTimeIterationEDF.
have COMPLETED := RLIST tsk R HAS j ARRj JOBtsk.
exploit (DL rt_bounds tsk R);
[by ins | by ins | clear DL; intro DL].
rewrite eqn_leq; apply/andP; split; first by apply cumulative_service_le_job_cost.
apply leq_trans with (n := service sched j (job_arrival j + R)); last first.
{
unfold valid_sporadic_taskset, is_valid_sporadic_task in *.
......@@ -981,8 +979,7 @@ Module ResponseTimeIterationEDF.
specialize (JOBPARAMS j ARRj); des; rewrite JOBPARAMS1.
by rewrite JOBtsk.
}
rewrite leq_eqVlt; apply/orP; left; rewrite eq_sym.
by apply COMPLETED.
by done.
Qed.
(* For completeness, since all jobs of the arrival sequence
......
......@@ -220,12 +220,12 @@ Module ResponseTimeAnalysisEDF.
Lemma bertogna_edf_specific_bound_holds :
x tsk_other <= edf_specific_bound tsk_other R_other.
Proof.
apply interference_bound_edf_bounds_interference with (job_deadline0 := job_deadline)
(arr_seq0 := arr_seq) (ts0 := ts); try (by done);
[ by apply bertogna_edf_tsk_other_in_ts
| by apply H_tasks_miss_no_deadlines
| by apply H_tasks_miss_no_deadlines | ].
by ins; apply H_all_previous_jobs_completed_on_time with (tsk_other := tsk_other).
apply interference_bound_edf_bounds_interference with
(job_deadline0 := job_deadline)
(arr_seq0 := arr_seq) (ts0 := ts); try (by done);
[ by apply bertogna_edf_tsk_other_in_ts |
by apply H_tasks_miss_no_deadlines | ].
by ins; apply H_all_previous_jobs_completed_on_time with (tsk_other := tsk_other).
Qed.
End LemmasAboutInterferingTasks.
......@@ -246,12 +246,7 @@ Module ResponseTimeAnalysisEDF.
rewrite subh1; last by rewrite [R](REC tsk) // leq_addr.
rewrite -addnBA // subnn addn0.
move: (NOTCOMP) => /negP NOTCOMP'.
rewrite neq_ltn in NOTCOMP.
move: NOTCOMP => /orP [LT | BUG]; last first.
{
exfalso; rewrite ltnNge in BUG; move: BUG => /negP BUG; apply BUG.
by apply cumulative_service_le_job_cost.
}
rewrite -ltnNge in NOTCOMP.
apply leq_ltn_trans with (n := (\sum_(job_arrival j <= t < job_arrival j + R)
backlogged job_arrival job_cost sched j t) +
service sched j (job_arrival j + R)); last first.
......@@ -357,7 +352,7 @@ Module ResponseTimeAnalysisEDF.
intros t j0 ARR0 LEt LE.
cut ((job_task j0) \in unzip1 rt_bounds = true); last by rewrite UNZIP FROMTS.
move => /mapP [p IN EQ]; destruct p as [tsk' R0]; simpl in *; subst tsk'.
apply completion_monotonic with (t0 := job_arrival j0 + R0); first by done.
apply completion_monotonic with (t0 := job_arrival j0 + R0).
{
rewrite leq_add2l; apply leq_trans with (n := task_deadline (job_task j0));
[by apply NOMISS | by apply CONSTR; rewrite FROMTS].
......@@ -976,7 +971,7 @@ Module ResponseTimeAnalysisEDF.
job_task j0 = tsk ->
(tsk, R0) \in rt_bounds ->
job_arrival j0 + R0 < job_arrival j + R' ->
service sched j0 (job_arrival j0 + R0) == job_cost j0).
service sched j0 (job_arrival j0 + R0) >= job_cost j0).
{
by ins; apply IH with (tsk := tsk0) (R := R0).
}
......@@ -998,7 +993,7 @@ Module ResponseTimeAnalysisEDF.
unfold interference_bound_edf, interference_bound_generic in LTmin.
rewrite minnAC in LTmin; apply min_lt_same in LTmin.
have BASICBOUND := bertogna_edf_workload_bounds_interference R' j BEFOREok tsk_other R_other HP.
have EDFBOUND := (bertogna_edf_specific_bound_holds tsk' R' INbounds j ARRj JOBtsk BEFOREok tsk_other R_other HP).
have EDFBOUND := (bertogna_edf_specific_bound_holds tsk' R' j ARRj JOBtsk BEFOREok tsk_other R_other HP).
unfold minn in LTmin; clear -LTmin HP BASICBOUND EDFBOUND tsk; desf.
{
by apply (leq_ltn_trans BASICBOUND) in LTmin; rewrite ltnn in LTmin.
......
......@@ -310,7 +310,7 @@ Module ResponseTimeIterationFP.
rename ts into ts'; destruct ts' as [ts UNIQ]; simpl in *.
intros hp_idx idx LThp LT NEQ HP.
rewrite ltn_neqAle; apply/andP; split; first by done.
by apply sorted_rel_implies_le_idx with (leT := higher_priority) (s := ts) (x0 := elem).
by apply sorted_rel_implies_le_idx with (leT := higher_priority) (xs := ts) (default := elem).
Qed.
End HighPriorityTasks.
......@@ -696,7 +696,6 @@ Module ResponseTimeIterationFP.
} des.
exploit (RLIST tsk R EX j ARRj); [by apply JOBtsk | intro COMPLETED].
exploit (DL rt_bounds tsk R); [by ins | by ins | clear DL; intro DL].
rewrite eqn_leq; apply/andP; split; first by apply cumulative_service_le_job_cost.
apply leq_trans with (n := service sched j (job_arrival j + R)); last first.
{
unfold valid_sporadic_taskset, is_valid_sporadic_task in *.
......@@ -704,8 +703,7 @@ Module ResponseTimeIterationFP.
specialize (JOBPARAMS j ARRj); des; rewrite JOBPARAMS1.
by rewrite JOBtsk.
}
rewrite leq_eqVlt; apply/orP; left; rewrite eq_sym.
by apply COMPLETED.
by done.
Qed.
(* For completeness, since all jobs of the arrival sequence
......
......@@ -258,12 +258,7 @@ Module ResponseTimeAnalysisFP.
rewrite subh1; last by rewrite [R]REC // leq_addr.
rewrite -addnBA // subnn addn0.
move: (NOTCOMP) => /negP NOTCOMP'.
rewrite neq_ltn in NOTCOMP.
move: NOTCOMP => /orP [LT | BUG]; last first.
{
exfalso; rewrite ltnNge in BUG; move: BUG => /negP BUG; apply BUG.
by apply cumulative_service_le_job_cost.
}
rewrite -ltnNge in NOTCOMP.
apply leq_ltn_trans with (n := (\sum_(job_arrival j <= t < job_arrival j + R)
backlogged job_arrival job_cost sched j t) +
service sched j (job_arrival j + R)); last first.
......@@ -369,14 +364,10 @@ Module ResponseTimeAnalysisFP.
intros j0 ARR0 INTERF.
exploit (HAS (job_task j0));
[by rewrite FROMTS | by done | move => [R0 INbounds]].
apply completion_monotonic with (t := job_arrival j0 + R0); first by done.
{
rewrite leq_add2l; apply leq_trans with (n := task_deadline (job_task j0));
apply completion_monotonic with (t := job_arrival j0 + R0).
- rewrite leq_add2l; apply leq_trans with (n := task_deadline (job_task j0));
[by apply NOMISS' | by apply CONSTR; rewrite FROMTS].
}
{
by apply (RESP (job_task j0)).
}
- by apply (RESP (job_task j0)).
Qed.
(* 3) Next, we prove that the sum of the interference of each task is equal to the
......@@ -656,8 +647,7 @@ Module ResponseTimeAnalysisFP.
}
{
intros j0 JOB0 ARR0 LT0.
apply completion_monotonic with (t0 := job_arrival j0 + R);
[by done | | by apply BEFOREok].
apply completion_monotonic with (t0 := job_arrival j0 + R); [| by apply BEFOREok].
by rewrite leq_add2l; apply leq_trans with (n := task_deadline tsk);
last by apply CONSTR; rewrite -JOBtsk FROMTS.
}
......@@ -1028,7 +1018,7 @@ Module ResponseTimeAnalysisFP.
arrives_in arr_seq j0 ->
job_task j0 = tsk ->
job_arrival j0 < job_arrival j ->
service sched j0 (job_arrival j0 + R) == job_cost j0).
service sched j0 (job_arrival j0 + R) >= job_cost j0).
{
by ins; apply IH; try (by done); rewrite ltn_add2r.
} clear IH.
......
......@@ -609,7 +609,7 @@ Module InterferenceBoundEDF.
have FST := interference_bound_edf_j_fst_is_job_of_tsk_k.
destruct FST as [FSTarr [FSTtask [LEdl _]]].
have LTr := interference_bound_edf_response_time_bound_of_j_fst_after_interval.
apply subh3; last by apply LEdk.
apply subh3.
apply leq_trans with (n := job_interference job_arrival job_cost job_task sched alpha j_i j_fst t1
(job_arrival j_fst + R_k) + (D_k - R_k));
first by rewrite leq_add2r; apply extend_sum; [by apply leqnn|].
......@@ -955,8 +955,8 @@ Module InterferenceBoundEDF.
interference_caused_by j_fst t1 t2 <= D_i %% p_k - (D_k - R_k).
Proof.
intro LE.
apply subh3; last by apply interference_bound_edf_remainder_ge_slack.
by rewrite -subndiv_eq_mod; apply subh3; last by apply leq_trunc_div.
apply subh3.
by rewrite -subndiv_eq_mod; apply subh3.
Qed.
(* Next, we prove that interference caused by j_fst is bounded by the length
......
......@@ -960,8 +960,6 @@ Module ResponseTimeIterationEDF.
exploit (HAS rt_bounds tsk); [by ins | by ins | clear HAS; intro HAS; des].
have COMPLETED := RLIST tsk R HAS j ARRj JOBtsk.
exploit (DL rt_bounds tsk R); try (by done); clear DL; intro DL.
rewrite eqn_leq; apply/andP; split; first by apply cumulative_service_le_job_cost.
apply leq_trans with (n := service sched j (job_arrival j + R)); last first.
{
unfold valid_sporadic_taskset, is_valid_sporadic_task in *.
......@@ -969,8 +967,7 @@ Module ResponseTimeIterationEDF.
specialize (JOBPARAMS j ARRj); des; rewrite JOBPARAMS1.
by rewrite JOBtsk.
}
rewrite leq_eqVlt; apply/orP; left; rewrite eq_sym.
by apply COMPLETED.
by done.
Qed.
(* For completeness, since all jobs of the arrival sequence
......
......@@ -212,7 +212,7 @@ Module ResponseTimeAnalysisEDF.
(arr_seq0 := arr_seq) (ts0 := ts); try (by done);
[ by apply bertogna_edf_tsk_other_in_ts
| by apply H_tasks_miss_no_deadlines
| by apply H_tasks_miss_no_deadlines | ].
| ].
by ins; apply H_all_previous_jobs_completed_on_time with (tsk_other := tsk_other).
Qed.
......@@ -234,12 +234,7 @@ Module ResponseTimeAnalysisEDF.
rewrite subh1; last by rewrite [R](REC tsk) // leq_addr.
rewrite -addnBA // subnn addn0.
move: (NOTCOMP) => /negP NOTCOMP'.
rewrite neq_ltn in NOTCOMP.
move: NOTCOMP => /orP [LT | BUG]; last first.
{
exfalso; rewrite ltnNge in BUG; move: BUG => /negP BUG; apply BUG.
by apply cumulative_service_le_job_cost.
}
rewrite -ltnNge in NOTCOMP.
apply leq_ltn_trans with (n := (\sum_(job_arrival j <= t < job_arrival j + R)
backlogged job_arrival job_cost sched j t) +
service sched j (job_arrival j + R)); last first.
......@@ -345,7 +340,7 @@ Module ResponseTimeAnalysisEDF.
intros t j0 ARR0 LEt LE.
cut ((job_task j0) \in unzip1 rt_bounds = true); last by rewrite UNZIP FROMTS.
move => /mapP [p IN EQ]; destruct p as [tsk' R0]; simpl in *; subst tsk'.
apply completion_monotonic with (t0 := job_arrival j0 + R0); first by done.
apply completion_monotonic with (t0 := job_arrival j0 + R0).
{
rewrite leq_add2l; apply leq_trans with (n := task_deadline (job_task j0));
[by apply NOMISS | by apply CONSTR; rewrite FROMTS].
......@@ -774,7 +769,7 @@ Module ResponseTimeAnalysisEDF.
job_task j0 = tsk ->
(tsk, R0) \in rt_bounds ->
job_arrival j0 + R0 < job_arrival j + R' ->
service sched j0 (job_arrival j0 + R0) == job_cost j0).
service sched j0 (job_arrival j0 + R0) >= job_cost j0).
{
by ins; apply IH with (tsk := tsk0) (R := R0).
}
......@@ -796,7 +791,7 @@ Module ResponseTimeAnalysisEDF.
unfold interference_bound_edf, interference_bound_generic in LTmin.
rewrite minnAC in LTmin; apply min_lt_same in LTmin.
have BASICBOUND := bertogna_edf_workload_bounds_interference R' j BEFOREok tsk_other R_other HP.
have EDFBOUND := (bertogna_edf_specific_bound_holds tsk' R' INbounds j ARRj
have EDFBOUND := (bertogna_edf_specific_bound_holds tsk' R' j ARRj
JOBtsk BEFOREok tsk_other R_other HP).
unfold minn in LTmin; clear -LTmin HP BASICBOUND EDFBOUND tsk; desf.
{
......
......@@ -304,7 +304,7 @@ Module ResponseTimeIterationFP.
rename ts into ts'; destruct ts' as [ts UNIQ]; simpl in *.
intros hp_idx idx LThp LT NEQ HP.
rewrite ltn_neqAle; apply/andP; split; first by done.
by apply sorted_rel_implies_le_idx with (leT := higher_priority) (s := ts) (x0 := elem).
by apply sorted_rel_implies_le_idx with (leT := higher_priority) (xs := ts) (default := elem).
Qed.
End HighPriorityTasks.
......@@ -679,16 +679,11 @@ Module ResponseTimeIterationFP.
} des.
exploit (RLIST tsk R EX j ARRj); [by done | intro COMPLETED].
exploit (DL rt_bounds tsk R); [by ins | by ins | clear DL; intro DL].
rewrite eqn_leq; apply/andP; split; first by apply cumulative_service_le_job_cost.
apply leq_trans with (n := service sched j (job_arrival j + R)); last first.
{
unfold valid_sporadic_taskset, is_valid_sporadic_task in *.
apply extend_sum; rewrite // leq_add2l.
specialize (JOBPARAMS j ARRj); des; rewrite JOBPARAMS1.
apply leq_trans with (n := service sched j (job_arrival j + R)); first by done.
unfold valid_sporadic_taskset, is_valid_sporadic_task in *.
apply extend_sum; rewrite // leq_add2l.
specialize (JOBPARAMS j ARRj); des; rewrite JOBPARAMS1.
by rewrite JOBtsk.
}
rewrite leq_eqVlt; apply/orP; left; rewrite eq_sym.
by apply COMPLETED.
Qed.
(* For completeness, since all jobs of the arrival sequence
......
......@@ -242,12 +242,7 @@ Module ResponseTimeAnalysisFP.
rewrite subh1; last by rewrite [R](REC) // leq_addr.
rewrite -addnBA // subnn addn0.
move: (NOTCOMP) => /negP NOTCOMP'.
rewrite neq_ltn in NOTCOMP.
move: NOTCOMP => /orP [LT | BUG]; last first.
{
exfalso; rewrite ltnNge in BUG; move: BUG => /negP BUG; apply BUG.
by apply cumulative_service_le_job_cost.
}
rewrite -ltnNge in NOTCOMP.
apply leq_ltn_trans with (n := (\sum_(job_arrival j <= t < job_arrival j + R)
backlogged job_arrival job_cost sched j t) +
service sched j (job_arrival j + R)); last first.
......@@ -761,7 +756,7 @@ Module ResponseTimeAnalysisFP.
arrives_in arr_seq j0 ->
job_task j0 = tsk ->
job_arrival j0 < job_arrival j ->
service sched j0 (job_arrival j0 + R) == job_cost j0).
service sched j0 (job_arrival j0 + R) >= job_cost j0).
{
by ins; apply IH; try (by done); rewrite ltn_add2r.
} clear IH.
......
......@@ -604,7 +604,7 @@ Module InterferenceBoundEDF.
have FST := interference_bound_edf_j_fst_is_job_of_tsk_k.
destruct FST as [FSTarr [FSTtask [LEdl _]]].
have LTr := interference_bound_edf_response_time_bound_of_j_fst_after_interval.
apply subh3; last by apply LEdk.
apply subh3.
apply leq_trans with (n := job_interference job_arrival job_cost sched j_i j_fst t1
(job_arrival j_fst + R_k) + (D_k - R_k));
first by rewrite leq_add2r; apply extend_sum; [by apply leqnn|].
......@@ -950,8 +950,8 @@ Module InterferenceBoundEDF.
interference_caused_by j_fst t1 t2 <= D_i %% p_k - (D_k - R_k).
Proof.
intro LE.
apply subh3; last by apply interference_bound_edf_remainder_ge_slack.
by rewrite -subndiv_eq_mod; apply subh3; last by apply leq_trunc_div.
apply subh3.
by rewrite -subndiv_eq_mod; apply subh3.
Qed.
(* Next, we prove that interference caused by j_fst is bounded by the length
......
......@@ -1054,8 +1054,6 @@ Module ResponseTimeIterationEDF.
have COMPLETED := RLIST tsk R HAS j ARRj JOBtsk.
exploit (DL rt_bounds tsk R);
[by ins | by ins | clear DL; intro DL].
rewrite eqn_leq; apply/andP; split; first by apply cumulative_service_le_job_cost.
apply leq_trans with (n := service sched j (job_arrival j + task_jitter tsk + R)); last first.
{
unfold valid_sporadic_taskset, is_valid_sporadic_task in *.
......@@ -1063,8 +1061,7 @@ Module ResponseTimeIterationEDF.
specialize (JOBPARAMS j ARRj); des; rewrite JOBPARAMS2.
by rewrite JOBtsk.
}
rewrite leq_eqVlt; apply/orP; left; rewrite eq_sym.
by rewrite -addnA; apply COMPLETED.
by rewrite -addnA.
Qed.
(* For completeness, since all jobs of the arrival sequence
......
......@@ -228,9 +228,7 @@ Module ResponseTimeAnalysisEDFJitter.
by apply interference_bound_edf_bounds_interference with (job_deadline0 := job_deadline)
(arr_seq0 := arr_seq) (ts0 := ts); try (by done);
[ by apply bertogna_edf_tsk_other_in_ts
| by apply H_tasks_miss_no_deadlines
| by apply leq_trans with (n := task_jitter tsk + R);
[apply leq_addl | by apply H_tasks_miss_no_deadlines]
| by apply H_tasks_miss_no_deadlines
| by ins; apply H_all_previous_jobs_completed_on_time with (tsk_other := tsk_other)].
Qed.
......@@ -252,12 +250,7 @@ Module ResponseTimeAnalysisEDFJitter.
rewrite subh1; last by rewrite [R](REC tsk) // leq_addr.
rewrite -addnBA // subnn addn0.
move: (NOTCOMP) => /negP NOTCOMP'.
rewrite neq_ltn in NOTCOMP.
move: NOTCOMP => /orP [LT | BUG]; last first.
{
exfalso; rewrite ltnNge in BUG; move: BUG => /negP BUG; apply BUG.
by apply cumulative_service_le_job_cost.
}
rewrite -ltnNge in NOTCOMP.
apply leq_ltn_trans with (n := (\sum_(t1 <= t < t1 + R)
backlogged job_arrival job_cost job_jitter sched j t) +
service sched j (t1 + R)); last first.
......@@ -386,8 +379,7 @@ Module ResponseTimeAnalysisEDFJitter.
intros t j0 LEt ARR0 LE.
cut ((job_task j0) \in unzip1 rt_bounds = true); last by rewrite UNZIP FROMTS.
move => /mapP [p IN EQ]; destruct p as [tsk' R0]; simpl in *; subst tsk'.
apply completion_monotonic with (t0 := job_arrival j0 +
task_jitter (job_task j0) + R0); first by done.
apply completion_monotonic with (t0 := job_arrival j0 + task_jitter (job_task j0) + R0).
{
rewrite -addnA leq_add2l.
apply leq_trans with (n := task_deadline (job_task j0));
......@@ -822,7 +814,7 @@ Module ResponseTimeAnalysisEDFJitter.
job_task j0 = tsk ->
(tsk, R0) \in rt_bounds ->
job_arrival j0 + task_jitter tsk + R0 < job_arrival j + task_jitter tsk' + R' ->
service sched j0 (job_arrival j0 + task_jitter tsk + R0) == job_cost j0).
service sched j0 (job_arrival j0 + task_jitter tsk + R0) >= job_cost j0).
{
by ins; apply IH with (tsk := tsk0) (R := R0).
}
......@@ -849,7 +841,7 @@ Module ResponseTimeAnalysisEDFJitter.
unfold interference_bound_edf, interference_bound_generic in LTmin.
rewrite minnAC in LTmin; apply min_lt_same in LTmin.
specialize (BASICBOUND tsk' R' j ARRj JOBtsk BEFOREok tsk_other R_other HP).
specialize (EDFBOUND tsk' R' INbounds j ARRj JOBtsk BEFOREok tsk_other R_other HP).
specialize (EDFBOUND tsk' R' j ARRj JOBtsk BEFOREok tsk_other R_other HP).
unfold minn in LTmin; clear -LTmin HP BASICBOUND EDFBOUND tsk; desf.
{
by apply (leq_ltn_trans BASICBOUND) in LTmin; rewrite ltnn in LTmin.
......
......@@ -306,7 +306,7 @@ Module ResponseTimeIterationFP.
rename ts into ts'; destruct ts' as [ts UNIQ]; simpl in *.
intros hp_idx idx LThp LT NEQ HP.
rewrite ltn_neqAle; apply/andP; split; first by done.
by apply sorted_rel_implies_le_idx with (leT := higher_priority) (s := ts) (x0 := elem).
by apply sorted_rel_implies_le_idx with (leT := higher_priority) (xs := ts) (default := elem).
Qed.
End HighPriorityTasks.
......@@ -695,8 +695,6 @@ Module ResponseTimeIterationFP.
} des.
exploit (RLIST tsk R); [by done | by apply ARRj | by done | intro COMPLETED].
exploit (DL rt_bounds tsk R); [by ins | by ins | clear DL; intro DL].
rewrite eqn_leq; apply/andP; split; first by apply cumulative_service_le_job_cost.
apply leq_trans with (n := service sched j (job_arrival j + (task_jitter tsk + R)));
last first.
{
......@@ -704,7 +702,6 @@ Module ResponseTimeIterationFP.
apply extend_sum; rewrite // leq_add2l.
by specialize (JOBPARAMS j ARRj); des; rewrite JOBPARAMS2 JOBtsk.
}
rewrite leq_eqVlt; apply/orP; left; rewrite eq_sym.
by apply COMPLETED.
Qed.
......
......@@ -255,12 +255,8 @@ Module ResponseTimeAnalysisFP.
rewrite subh1; last by rewrite [R](REC) // leq_addr.
rewrite -addnBA // subnn addn0.
move: (NOTCOMP) => /negP NOTCOMP'.
rewrite neq_ltn in NOTCOMP.
move: NOTCOMP => /orP [LT | BUG]; last first.
{
exfalso; rewrite ltnNge in BUG; move: BUG => /negP BUG; apply BUG.
by apply cumulative_service_le_job_cost.
}
rewrite -ltnNge in NOTCOMP.
apply leq_ltn_trans with (n := (\sum_(t1 <= t < t1 + R)
backlogged job_arrival job_cost job_jitter sched j t) +
service sched j (t1 + R)); last first.
......@@ -806,7 +802,7 @@ Module ResponseTimeAnalysisFP.
(* Now we start the proof. Assume by contradiction that job j
is not complete at time (job_arrival j + job_jitter j + R'). *)
rewrite addnA.
apply completion_monotonic with (t := job_arrival j + job_jitter j + R); first by done.
apply completion_monotonic with (t := job_arrival j + job_jitter j + R).
{
rewrite leq_add2r leq_add2l.
specialize (PARAMS j ARRj); des.
......
......@@ -660,7 +660,7 @@ Module InterferenceBoundEDFJitter.
have FST := interference_bound_edf_j_fst_is_job_of_tsk_k.
destruct FST as [FSTtask [_ [LEdl _]]].
have LTr := interference_bound_edf_response_time_bound_of_j_fst_after_interval.
apply subh3; last by apply LEdk.
apply subh3.
apply leq_trans with (n := job_interference job_arrival job_cost job_jitter sched j_i
j_fst t1 (job_arrival j_fst + J_k + R_k) + (D_k - R_k - J_k)).
{
......@@ -1051,8 +1051,8 @@ Module InterferenceBoundEDFJitter.
interference_caused_by j_fst t1 t2 <= D_i %% p_k - (D_k - R_k - J_k).
Proof.
intro LE.
apply subh3; last by apply interference_bound_edf_remainder_ge_slack.
by rewrite -subndiv_eq_mod; apply subh3; last by apply leq_trunc_div.
apply subh3.
by rewrite -subndiv_eq_mod; apply subh3.
Qed.
(* Next, we prove that interference caused by j_fst is bounded by the length
......
......@@ -955,8 +955,6 @@ Module ResponseTimeIterationEDF.
have COMPLETED := RLIST tsk R HAS j ARRj JOBtsk.
exploit (DL rt_bounds tsk R);
[by ins | by ins | clear DL; intro DL].
rewrite eqn_leq; apply/andP; split; first by apply cumulative_service_le_job_cost.
apply leq_trans with (n := service sched j (job_arrival j + R)); last first.
{
unfold valid_sporadic_taskset, is_valid_sporadic_task in *.
......@@ -964,8 +962,7 @@ Module ResponseTimeIterationEDF.
specialize (JOBPARAMS j ARRj); des; rewrite JOBPARAMS1.
by rewrite JOBtsk.
}
rewrite leq_eqVlt; apply/orP; left; rewrite eq_sym.
by apply COMPLETED.
by done.
Qed.
(* For completeness, since all jobs of the arrival sequence
......
......@@ -234,12 +234,7 @@ Module ResponseTimeAnalysisEDF.
rewrite subh1; last by rewrite [R](REC tsk) // leq_addr.
rewrite -addnBA // subnn addn0.
move: (NOTCOMP) => /negP NOTCOMP'.
rewrite neq_ltn in NOTCOMP.
move: NOTCOMP => /orP [LT | BUG]; last first.
{
exfalso; rewrite ltnNge in BUG; move: BUG => /negP BUG; apply BUG.
by apply cumulative_service_le_job_cost.
}
rewrite -ltnNge in