-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHermes.config.json
157 lines (157 loc) · 8.32 KB
/
Hermes.config.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
{
"preds" : [
"nodeState[VARI] = \"valid\"",
"nodeState[VARI] = \"invalid\"",
"nodeState[VARI] = \"invalid_write\"",
"nodeState[VARI] = \"write\"",
"nodeState[VARI] = \"replay\"",
"nodeState[VARI] \\in {\"write\", \"replay\"}",
"nodeState[VARI] \\in {\"write\", \"invalid_write\", \"replay\"}",
"nodeState[VARI] \\in {\"valid\", \"invalid\", \"replay\"}",
"nodeState[VARJ] = \"valid\"",
"nodeState[VARJ] = \"invalid\"",
"nodeState[VARJ] = \"invalid_write\"",
"nodeState[VARJ] = \"write\"",
"nodeState[VARJ] = \"replay\"",
"nodeState[VARI] \\in {\"write\", \"replay\"}",
"nodeState[VARI] \\in {\"invalid\", \"replay\"}",
"nodeState[VARI] \\in {\"write\", \"valid\"}",
"nodeState[VARJ] \\in {\"write\", \"replay\"}",
"nodeState[VARJ] \\in {\"invalid\", \"replay\"}",
"nodeState[VARJ] \\in {\"valid\", \"invalid\", \"replay\"}",
"nodeState[VARJ] \\in {\"write\", \"valid\"}",
"nodeTS[VARI] = nodeTS[VARJ]",
"greaterOrEqualTS(nodeTS[VARI].version, nodeTS[VARI].tieBreaker, nodeTS[VARJ].version, nodeTS[VARJ].tieBreaker)",
"nodeTS[VARI].version = nodeTS[VARJ].version",
"nodeTS[VARI].version > nodeTS[VARJ].version",
"nodeTS[VARI].version >= nodeTS[VARJ].version",
"nodeTS[VARI].version < nodeTS[VARJ].version",
"nodeTS[VARI].tieBreaker = VARI",
"nodeTS[VARI].tieBreaker = VARJ",
"nodeLastWriteTS[VARI].tieBreaker = VARI",
"nodeLastWriteTS[VARI].tieBreaker = VARJ",
"nodeTS[VARI].tieBreaker = nodeTS[VARJ].tieBreaker",
"nodeTS[VARI].tieBreaker < nodeTS[VARJ].tieBreaker",
"nodeTS[VARI].tieBreaker > nodeTS[VARJ].tieBreaker",
"nodeTS[VARI].tieBreaker <= nodeTS[VARJ].tieBreaker",
"nodeTS[VARI] = nodeLastWriteTS[VARI]",
"nodeTS[VARI].version = nodeLastWriteTS[VARJ].version",
"nodeTS[VARI].version > nodeLastWriteTS[VARJ].version",
"nodeTS[VARI].tieBreaker = nodeLastWriteTS[VARJ].tieBreaker",
"nodeTS[VARI].tieBreaker > nodeLastWriteTS[VARJ].tieBreaker",
"greaterTS(nodeTS[VARI].version, nodeTS[VARI].tieBreaker, nodeLastWriteTS[VARI].version, nodeLastWriteTS[VARI].tieBreaker)",
"nodeTS[VARI].tieBreaker = nodeLastWriteTS[VARI].tieBreaker",
"nodeTS[VARI].tieBreaker = nodeLastWriteTS[VARJ].tieBreaker",
"VARMVALI.version = nodeTS[VARI].version",
"VARMVALI.version < nodeTS[VARI].version",
"VARMVALI.tieBreaker = nodeTS[VARI].tieBreaker",
"VARMVALI.tieBreaker < nodeTS[VARI].tieBreaker",
"equalTS(VARMVALI.version, VARMVALI.tieBreaker, nodeTS[VARI].version, nodeTS[VARI].tieBreaker)",
"equalTS(VARMVALI.version, VARMVALI.tieBreaker, nodeLastWriteTS[VARI].version, nodeLastWriteTS[VARI].tieBreaker)",
"greaterTS(VARMVALI.version, VARMVALI.tieBreaker, nodeTS[VARI].version, nodeTS[VARI].tieBreaker)",
"greaterTS(VARMVALI.version, VARMVALI.tieBreaker, nodeLastWriteTS[VARI].version, nodeLastWriteTS[VARI].tieBreaker)",
"greaterOrEqualTS(VARMVALI.version, VARMVALI.tieBreaker, nodeTS[VARI].version, nodeTS[VARI].tieBreaker)",
"greaterOrEqualTS(VARMVALI.version, VARMVALI.tieBreaker, nodeLastWriteTS[VARI].version, nodeLastWriteTS[VARI].tieBreaker)",
"VARMACKI.version = nodeTS[VARI].version",
"VARMACKI.version < nodeTS[VARI].version",
"VARMACKI.tieBreaker = nodeTS[VARI].tieBreaker",
"VARMACKI.tieBreaker < nodeTS[VARI].tieBreaker",
"equalTS(VARMACKI.version, VARMACKI.tieBreaker, nodeTS[VARI].version, nodeTS[VARI].tieBreaker)",
"equalTS(VARMACKI.version, VARMACKI.tieBreaker, nodeLastWriteTS[VARI].version, nodeLastWriteTS[VARI].tieBreaker)",
"greaterTS(VARMACKI.version, VARMACKI.tieBreaker, nodeTS[VARI].version, nodeTS[VARI].tieBreaker)",
"greaterTS(VARMACKI.version, VARMACKI.tieBreaker, nodeLastWriteTS[VARI].version, nodeLastWriteTS[VARI].tieBreaker)",
"greaterOrEqualTS(VARMACKI.version, VARMACKI.tieBreaker, nodeTS[VARI].version, nodeTS[VARI].tieBreaker)",
"greaterOrEqualTS(VARMACKI.version, VARMACKI.tieBreaker, nodeLastWriteTS[VARI].version, nodeLastWriteTS[VARI].tieBreaker)",
"VARMACKI.sender = VARI",
"VARMACKI.sender = VARJ",
"VARMACKI.sender \\notin nodeRcvedAcks[VARI]",
"VARMACKI.sender \\in nodeRcvedAcks[VARJ]",
"VARMINVI.sender = VARI",
"VARMINVI.sender = VARJ",
"VARMINVI.sender \\in aliveNodes",
"VARMINVI.version = nodeTS[VARI].version",
"VARMINVI.version = nodeTS[VARJ].version",
"VARMINVI.version < nodeTS[VARI].version",
"VARMINVI.version < nodeTS[VARJ].version",
"VARMINVI.tieBreaker = VARI",
"VARMINVI.tieBreaker = VARJ",
"VARMINVI.tieBreaker = epochID",
"VARMINVI.tieBreaker > epochID",
"VARMINVI.tieBreaker = nodeTS[VARI].tieBreaker",
"VARMINVI.tieBreaker = nodeTS[VARJ].tieBreaker",
"VARMINVI.tieBreaker < nodeTS[VARI].tieBreaker",
"VARMINVI.tieBreaker < nodeTS[VARJ].tieBreaker",
"equalTS(VARMINVI.version, VARMINVI.tieBreaker, nodeTS[VARI].version, nodeTS[VARI].tieBreaker)",
"equalTS(VARMINVI.version, VARMINVI.tieBreaker, nodeTS[VARJ].version, nodeTS[VARJ].tieBreaker)",
"equalTS(VARMINVI.version, VARMINVI.tieBreaker, nodeLastWriteTS[VARI].version, nodeLastWriteTS[VARI].tieBreaker)",
"greaterTS(VARMINVI.version, VARMINVI.tieBreaker, nodeTS[VARI].version, nodeTS[VARI].tieBreaker)",
"greaterTS(VARMINVI.version, VARMINVI.tieBreaker, nodeTS[VARJ].version, nodeTS[VARJ].tieBreaker)",
"greaterTS(VARMINVI.version, VARMINVI.tieBreaker, nodeLastWriteTS[VARI].version, nodeLastWriteTS[VARI].tieBreaker)",
"greaterOrEqualTS(VARMINVI.version, VARMINVI.tieBreaker, nodeTS[VARI].version, nodeTS[VARI].tieBreaker)",
"greaterOrEqualTS(VARMINVI.version, VARMINVI.tieBreaker, nodeLastWriteTS[VARI].version, nodeLastWriteTS[VARI].tieBreaker)",
"VARI \\in nodeRcvedAcks[VARJ]",
"VARJ \\in nodeRcvedAcks[VARI]",
"receivedAllAcks(VARI) /\\ nodeRcvedAcks = nodeRcvedAcks",
"receivedAllAcks(VARJ) /\\ nodeRcvedAcks = nodeRcvedAcks",
"VARMACKI.epochID = epochID",
"VARMACKI.epochID > epochID",
"VARMINVI.epochID = epochID",
"VARMINVI.epochID > epochID",
"nodeLastWriter[VARI] = VARJ",
"nodeLastWriter[VARI] = VARI",
"nodeLastWriter[VARI] = nodeLastWriter[VARJ]",
"nodeLastWriter[VARI] < nodeLastWriter[VARJ]",
"nodeLastWriter[VARI] \\in aliveNodes",
"nodeLastWriter[VARJ] \\in aliveNodes",
"nodeWriteEpochID[VARI] < epochID",
"nodeWriteEpochID[VARJ] < epochID",
"nodeWriteEpochID[VARI] = epochID",
"nodeWriteEpochID[VARJ] = epochID",
"VARI \\in aliveNodes",
"VARJ \\in aliveNodes"
],
"action_local_preds":{
"NodeFailureAction": [
],
"HCoordWriteReplayAction": [
],
"HFollowerWriteReplayAction": [
]
},
"preds_alt" : [],
"safety" : "HConsistent",
"constants" : {
"H_NODES" : ["{0,1,2}", "{0,1,2,3}"],
"H_MAX_VERSION" : ["3"]
},
"large_instance_inv_check_index": 1,
"cti_gen_instance_indexes": [0,1],
"actions": [],
"constraint" : "",
"quant_inv" : "\\A VARI \\in H_NODES : \\A VARJ \\in H_NODES : \\A VARMVALI \\in msgsVAL : \\A VARMACKI \\in msgsACK : \\A VARMINVI \\in msgsINV : ",
"quant_inv_alt" : null,
"quant_vars": ["VARI", "VARJ", "VARMVALI", "VARMACKI", "VARMINVI"],
"model_consts" : "",
"symmetry" : false,
"typeok" : "TypeOKRandom",
"tlc_specific_spec": true,
"try_final_minimize": false,
"max_tlc_inv_depth": 17,
"simulation_inv_check": false,
"simulation_inv_check_num_states": 10000000,
"simulation_inv_check_depth": 40,
"simulate" : true,
"tlaps_proof_config": {
"assumes": [
"IsFiniteSet(H_NODES) /\\ H_NODES \\subseteq Nat /\\ H_NODES # {}"
],
"lemma_def_expands": {
"Safety": ["HConsistent"],
"Inv532_R0_0_I1": ["greaterOrEqualTS,greaterTS,equalTS"]
},
"action_def_expands":{
"HReadAction": ["h_upd_nothing", "h_upd_not_aliveNodes", "h_upd_aliveNodes"],
"HSendValsAction": ["receivedAllAcks", "VALMessage"]
}
}
}