Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions NOTICE
Original file line number Diff line number Diff line change
Expand Up @@ -47,12 +47,17 @@ tlaplus/Examples — MIT, except where noted below — https://github.com/tl
external artifact's licensing and attribution requirements.
- tlaplus_examples_FlashProtocol — MIT: the benchmark model corresponds
to FlashWithMutex.tla at commit
352084b3e3b57b37b47973afdee224b5979f574d:
https://github.com/tlaplus/Examples/tree/352084b3e3b57b37b47973afdee224b5979f574d/specifications/FlashProtocol
a94afef81388fe268528781cfb7ce207fa8bcac1:
https://github.com/tlaplus/Examples/tree/a94afef81388fe268528781cfb7ce207fa8bcac1/specifications/FlashProtocol
It is a TLA+ translation (by Markus A. Kuppe; tlaplus/Examples PR #216)
of the FLASH directory-based cache-coherence protocol from the Murphi
model flashWithMutex.m (CMP Other-node abstraction), a companion to
tlaplus_examples_GermanProtocol one level up in protocol complexity. The
model flashWithMutex.m, a companion to
tlaplus_examples_GermanProtocol one level up in protocol complexity.
Upstream PR #226 moved the Murphi model's CMP Other-node abstraction
into a separate FlashWithMutexCMP.tla, which the benchmark does not
include: the abstraction exists to make one node count stand for all of
them under model checking, and a TLAPS proof holds for every constant
value without it. The
Murphi source is from https://github.com/dsethi/ProtocolDeadlockFiles,
published as supplementary material for Divjyot Sethi, Muralidhar
Talupur, and Sharad Malik, "Using Flow Specifications of Parameterized
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,18 @@ HandleUni(n) ==
\/ \E d \in NODE : \/ NI_Remote_Nak(n, d)
\/ NI_Remote_Get_Put(n, d)
\/ NI_Remote_GetX_PutX(n, d)
\/ ABS_NI_Remote_Get_Nak_dst(n) \/ ABS_NI_Remote_GetX_Nak_dst(n)
\/ ABS_NI_Remote_Get_Put_dst(n) \/ ABS_NI_Remote_GetX_PutX_dst(n)

HandleInv(n) == NI_Inv(n) \/ NI_InvAck(n)

HandleShWb == NI_FAck \/ NI_ShWb \/ ABS_NI_ShWb

AbsRespond(d) ==
\/ ABS_NI_Remote_Nak_src(d)
\/ ABS_NI_Remote_Get_Put_src(d)
\/ ABS_NI_Remote_GetX_PutX_src(d)

AbsRespondSrcDst ==
\/ ABS_NI_Remote_Nak_src_dst
\/ ABS_NI_Remote_Get_Put_src_dst
\/ ABS_NI_Remote_GetX_PutX_src_dst
HandleShWb == NI_FAck \/ NI_ShWb

Fairness ==
/\ \A n \in NODE : /\ WF_vars(HandleUni(n))
/\ WF_vars(HandleInv(n))
/\ WF_vars(NI_Replace(n))
/\ WF_vars(AbsRespond(n))
/\ WF_vars(NI_Nak_Clear)
/\ WF_vars(NI_Wb)
/\ WF_vars(HandleShWb)
/\ WF_vars(ABS_NI_InvAck)
/\ WF_vars(AbsRespondSrcDst)

FairSpec == Init /\ [][Next]_vars /\ Fairness

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,18 @@ HandleUni(n) ==
\/ \E d \in NODE : \/ NI_Remote_Nak(n, d)
\/ NI_Remote_Get_Put(n, d)
\/ NI_Remote_GetX_PutX(n, d)
\/ ABS_NI_Remote_Get_Nak_dst(n) \/ ABS_NI_Remote_GetX_Nak_dst(n)
\/ ABS_NI_Remote_Get_Put_dst(n) \/ ABS_NI_Remote_GetX_PutX_dst(n)

HandleInv(n) == NI_Inv(n) \/ NI_InvAck(n)

HandleShWb == NI_FAck \/ NI_ShWb \/ ABS_NI_ShWb

AbsRespond(d) ==
\/ ABS_NI_Remote_Nak_src(d)
\/ ABS_NI_Remote_Get_Put_src(d)
\/ ABS_NI_Remote_GetX_PutX_src(d)

AbsRespondSrcDst ==
\/ ABS_NI_Remote_Nak_src_dst
\/ ABS_NI_Remote_Get_Put_src_dst
\/ ABS_NI_Remote_GetX_PutX_src_dst
HandleShWb == NI_FAck \/ NI_ShWb

Fairness ==
/\ \A n \in NODE : /\ WF_vars(HandleUni(n))
/\ WF_vars(HandleInv(n))
/\ WF_vars(NI_Replace(n))
/\ WF_vars(AbsRespond(n))
/\ WF_vars(NI_Nak_Clear)
/\ WF_vars(NI_Wb)
/\ WF_vars(HandleShWb)
/\ WF_vars(ABS_NI_InvAck)
/\ WF_vars(AbsRespondSrcDst)

FairSpec == Init /\ [][Next]_vars /\ Fairness

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,18 @@ HandleUni(n) ==
\/ \E d \in NODE : \/ NI_Remote_Nak(n, d)
\/ NI_Remote_Get_Put(n, d)
\/ NI_Remote_GetX_PutX(n, d)
\/ ABS_NI_Remote_Get_Nak_dst(n) \/ ABS_NI_Remote_GetX_Nak_dst(n)
\/ ABS_NI_Remote_Get_Put_dst(n) \/ ABS_NI_Remote_GetX_PutX_dst(n)

HandleInv(n) == NI_Inv(n) \/ NI_InvAck(n)

HandleShWb == NI_FAck \/ NI_ShWb \/ ABS_NI_ShWb

AbsRespond(d) ==
\/ ABS_NI_Remote_Nak_src(d)
\/ ABS_NI_Remote_Get_Put_src(d)
\/ ABS_NI_Remote_GetX_PutX_src(d)

AbsRespondSrcDst ==
\/ ABS_NI_Remote_Nak_src_dst
\/ ABS_NI_Remote_Get_Put_src_dst
\/ ABS_NI_Remote_GetX_PutX_src_dst
HandleShWb == NI_FAck \/ NI_ShWb

Fairness ==
/\ \A n \in NODE : /\ WF_vars(HandleUni(n))
/\ WF_vars(HandleInv(n))
/\ WF_vars(NI_Replace(n))
/\ WF_vars(AbsRespond(n))
/\ WF_vars(NI_Nak_Clear)
/\ WF_vars(NI_Wb)
/\ WF_vars(HandleShWb)
/\ WF_vars(ABS_NI_InvAck)
/\ WF_vars(AbsRespondSrcDst)

FairSpec == Init /\ [][Next]_vars /\ Fairness

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,18 @@ HandleUni(n) ==
\/ \E d \in NODE : \/ NI_Remote_Nak(n, d)
\/ NI_Remote_Get_Put(n, d)
\/ NI_Remote_GetX_PutX(n, d)
\/ ABS_NI_Remote_Get_Nak_dst(n) \/ ABS_NI_Remote_GetX_Nak_dst(n)
\/ ABS_NI_Remote_Get_Put_dst(n) \/ ABS_NI_Remote_GetX_PutX_dst(n)

HandleInv(n) == NI_Inv(n) \/ NI_InvAck(n)

HandleShWb == NI_FAck \/ NI_ShWb \/ ABS_NI_ShWb

AbsRespond(d) ==
\/ ABS_NI_Remote_Nak_src(d)
\/ ABS_NI_Remote_Get_Put_src(d)
\/ ABS_NI_Remote_GetX_PutX_src(d)

AbsRespondSrcDst ==
\/ ABS_NI_Remote_Nak_src_dst
\/ ABS_NI_Remote_Get_Put_src_dst
\/ ABS_NI_Remote_GetX_PutX_src_dst
HandleShWb == NI_FAck \/ NI_ShWb

Fairness ==
/\ \A n \in NODE : /\ WF_vars(HandleUni(n))
/\ WF_vars(HandleInv(n))
/\ WF_vars(NI_Replace(n))
/\ WF_vars(AbsRespond(n))
/\ WF_vars(NI_Nak_Clear)
/\ WF_vars(NI_Wb)
/\ WF_vars(HandleShWb)
/\ WF_vars(ABS_NI_InvAck)
/\ WF_vars(AbsRespondSrcDst)

FairSpec == Init /\ [][Next]_vars /\ Fairness

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,18 @@ HandleUni(n) ==
\/ \E d \in NODE : \/ NI_Remote_Nak(n, d)
\/ NI_Remote_Get_Put(n, d)
\/ NI_Remote_GetX_PutX(n, d)
\/ ABS_NI_Remote_Get_Nak_dst(n) \/ ABS_NI_Remote_GetX_Nak_dst(n)
\/ ABS_NI_Remote_Get_Put_dst(n) \/ ABS_NI_Remote_GetX_PutX_dst(n)

HandleInv(n) == NI_Inv(n) \/ NI_InvAck(n)

HandleShWb == NI_FAck \/ NI_ShWb \/ ABS_NI_ShWb

AbsRespond(d) ==
\/ ABS_NI_Remote_Nak_src(d)
\/ ABS_NI_Remote_Get_Put_src(d)
\/ ABS_NI_Remote_GetX_PutX_src(d)

AbsRespondSrcDst ==
\/ ABS_NI_Remote_Nak_src_dst
\/ ABS_NI_Remote_Get_Put_src_dst
\/ ABS_NI_Remote_GetX_PutX_src_dst
HandleShWb == NI_FAck \/ NI_ShWb

Fairness ==
/\ \A n \in NODE : /\ WF_vars(HandleUni(n))
/\ WF_vars(HandleInv(n))
/\ WF_vars(NI_Replace(n))
/\ WF_vars(AbsRespond(n))
/\ WF_vars(NI_Nak_Clear)
/\ WF_vars(NI_Wb)
/\ WF_vars(HandleShWb)
/\ WF_vars(ABS_NI_InvAck)
/\ WF_vars(AbsRespondSrcDst)

FairSpec == Init /\ [][Next]_vars /\ Fairness

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,18 @@ HandleUni(n) ==
\/ \E d \in NODE : \/ NI_Remote_Nak(n, d)
\/ NI_Remote_Get_Put(n, d)
\/ NI_Remote_GetX_PutX(n, d)
\/ ABS_NI_Remote_Get_Nak_dst(n) \/ ABS_NI_Remote_GetX_Nak_dst(n)
\/ ABS_NI_Remote_Get_Put_dst(n) \/ ABS_NI_Remote_GetX_PutX_dst(n)

HandleInv(n) == NI_Inv(n) \/ NI_InvAck(n)

HandleShWb == NI_FAck \/ NI_ShWb \/ ABS_NI_ShWb

AbsRespond(d) ==
\/ ABS_NI_Remote_Nak_src(d)
\/ ABS_NI_Remote_Get_Put_src(d)
\/ ABS_NI_Remote_GetX_PutX_src(d)

AbsRespondSrcDst ==
\/ ABS_NI_Remote_Nak_src_dst
\/ ABS_NI_Remote_Get_Put_src_dst
\/ ABS_NI_Remote_GetX_PutX_src_dst
HandleShWb == NI_FAck \/ NI_ShWb

Fairness ==
/\ \A n \in NODE : /\ WF_vars(HandleUni(n))
/\ WF_vars(HandleInv(n))
/\ WF_vars(NI_Replace(n))
/\ WF_vars(AbsRespond(n))
/\ WF_vars(NI_Nak_Clear)
/\ WF_vars(NI_Wb)
/\ WF_vars(HandleShWb)
/\ WF_vars(ABS_NI_InvAck)
/\ WF_vars(AbsRespondSrcDst)

FairSpec == Init /\ [][Next]_vars /\ Fairness

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

EXTENDS FlashWithMutexModel

ABS_NODE == NODE \cup {Other}

CACHE_STATE == {"CACHE_I", "CACHE_S", "CACHE_E"}
NODE_CMD == {"NODE_None", "NODE_Get", "NODE_GetX"}
UNI_CMD == {"UNI_None", "UNI_Get", "UNI_GetX", "UNI_Put", "UNI_PutX", "UNI_Nak"}
Expand All @@ -14,7 +12,7 @@ SHWB_CMD == {"SHWB_None", "SHWB_ShWb", "SHWB_FAck"}
NAKC_CMD == {"NAKC_None", "NAKC_Nakc"}

DataU == DATA \cup {Undefined}
NodeU == ABS_NODE \cup {Undefined}
NodeU == NODE \cup {Undefined}
UniU == UNI_CMD \cup {Undefined}

TypeOK ==
Expand All @@ -38,7 +36,6 @@ TypeOK ==
/\ Collecting \in BOOLEAN
/\ FwdCmd \in UNI_CMD
/\ FwdSrc \in NodeU
/\ Env_o \in BOOLEAN

Spec == Init /\ [][Next]_vars

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,18 @@ HandleUni(n) ==
\/ \E d \in NODE : \/ NI_Remote_Nak(n, d)
\/ NI_Remote_Get_Put(n, d)
\/ NI_Remote_GetX_PutX(n, d)
\/ ABS_NI_Remote_Get_Nak_dst(n) \/ ABS_NI_Remote_GetX_Nak_dst(n)
\/ ABS_NI_Remote_Get_Put_dst(n) \/ ABS_NI_Remote_GetX_PutX_dst(n)

HandleInv(n) == NI_Inv(n) \/ NI_InvAck(n)

HandleShWb == NI_FAck \/ NI_ShWb \/ ABS_NI_ShWb

AbsRespond(d) ==
\/ ABS_NI_Remote_Nak_src(d)
\/ ABS_NI_Remote_Get_Put_src(d)
\/ ABS_NI_Remote_GetX_PutX_src(d)

AbsRespondSrcDst ==
\/ ABS_NI_Remote_Nak_src_dst
\/ ABS_NI_Remote_Get_Put_src_dst
\/ ABS_NI_Remote_GetX_PutX_src_dst
HandleShWb == NI_FAck \/ NI_ShWb

Fairness ==
/\ \A n \in NODE : /\ WF_vars(HandleUni(n))
/\ WF_vars(HandleInv(n))
/\ WF_vars(NI_Replace(n))
/\ WF_vars(AbsRespond(n))
/\ WF_vars(NI_Nak_Clear)
/\ WF_vars(NI_Wb)
/\ WF_vars(HandleShWb)
/\ WF_vars(ABS_NI_InvAck)
/\ WF_vars(AbsRespondSrcDst)

FairSpec == Init /\ [][Next]_vars /\ Fairness

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,18 @@ HandleUni(n) ==
\/ \E d \in NODE : \/ NI_Remote_Nak(n, d)
\/ NI_Remote_Get_Put(n, d)
\/ NI_Remote_GetX_PutX(n, d)
\/ ABS_NI_Remote_Get_Nak_dst(n) \/ ABS_NI_Remote_GetX_Nak_dst(n)
\/ ABS_NI_Remote_Get_Put_dst(n) \/ ABS_NI_Remote_GetX_PutX_dst(n)

HandleInv(n) == NI_Inv(n) \/ NI_InvAck(n)

HandleShWb == NI_FAck \/ NI_ShWb \/ ABS_NI_ShWb

AbsRespond(d) ==
\/ ABS_NI_Remote_Nak_src(d)
\/ ABS_NI_Remote_Get_Put_src(d)
\/ ABS_NI_Remote_GetX_PutX_src(d)

AbsRespondSrcDst ==
\/ ABS_NI_Remote_Nak_src_dst
\/ ABS_NI_Remote_Get_Put_src_dst
\/ ABS_NI_Remote_GetX_PutX_src_dst
HandleShWb == NI_FAck \/ NI_ShWb

Fairness ==
/\ \A n \in NODE : /\ WF_vars(HandleUni(n))
/\ WF_vars(HandleInv(n))
/\ WF_vars(NI_Replace(n))
/\ WF_vars(AbsRespond(n))
/\ WF_vars(NI_Nak_Clear)
/\ WF_vars(NI_Wb)
/\ WF_vars(HandleShWb)
/\ WF_vars(ABS_NI_InvAck)
/\ WF_vars(AbsRespondSrcDst)

FairSpec == Init /\ [][Next]_vars /\ Fairness

Expand Down
Loading
Loading