Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
R
rtproofs
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Felipe Cerqueira
rtproofs
Commits
4c3e55e7
Commit
4c3e55e7
authored
Oct 21, 2016
by
Felipe Cerqueira
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
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
SporadicArrivalsAfterQuietTime
.
Section
BoundOnSporadicArrivals
.
(
*
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
n

th
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
SporadicArrivalsAfterQuietTime
.
End
BoundOnSporadicArrivals
.
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