Flash_nodata
Safety properties
Below are the safety properties we want to verify, in negated form.
∃ p. ( CacheState_home = CACHE_E ∧ CacheState[p] = CACHE_E )
∃ i,j. i≠j ∧ ( CacheState[i] = CACHE_E ∧ CacheState[j] = CACHE_E )
Options used
-brab 2 -forward-depth 6
Inferred invariants
All invariants are shown in their negated form, where
#1 and #2
are distinct existentially quantified variables.
CacheState_home = CACHE_I && Dir_Local = True && Dir_Dirty = True
Home <> #1 && Dir_HeadVld = False && UniMsg_Cmd[#1] = UNI_PutX
ProcCmd_home = NODE_Get && Dir_Local = True
CacheState_home = CACHE_E && Dir_Dirty = False
Home <> #1 && Dir_HeadVld = False && CacheState[#1] = CACHE_E
WbMsg_Cmd = WB_Wb && ShWbMsg_Cmd = SHWB_ShWb
UniMsg_Cmd_home = UNI_Put && ShWbMsg_Cmd = SHWB_ShWb
UniMsg_Cmd_home = UNI_PutX && ShWbMsg_Cmd = SHWB_ShWb
Dir_Dirty = False && ShWbMsg_Cmd = SHWB_ShWb
Dir_HeadVld = False && ShWbMsg_Cmd = SHWB_ShWb
Dir_Dirty = False && WbMsg_Cmd = WB_Wb
Dir_HeadVld = False && WbMsg_Cmd = WB_Wb
UniMsg_Cmd_home = UNI_Put && Dir_Dirty = False
UniMsg_Cmd_home = UNI_Put && Dir_HeadVld = False
Home <> #1 && CacheState[#1] = CACHE_E && UniMsg_Cmd[#1] = UNI_PutX
UniMsg_Cmd_home = UNI_PutX && Dir_Dirty = False
UniMsg_Cmd_home = UNI_PutX && Dir_HeadVld = False
Home <> #1 && ShWbMsg_Cmd = SHWB_ShWb && UniMsg_Cmd[#1] = UNI_PutX
Home <> #1 && UniMsg_Cmd_home = UNI_Put && UniMsg_Cmd[#1] = UNI_PutX
Home <> #1 && Home <> #2 && UniMsg_Cmd[#1] = UNI_PutX && UniMsg_Cmd[#2] = UNI_PutX
CacheState_home = CACHE_E && Dir_HeadVld = True
Home <> #1 && UniMsg_Cmd_home = UNI_PutX && UniMsg_Cmd[#1] = UNI_PutX
ShWbMsg_Cmd = SHWB_ShWb && CacheState[#1] = CACHE_E
ShWbMsg_Cmd = SHWB_ShWb && ShWbMsg_Proc = Home
Home <> #1 && Dir_Dirty = False && UniMsg_Cmd[#1] = UNI_PutX
UniMsg_Cmd_home = UNI_Put && CacheState[#1] = CACHE_E
InvMarked_home = True
Home <> #1 && CacheState[#2] = CACHE_E && UniMsg_Cmd[#1] = UNI_PutX
Home <> #1 && CacheState_home = CACHE_E && UniMsg_Cmd[#1] = UNI_PutX
Dir_Dirty = False && CacheState[#1] = CACHE_E
You can find the list of all invariants that can be extracted from BRAB here (also in negated form), this collection being inductive.
Search graph
The algorithm starts from the formula located at the bottom,
inside a red
octagon. Variables #1, #2,
… that appear
in the nodes are distinct skolem variables so we show a formula
φ(#1, #2) as equivalent to ∃
z1, z2.
z1 ≠ z2 ∧ φ(z1,
z2). Plain black edges represent
pre-image relations and are annotated by the transition instance that
was considered. Black circles denote nodes that were obtained by
pre-image computation and were not covered by already visited
nodes. The nodes circled in gray are the one that were not
useful because they were subsumed by formulas pointed by the
gray dashed
arrows. Approximations are shown
in blue rectangles. Each approximation originates from the node that
connects its rectangle with a bold dashed blue edge.