From 79c9bb91fbdce0661c0483109cc2d352eca41292 Mon Sep 17 00:00:00 2001
From: Justin Loew <jloloew@gmail.com>
Date: Fri, 23 Mar 2018 16:17:32 -0500
Subject: [PATCH] Add check for fairness which passes but maybe shouldn't be
 passing

---
 node-preds.maude      | 16 ++++++++++------
 test-node-preds.maude |  3 +--
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/node-preds.maude b/node-preds.maude
index 891c252..0167031 100644
--- a/node-preds.maude
+++ b/node-preds.maude
@@ -58,12 +58,16 @@ omod CHECK-NODE-SYSTEM{N :: NZNAT#} is
   op isUnfairPair : Oid Oid -> Formula .
   op isUnfairPre : Oid Oid -> Prop .
 
-  eq isUnfair = isUnfairAux(#, #) .
-  eq isUnfairAux([0], [0]) = False .
-  eq isUnfairAux([s(I)], [0]) = isUnfairPair([s(I)], [0]) \/ isUnfairAux([I], [#]) .
-  eq isUnfairAux([I], [s(J)]) = isUnfairPair([I], [s(J)]) \/ isUnfairAux([I], [J]) .
-  eq isUnfairPair(M, N) =
-    isUnfairPre(M, N) -> ~ ((~ inCritSec(N)) U inCritSec(M)) [owise] .
+  --- TODO: Why does this work? Shouldn't it break if M and N transition to Queued at the same timestamp if N < M?
+  eq isUnfair = isUnfairAux([0], [0]) .
+  ceq isUnfairAux([I], [J]) =
+    isUnfairPair([I], [J]) \/ isUnfairAux([I], [s(J)])
+    if I < # /\ J < # .
+  ceq isUnfairAux([I], [J]) =
+    isUnfairAux([s(I)], [0])
+    if I < # /\ J >= # .
+  ceq isUnfairAux([I], [J]) = False if I >= # .
+  eq isUnfairPair(M, N) = isUnfairPre(M, N) /\ (isQueued(M) U inCritSec(N)) .
   eq < M : Node | mode : Queued, A >
      < N : Node | mode : Idle, B > C
     |= isUnfairPre(M, N) = true .
diff --git a/test-node-preds.maude b/test-node-preds.maude
index 25d330e..17917ed 100644
--- a/test-node-preds.maude
+++ b/test-node-preds.maude
@@ -19,6 +19,5 @@ red modelCheck(init, <>[]~ hasUnsentMessages) .
 --- Expected: true
 
 --- Check for fairness.
-red modelCheck(init, (<> isExhausted) -> [] ~ isUnfair) .
----red modelCheck(init, (isUnfair_Pre(N:Oid, I:Nat, M:Oid, J:Nat) -> <> isUnfair_Post(N:Oid, I:Nat, M:Oid, J:Nat))) .
+red modelCheck(init, [] ~ isUnfair) .
 --- Expected: true
-- 
GitLab