From 44f3b130deadad6970b97c85bfef2a527e5e2e22 Mon Sep 17 00:00:00 2001
From: Sergei Bozhko <sbozhko@mpi-sws.org>
Date: Mon, 8 Apr 2024 12:06:15 +0200
Subject: [PATCH] prove that FIFO has no service inversion

---
 analysis/facts/priority/fifo.v | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/analysis/facts/priority/fifo.v b/analysis/facts/priority/fifo.v
index 54a2ecde6..9a5f23061 100644
--- a/analysis/facts/priority/fifo.v
+++ b/analysis/facts/priority/fifo.v
@@ -8,6 +8,7 @@ Require Export prosa.analysis.facts.readiness.basic.
 Require Export prosa.analysis.facts.busy_interval.all.
 Require Export prosa.analysis.facts.preemption.job.nonpreemptive.
 Require Export prosa.analysis.facts.priority.inversion.
+Require Export prosa.analysis.facts.busy_interval.service_inversion.
 
 (** We first make some trivial observations about the FIFO priority policy to
     avoid having to re-reason these steps repeatedly in the subsequent
@@ -165,6 +166,15 @@ Section BasicLemmas.
         by apply: leq_trans. }
     Qed.
 
+    (** As a corollary, FIFO implies the absence of service inversion. *)
+    Corollary FIFO_implies_no_service_inversion :
+      service_inversion_is_bounded_by arr_seq sched tsk (constant 0).
+    Proof.
+      move=> j ARR TSK POS t1 t2 PREF.
+      rewrite (leqRW (cumul_service_inv_le_cumul_priority_inv _ _ _ _ _ _ _ _ _ _)) //=.
+      by apply FIFO_implies_no_pi.
+    Qed.
+
   End PriorityInversionBounded.
 
 
-- 
GitLab