# Optimality of EDF on Ideal Uniprocessors

This module provides the famous EDF optimality theorem: if there is any way to meet all deadlines (assuming an ideal uniprocessor schedule), then there is also an (ideal) EDF schedule in which all deadlines are met.
The following results assume ideal uniprocessor schedules...
... and the basic (i.e., Liu & Layland) readiness model under which any pending job is always ready.

## Optimality Theorem

Section Optimality.
For any given type of jobs, each characterized by execution costs, an arrival time, and an absolute deadline,...
Context {Job : JobType} `{JobCost Job} `{JobDeadline Job} `{JobArrival Job}.

... and any valid job arrival sequence.
We observe that EDF is optimal in the sense that, if there exists any schedule in which all jobs of arr_seq meet their deadline, then there also exists an EDF schedule in which all deadlines are met.
Theorem EDF_optimality:
( any_sched : schedule (ideal.processor_state Job),
valid_schedule any_sched arr_seq
edf_sched : schedule (ideal.processor_state Job),
valid_schedule edf_sched arr_seq
EDF_schedule edf_sched.
Proof.
move: (all_deadlines_met_in_valid_schedule _ _ COME DL_ARR_MET) ⇒ DL_MET.
set sched' := edf_transform sched.
sched'. split; last split.
- by apply edf_schedule_is_valid.
- by apply edf_transform_ensures_edf.
Qed.

End Optimality.

## Weak Optimality Theorem

We further state a weaker notion of the above optimality result that avoids a dependency on a given arrival sequence. Specifically, it establishes that, given a reference schedule without deadline misses, there exists an EDF schedule of the same jobs in which no deadlines are missed.
Section WeakOptimality.

For any given type of jobs, each characterized by execution costs, an arrival time, and an absolute deadline,...
Context {Job : JobType} `{JobCost Job} `{JobDeadline Job} `{JobArrival Job}.

... if we have a well-behaved reference schedule ...
... in which no deadlines are missed, ...
...then there also exists an EDF schedule in which no deadlines are missed (and in which exactly the same set of jobs is scheduled, as ensured by the last clause).
Theorem weak_EDF_optimality:
edf_sched : schedule (ideal.processor_state Job),
jobs_must_arrive_to_execute edf_sched
completed_jobs_dont_execute edf_sched
EDF_schedule edf_sched
j,
( t, scheduled_at any_sched j t)
( t', scheduled_at edf_sched j t').
Proof.
set sched' := edf_transform any_sched.
sched'. repeat split.
- by apply edf_transform_jobs_must_arrive.
- by apply edf_transform_completed_jobs_dont_execute.