Built with Alectryon, running Coq+SerAPI v8.14.0+0.14.0. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑ Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use instead of Ctrl.
Notation "[ rel _ _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ : _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ & _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ | _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "[ rel _ _ in _ ]" was already used in scope fun_scope. [notation-overridden,parsing]
Notation "_ + _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ - _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ <= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ < _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ >= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ > _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ <= _ <= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ < _ <= _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ <= _ < _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ < _ < _" was already used in scope nat_scope. [notation-overridden,parsing]
Notation "_ * _" was already used in scope nat_scope. [notation-overridden,parsing]
Require Export prosa.util.nat. (** We define the notion of prefix-equivalence of schedules. *) Section PrefixDefinition. (** For any type of jobs... *) Context {Job : JobType}. (** ... and any kind of processor model, ... *) Context {PState: Type} `{ProcessorState Job PState}. (** ... two schedules share an identical prefix if they are pointwise identical (at least) up to a fixed horizon. *) Definition identical_prefix (sched sched' : schedule PState) (horizon : instant) := forall t, t < horizon -> sched t = sched' t. (** In other words, two schedules with a shared prefix are completely interchangeable w.r.t. whether a job is scheduled (in the prefix). *)
Job: JobType
PState: Type
H: ProcessorState Job PState

forall (sched sched' : schedule PState) (h : instant), identical_prefix sched sched' h -> forall (j : Job) (t : nat), t < h -> scheduled_at sched j t = scheduled_at sched' j t
Job: JobType
PState: Type
H: ProcessorState Job PState

forall (sched sched' : schedule PState) (h : instant), identical_prefix sched sched' h -> forall (j : Job) (t : nat), t < h -> scheduled_at sched j t = scheduled_at sched' j t
Job: JobType
PState: Type
H: ProcessorState Job PState
sched, sched': schedule PState
h: instant
IDENT: identical_prefix sched sched' h
j: Job
t: nat
LT_h: t < h

scheduled_at sched j t = scheduled_at sched' j t
now rewrite /scheduled_at (IDENT t LT_h). Qed. (** Trivially, any prefix of an identical prefix is also an identical prefix. *)
Job: JobType
PState: Type
H: ProcessorState Job PState

forall (sched sched' : schedule PState) (h : instant), identical_prefix sched sched' h -> forall h' : nat, h' <= h -> identical_prefix sched sched' h'
Job: JobType
PState: Type
H: ProcessorState Job PState

forall (sched sched' : schedule PState) (h : instant), identical_prefix sched sched' h -> forall h' : nat, h' <= h -> identical_prefix sched sched' h'
Job: JobType
PState: Type
H: ProcessorState Job PState
sched, sched': schedule PState
h: instant
IDENT: identical_prefix sched sched' h
h': nat
INCL: h' <= h
t: nat
LT_h': t < h'

sched t = sched' t
Job: JobType
PState: Type
H: ProcessorState Job PState
sched, sched': schedule PState
h: instant
IDENT: identical_prefix sched sched' h
h': nat
INCL: h' <= h
t: nat
LT_h': t < h'

t < h
now apply (ltn_leq_trans LT_h'). Qed. End PrefixDefinition.