diff --git a/analysis/facts/model/task_schedule.v b/analysis/facts/model/task_schedule.v new file mode 100644 index 0000000000000000000000000000000000000000..1f76419923731d166c4bdb87951dac7a1b7c9ad9 --- /dev/null +++ b/analysis/facts/model/task_schedule.v @@ -0,0 +1,50 @@ +Require Export prosa.model.task.concept. +Require Export prosa.analysis.definitions.task_schedule. +Require Export prosa.analysis.facts.model.ideal_schedule. + +(** In this file we provide basic properties related to schedule of a task. *) +Section TaskSchedule. + + (** Consider any type of tasks ... *) + Context {Task : TaskType}. + Context `{TaskCost Task}. + + (** ... and any type of jobs associated with these tasks. *) + Context {Job : JobType}. + Context `{JobTask Job Task}. + Context `{JobArrival Job}. + Context `{JobCost Job}. + + (** Let [sched] be any ideal uni-processor schedule. *) + Variable sched : schedule (ideal.processor_state Job). + + (** Let [tsk] be any task. *) + Variable tsk : Task. + + (** We show that if a job of task [tsk] is scheduled at time [t], + then task [tsk] is scheduled at time [t]. *) + Lemma job_of_task_scheduled_implies_task_scheduled : + forall j t, + job_of_task tsk j -> + scheduled_at sched j t -> + task_scheduled_at sched tsk t. + Proof. + intros ? ? TSK SCHED. + unfold task_scheduled_at. + by move: SCHED; rewrite scheduled_at_def => /eqP ->. + Qed. + + (** And vice versa, if no job of task [tsk] is scheduled at time + [t], then task [tsk] is not scheduled at time [t]. *) + Lemma job_of_task_scheduled_implies_task_scheduled': + forall j t, + ~~ job_of_task tsk j -> + scheduled_at sched j t -> + ~~ task_scheduled_at sched tsk t. + Proof. + move => j t /negP TSK SCHED; apply /negP => TSCHED; apply: TSK. + move: SCHED; rewrite scheduled_at_def => /eqP SCHED. + by move: TSCHED; rewrite /task_scheduled_at SCHED. + Qed. + +End TaskSchedule.