Built with Alectryon, running Coq+SerAPI v8.20.0+0.20.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.
[Loading ML file ring_plugin.cmxs (using legacy method) ... done]
[Loading ML file ssrmatching_plugin.cmxs (using legacy method) ... done]
[Loading ML file ssreflect_plugin.cmxs (using legacy method) ... done]
Serlib plugin: coq-elpi.elpi is not available: serlib support is missing.
Incremental checking for commands in this plugin will be impacted.
[Loading ML file coq-elpi.elpi ... done]
[Loading ML file zify_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_core_plugin.cmxs (using legacy method) ... done]
[Loading ML file micromega_plugin.cmxs (using legacy method) ... done]
[Loading ML file btauto_plugin.cmxs (using legacy method) ... done]
Notation"_ + _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ - _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ <= _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ < _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ >= _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ > _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Notation"_ <= _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ < _ <= _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ <= _ < _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ < _ < _" was already used in scope
nat_scope. [notation-overridden,parsing,default]
Notation"_ * _" was already used in scope nat_scope.
[notation-overridden,parsing,default]
Require Export prosa.model.processor.platform_properties.(** In the following section, we prove some general properties about the ideal uniprocessor with exceedance processor state. *)SectionExceedanceProcStateProperties.(** In this section, we consider any type of jobs. *)Context `{Job : JobType}.(** First we prove that the processor state provides unit supply. *)
foralls : exceedance_proc_state Job, supply_in s <= 1
Job: JobType s: exceedance_proc_state Job
supply_in s <= 1
Job: JobType j: Job
supply_in (NominalExecution j) <= 1
Job: JobType j: Job
supply_in (ExceedanceExecution j) <= 1
Job: JobType
supply_in Idle <= 1
all : byrewrite /supply_in //=;rewrite sum_unit1.Qed.(** The usually opaque predicates are made transparent for this section to enable us to prove some processor properties. *)LocalTransparent scheduled_in scheduled_on service_on.(** A job [j] is said to be [scheduled_at] some time [t] if and only if the processor state at that time is [NominalExecution j] or [ExceedanceExecution j]. *)
sched t = NominalExecution j \/
sched t = ExceedanceExecution j ->
scheduled_in j (sched t)
bymove => [-> | -> ]; rewrite /scheduled_in /scheduled_on //=; apply /existsP.Qed.(** Next we prove that the processor model under consideration is a uniprocessor model i.e., only one job can be scheduled at any time instant. *)
bymove : SCHED1 => /eqP <-; move : SCHED2 => /eqP <-.Qed.(** Next, we prove that the processor model under consideration is fully consuming i.e., all the supply offered is consumed by the scheduled job. *)
byrewrite /service_at /service_in /exceedance_service_on /supply_at /supply_in
!/exceedance_service_on //= SCHED1 sum_unit1 // sum_unit1 //
/exceedance_service_on /exceedance_supply_on eq_refl.Qed.(** Finally we prove that the processor model under consideration is unit service i.e., it provides at most one unit of service at any time instant. *)
match pstate with
| NominalExecution j' => j' == j
| _ => 0end <= 1
Job: JobType j, j0: Job
(j0 == j) <= 1
byapply leq_b1.Qed.EndExceedanceProcStateProperties.(** Next, we prove some general properties specific to the ideal uniprocessor with exceedance processor state. *)SectionExceedanceProcStateProperties1.(** In this section we consider any type of jobs. *)Context `{Job : JobType}.(** First let us define the notion of exceedance execution. A processor state is said to be an exceedance execution state if is equal to [ExceedanceExecution j] for some [j]. *)Definitionis_exceedance_exec (pstate : (exceedance_proc_state Job)) :=
match pstate with
| ExceedanceExecution _ => true
| _ => false
end.(** Next, let us consider any schedule of the [exceedance_proc_state]. *)Variablesched : schedule (exceedance_proc_state Job).(** We prove that the schedule being in blackout at any time [t] is equivalent to the processor state at [t] being an exceedance execution state. *)