Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Sophie Quinton
rtproofs
Commits
4c3e55e7
Commit
4c3e55e7
authored
Oct 21, 2016
by
Felipe Cerqueira
Browse files
Remove repeated lemmas
parent
d0dfa9b4
Changes
1
Hide whitespace changes
Inline
Sidebyside
Showing
1 changed file
with
8 additions
and
91 deletions
+8
91
model/arrival_bounds.v
model/arrival_bounds.v
+8
91
No files found.
model/arrival_bounds.v
View file @
4c3e55e7
...
...
@@ 24,7 +24,7 @@ Module ArrivalBounds.
(* In this section, we prove an upper bound on the number of jobs that can arrive
in any interval. *)
Section
SporadicArrivals
AfterQuietTime
.
Section
BoundOn
SporadicArrivals
.
(* Assume that jobs are sporadic. *)
Hypothesis
H_sporadic_tasks
:
sporadic_task_model
task_period
arr_seq
job_task
.
...
...
@@ 119,106 +119,23 @@ Module ArrivalBounds.
Let
a_first
:
=
job_arrival
j_first
.
Let
a_last
:
=
job_arrival
j_last
.
(* Next, we prove some auxiliary lemmas.
First, we show that the jobs in the sequence satisfy some basic properties... *)
Local
Corollary
sporadic_arrival_bound_properties_of_nth
:
(* Recall from task_arrival.v the properties of the nth job ...*)
Corollary
sporadic_arrival_bound_properties_of_nth
:
forall
idx
,
idx
<
num_arrivals
>
t1
<=
job_arrival
(
nth_task
idx
)
<
t2
/\
job_task
(
nth_task
idx
)
=
tsk
.
Proof
.
intros
idx
LTidx
.
have
IN
:
nth_task
idx
\
in
sorted_jobs
by
rewrite
mem_nth
//
size_sort
.
rewrite
mem_sort
in
IN
.
rewrite
2
!
mem_filter
in
IN
.
move
:
IN
=>
/
andP
[
JOB
/
andP
[
GE
LT
]]
;
apply
JobIn_arrived
in
LT
.
split
;
last
by
apply
/
eqP
.
by
apply
/
andP
;
split
.
by
apply
sorted_arrivals_properties_of_nth
.
Qed
.
(* ...and that consecutive jobs in the sequence are different. *)
Local
Corollary
sporadic_arrival_bound_current_differs_from_next
:
forall
idx
,
idx
<
num_arrivals
.
1
>
nth_task
idx
<>
nth_task
idx
.+
1
.
Proof
.
rename
H_at_least_two_jobs
into
TWO
.
intros
idx
LT
;
apply
/
eqP
.
rewrite
nth_uniq
?size_sort
/
arriving_jobs
/(
num_arrivals_of_task
_
_
_
_
_
)
/
num_arrivals
;
first
by
rewrite
neq_ltn
ltnSn
orTb
.
{
apply
leq_trans
with
(
n
:
=
num_arrivals
.
1
)
;
first
by
done
.
by
destruct
num_arrivals
;
first
by
rewrite
ltn0
in
TWO
.
}
{
destruct
num_arrivals
;
first
by
rewrite
ltn0
in
TWO
.
by
simpl
in
LT
;
rewrite
ltnS
.
}
{
rewrite
sort_uniq
filter_uniq
//
filter_uniq
//.
by
apply
JobIn_uniq
.
}
Qed
.
(* Since the list is sorted, we prove that each job arrives at
least (task_period tsk) time units after the previous job. *)
Lemma
sporadic_arrival_bound_separated_by_period
:
forall
idx
,
idx
<
num_arrivals
.
1
>
job_arrival
(
nth_task
idx
.+
1
)
>=
job_arrival
(
nth_task
idx
)
+
task_period
tsk
.
Proof
.
have
NTH
:
=
sporadic_arrival_bound_properties_of_nth
.
have
NEQ
:
=
sporadic_arrival_bound_current_differs_from_next
.
rename
H_sporadic_tasks
into
SPO
,
H_at_least_two_jobs
into
TWO
.
intros
idx
LT
.
exploit
(
NTH
idx
)
;
last
intro
NTH1
.
{
apply
leq_trans
with
(
n
:
=
num_arrivals
.
1
)
;
first
by
done
.
by
destruct
num_arrivals
;
first
by
rewrite
ltn0
in
TWO
.
}
exploit
(
NTH
idx
.+
1
)
;
last
intro
NTH2
.
{
destruct
num_arrivals
;
first
by
rewrite
ltn0
in
TWO
.
by
simpl
in
LT
;
rewrite
ltnS
.
}
move
:
NTH1
NTH2
=>
[
_
JOB1
]
[
_
JOB2
].
rewrite

JOB1
.
apply
SPO
;
[
by
apply
NEQ

by
rewrite
JOB1
JOB2
].
suff
ORDERED
:
by_arrival_time
(
nth_task
idx
)
(
nth_task
idx
.+
1
)
by
done
.
apply
sort_ordered
;
first
by
apply
sort_sorted
;
intros
x
y
;
apply
leq_total
.
by
rewrite
size_sort
.
Qed
.
(* By induction, we prove that that each job with index 'idx' arrives at
least idx*(task_period tsk) units after the first job. *)
Lemma
sporadic_arrival_bound_distance_from_first_job
:
forall
idx
,
idx
<
num_arrivals
>
job_arrival
(
nth_task
idx
)
>=
a_first
+
idx
*
task_period
tsk
.
Proof
.
have
SEP
:
=
sporadic_arrival_bound_separated_by_period
.
unfold
sporadic_task_model
in
*.
rename
H_sporadic_tasks
into
SPO
.
induction
idx
;
first
by
intros
_;
rewrite
mul0n
addn0
.
intros
LT
.
have
LT'
:
idx
<
num_arrivals
by
apply
leq_ltn_trans
with
(
n
:
=
idx
.+
1
).
specialize
(
IHidx
LT'
).
apply
leq_trans
with
(
n
:
=
job_arrival
(
nth_task
idx
)
+
task_period
tsk
)
;
first
by
rewrite
mulSn
[
task_period
_
+
_
]
addnC
addnA
leq_add2r
.
apply
SEP
.
by
rewrite
(
ltn_add2r
1
)
2
!
addn1
(
ltn_predK
LT
).
Qed
.
(* Therefore, the first and last jobs are separated by at least
(num_arrivals  1) periods. *)
(* ...and the distance between the first and last jobs. *)
Corollary
sporadic_arrival_bound_distance_between_first_and_last
:
a_last
>=
a_first
+
(
num_arrivals

1
)
*
task_period
tsk
.
Proof
.
have
DIST
:
=
sporadic_arrival_bound_distance_from_first_job
.
rename
H_at_least_two_jobs
into
TWO
.
rewrite
subn1
;
apply
DIST
.
by
destruct
num_arrivals
;
first
by
rewrite
ltn0
in
TWO
.
apply
sorted_arrivals_distance_between_first_and_last
;
try
(
by
done
).
by
apply
leq_ltn_trans
with
(
n
:
=
1
).
Qed
.
(* Because the number of arrivals is larger than the ceiling term,
...
...
@@ 300,7 +217,7 @@ Module ArrivalBounds.
by
apply
sporadic_task_arrival_bound_at_least_two_jobs
;
rewrite
CEIL
.
Qed
.
End
SporadicArrivals
AfterQuietTime
.
End
BoundOn
SporadicArrivals
.
End
Lemmas
.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment