Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
PROSA - Formally Proven Schedulability Analysis
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Lasse Blaauwbroek
PROSA - Formally Proven Schedulability Analysis
Commits
4c3e55e7
Commit
4c3e55e7
authored
8 years ago
by
Felipe Cerqueira
Browse files
Options
Downloads
Patches
Plain Diff
Remove repeated lemmas
parent
d0dfa9b4
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
model/arrival_bounds.v
+8
-91
8 additions, 91 deletions
model/arrival_bounds.v
with
8 additions
and
91 deletions
model/arrival_bounds.v
+
8
−
91
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 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
SporadicArrivals
AfterQuietTime
.
End
BoundOn
SporadicArrivals
.
End
Lemmas
.
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment