tla-ts 0.0.1 → 0.0.3-dev.a50fc89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -42
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +215 -30
- package/dist/index.d.ts +215 -30
- package/dist/index.js +1 -1
- package/dist/parallel-worker.cjs +2 -2
- package/dist/parallel-worker.js +2 -2
- package/dist/parallel.cjs +1 -1
- package/dist/parallel.js +2 -2
- package/dist/run-cli.cjs +20 -1
- package/dist/run-cli.js +20 -1
- package/dist/transfer.cjs +388 -39
- package/dist/transfer.js +388 -39
- package/package.json +6 -2
- package/src/ast.ts +122 -5
- package/src/bags.ts +161 -71
- package/src/builtins.ts +203 -23
- package/src/bundled-modules.ts +63 -32
- package/src/check.ts +945 -238
- package/src/cli-options.ts +58 -0
- package/src/codegen.ts +52 -18
- package/src/config.ts +39 -11
- package/src/environment.ts +485 -140
- package/src/errors.ts +59 -1
- package/src/evaluate.ts +489 -137
- package/src/exit-codes.ts +75 -0
- package/src/fingerprints.ts +2 -2
- package/src/index.ts +9 -4
- package/src/instances.ts +221 -66
- package/src/java-overrides.ts +241 -0
- package/src/json.ts +153 -72
- package/src/levels.ts +850 -0
- package/src/lexer.ts +103 -28
- package/src/liveness.ts +47 -91
- package/src/obligation-action.ts +384 -0
- package/src/obligation-anon.ts +575 -0
- package/src/obligation-deref.ts +637 -0
- package/src/obligation-expression.ts +1060 -0
- package/src/obligation-format.ts +406 -0
- package/src/obligation-generate.ts +1074 -0
- package/src/obligation-levels.ts +329 -0
- package/src/obligation-module.ts +1042 -0
- package/src/obligation-printer.ts +889 -0
- package/src/obligation-proof.ts +76 -0
- package/src/obligation-source.ts +1084 -0
- package/src/obligation-tuples.ts +184 -0
- package/src/obligations.ts +316 -0
- package/src/parallel-worker.ts +57 -28
- package/src/parallel.ts +116 -62
- package/src/parser.ts +958 -205
- package/src/pretty-print.ts +259 -0
- package/src/randomization.ts +24 -113
- package/src/resolve.ts +472 -41
- package/src/run-cli.ts +427 -61
- package/src/runtime.ts +63 -28
- package/src/spec-description.ts +509 -0
- package/src/standard-levels.ts +105 -0
- package/src/standard-modules.ts +223 -92
- package/src/subexpressions.ts +21 -35
- package/src/substitution-levels.ts +184 -0
- package/src/successors.ts +261 -46
- package/src/symmetry.ts +65 -21
- package/src/tableau.ts +43 -37
- package/src/tlc-ext.ts +120 -33
- package/src/tlc-module.ts +71 -47
- package/src/tlc-modules.ts +1022 -0
- package/src/tlc-order.ts +497 -0
- package/src/tlc-random.ts +411 -0
- package/src/tlc-summary.ts +109 -0
- package/src/transfer.ts +26 -5
- package/src/values.ts +1231 -176
|
@@ -0,0 +1,1022 @@
|
|
|
1
|
+
// Data copied from tla2tools.jar (2026.10.24) that TLC's string and variable order depend on.
|
|
2
|
+
|
|
3
|
+
export const SANY_BUILTINS = [
|
|
4
|
+
"STRING",
|
|
5
|
+
"FALSE",
|
|
6
|
+
"TRUE",
|
|
7
|
+
"BOOLEAN",
|
|
8
|
+
"=",
|
|
9
|
+
"/=",
|
|
10
|
+
".",
|
|
11
|
+
"'",
|
|
12
|
+
"\\lnot",
|
|
13
|
+
"\\neg",
|
|
14
|
+
"\\land",
|
|
15
|
+
"\\lor",
|
|
16
|
+
"\\equiv",
|
|
17
|
+
"=>",
|
|
18
|
+
"SUBSET",
|
|
19
|
+
"UNION",
|
|
20
|
+
"DOMAIN",
|
|
21
|
+
"\\subseteq",
|
|
22
|
+
"\\in",
|
|
23
|
+
"\\notin",
|
|
24
|
+
"\\",
|
|
25
|
+
"\\intersect",
|
|
26
|
+
"\\union",
|
|
27
|
+
"\\times",
|
|
28
|
+
"~>",
|
|
29
|
+
"[]",
|
|
30
|
+
"<>",
|
|
31
|
+
"ENABLED",
|
|
32
|
+
"UNCHANGED",
|
|
33
|
+
"\\cdot",
|
|
34
|
+
"-+->",
|
|
35
|
+
"$AngleAct",
|
|
36
|
+
"$BoundedChoose",
|
|
37
|
+
"$BoundedExists",
|
|
38
|
+
"$BoundedForall",
|
|
39
|
+
"$CartesianProd",
|
|
40
|
+
"$Case",
|
|
41
|
+
"$ConjList",
|
|
42
|
+
"$DisjList",
|
|
43
|
+
"$Except",
|
|
44
|
+
"$FcnApply",
|
|
45
|
+
"$FcnConstructor",
|
|
46
|
+
"$IfThenElse",
|
|
47
|
+
"$NonRecursiveFcnSpec",
|
|
48
|
+
"$Pair",
|
|
49
|
+
"$RcdConstructor",
|
|
50
|
+
"$RcdSelect",
|
|
51
|
+
"$RecursiveFcnSpec",
|
|
52
|
+
"$Seq",
|
|
53
|
+
"$SetEnumerate",
|
|
54
|
+
"$SetOfAll",
|
|
55
|
+
"$SetOfFcns",
|
|
56
|
+
"$SetOfRcds",
|
|
57
|
+
"$SF",
|
|
58
|
+
"$SquareAct",
|
|
59
|
+
"$SubsetOf",
|
|
60
|
+
"$TemporalExists",
|
|
61
|
+
"$TemporalForall",
|
|
62
|
+
"$TemporalWhile",
|
|
63
|
+
"$Tuple",
|
|
64
|
+
"$UnboundedChoose",
|
|
65
|
+
"$UnboundedExists",
|
|
66
|
+
"$UnboundedForall",
|
|
67
|
+
"$WF",
|
|
68
|
+
"$Nop",
|
|
69
|
+
"$Qed",
|
|
70
|
+
"$Pfcase",
|
|
71
|
+
"$Have",
|
|
72
|
+
"$Take",
|
|
73
|
+
"$Pick",
|
|
74
|
+
"$Witness",
|
|
75
|
+
"$Suffices",
|
|
76
|
+
];
|
|
77
|
+
|
|
78
|
+
export const SANY_OPERATOR_SYNONYMS = [
|
|
79
|
+
["\\lnot", "~", "\\neg", "¬"],
|
|
80
|
+
["[]", "□"],
|
|
81
|
+
["<>", "◇"],
|
|
82
|
+
["\\land", "/\\", "∧"],
|
|
83
|
+
["\\lor", "\\/", "∨"],
|
|
84
|
+
["\\equiv", "<=>", "≡", "⇔"],
|
|
85
|
+
["/=", "#", "≠"],
|
|
86
|
+
["\\leq", "<=", "=<", "≤"],
|
|
87
|
+
["\\geq", ">=", "≥"],
|
|
88
|
+
["\\times", "\\X", "×"],
|
|
89
|
+
["\\intersect", "\\cap", "∩"],
|
|
90
|
+
["\\union", "\\cup", "∪"],
|
|
91
|
+
["\\o", "\\circ", "∘"],
|
|
92
|
+
["\\oplus", "(+)", "⊕"],
|
|
93
|
+
["\\ominus", "(-)", "⊖"],
|
|
94
|
+
["\\odot", "(.)", "⊙"],
|
|
95
|
+
["\\oslash", "(/)", "⊘"],
|
|
96
|
+
["\\otimes", "(\\X)", "⊗"],
|
|
97
|
+
["\\approx", "≈"],
|
|
98
|
+
[":=", "≔"],
|
|
99
|
+
["\\asymp", "≍"],
|
|
100
|
+
["\\bigcirc", "◯"],
|
|
101
|
+
["::=", "⩴"],
|
|
102
|
+
["\\bullet", "●"],
|
|
103
|
+
["\\cdot", "⋅"],
|
|
104
|
+
["\\cong", "≅"],
|
|
105
|
+
["\\div", "÷"],
|
|
106
|
+
["\\doteq", "≐"],
|
|
107
|
+
["..", "‥"],
|
|
108
|
+
["...", "…"],
|
|
109
|
+
["!!", "‼"],
|
|
110
|
+
["\\gg", "≫"],
|
|
111
|
+
["=>", "⇒"],
|
|
112
|
+
["\\in", "∈"],
|
|
113
|
+
["=|", "⫤"],
|
|
114
|
+
["~>", "↝"],
|
|
115
|
+
["\\ll", "≪"],
|
|
116
|
+
["-|", "⊣"],
|
|
117
|
+
["\\notin", "∉"],
|
|
118
|
+
["-+->", "⇸"],
|
|
119
|
+
["\\prec", "≺"],
|
|
120
|
+
["\\preceq", "⪯"],
|
|
121
|
+
["\\propto", "∝"],
|
|
122
|
+
["??", "⁇"],
|
|
123
|
+
["|=", "⊨"],
|
|
124
|
+
["|-", "⊢"],
|
|
125
|
+
["\\sim", "∼"],
|
|
126
|
+
["\\simeq", "≃"],
|
|
127
|
+
["\\sqcap", "⊓"],
|
|
128
|
+
["\\sqcup", "⊔"],
|
|
129
|
+
["\\sqsubset", "⊏"],
|
|
130
|
+
["\\sqsubseteq", "⊑"],
|
|
131
|
+
["\\sqsupset", "⊐"],
|
|
132
|
+
["\\sqsupseteq", "⊒"],
|
|
133
|
+
["\\star", "⋆"],
|
|
134
|
+
["\\subset", "⊂"],
|
|
135
|
+
["\\subseteq", "⊆"],
|
|
136
|
+
["\\succ", "≻"],
|
|
137
|
+
["\\succeq", "⪰"],
|
|
138
|
+
["\\supset", "⊃"],
|
|
139
|
+
["\\supseteq", "⊇"],
|
|
140
|
+
["\\uplus", "⊎"],
|
|
141
|
+
["||", "‖"],
|
|
142
|
+
["\\wr", "≀"],
|
|
143
|
+
["^+", "⁺"],
|
|
144
|
+
];
|
|
145
|
+
|
|
146
|
+
export const TLC_STARTUP_STRINGS = [
|
|
147
|
+
"STRING",
|
|
148
|
+
"FALSE",
|
|
149
|
+
"TRUE",
|
|
150
|
+
"BOOLEAN",
|
|
151
|
+
"=",
|
|
152
|
+
"/=",
|
|
153
|
+
".",
|
|
154
|
+
"'",
|
|
155
|
+
"\\lnot",
|
|
156
|
+
"\\neg",
|
|
157
|
+
"\\land",
|
|
158
|
+
"\\lor",
|
|
159
|
+
"\\equiv",
|
|
160
|
+
"=>",
|
|
161
|
+
"SUBSET",
|
|
162
|
+
"UNION",
|
|
163
|
+
"DOMAIN",
|
|
164
|
+
"\\subseteq",
|
|
165
|
+
"\\in",
|
|
166
|
+
"\\notin",
|
|
167
|
+
"\\",
|
|
168
|
+
"\\intersect",
|
|
169
|
+
"\\union",
|
|
170
|
+
"\\times",
|
|
171
|
+
"~>",
|
|
172
|
+
"[]",
|
|
173
|
+
"<>",
|
|
174
|
+
"ENABLED",
|
|
175
|
+
"UNCHANGED",
|
|
176
|
+
"\\cdot",
|
|
177
|
+
"-+->",
|
|
178
|
+
"$AngleAct",
|
|
179
|
+
"$BoundedChoose",
|
|
180
|
+
"$BoundedExists",
|
|
181
|
+
"$BoundedForall",
|
|
182
|
+
"$CartesianProd",
|
|
183
|
+
"$Case",
|
|
184
|
+
"$ConjList",
|
|
185
|
+
"$DisjList",
|
|
186
|
+
"$Except",
|
|
187
|
+
"$FcnApply",
|
|
188
|
+
"$FcnConstructor",
|
|
189
|
+
"$IfThenElse",
|
|
190
|
+
"$NonRecursiveFcnSpec",
|
|
191
|
+
"$Pair",
|
|
192
|
+
"$RcdConstructor",
|
|
193
|
+
"$RcdSelect",
|
|
194
|
+
"$RecursiveFcnSpec",
|
|
195
|
+
"$Seq",
|
|
196
|
+
"$SetEnumerate",
|
|
197
|
+
"$SetOfAll",
|
|
198
|
+
"$SetOfFcns",
|
|
199
|
+
"$SetOfRcds",
|
|
200
|
+
"$SF",
|
|
201
|
+
"$SquareAct",
|
|
202
|
+
"$SubsetOf",
|
|
203
|
+
"$TemporalExists",
|
|
204
|
+
"$TemporalForall",
|
|
205
|
+
"$TemporalWhile",
|
|
206
|
+
"$Tuple",
|
|
207
|
+
"$UnboundedChoose",
|
|
208
|
+
"$UnboundedExists",
|
|
209
|
+
"$UnboundedForall",
|
|
210
|
+
"$WF",
|
|
211
|
+
"$Nop",
|
|
212
|
+
"$Qed",
|
|
213
|
+
"$Pfcase",
|
|
214
|
+
"$Have",
|
|
215
|
+
"$Take",
|
|
216
|
+
"$Pick",
|
|
217
|
+
"$Witness",
|
|
218
|
+
"$Suffices",
|
|
219
|
+
"***I do not exist***",
|
|
220
|
+
"--TLA+ BUILTINS--",
|
|
221
|
+
"Formal_0",
|
|
222
|
+
"Formal_1",
|
|
223
|
+
"Formal_2",
|
|
224
|
+
"[",
|
|
225
|
+
"^",
|
|
226
|
+
"/",
|
|
227
|
+
"*",
|
|
228
|
+
"-",
|
|
229
|
+
"-.",
|
|
230
|
+
"+",
|
|
231
|
+
"^+",
|
|
232
|
+
"^*",
|
|
233
|
+
"^#",
|
|
234
|
+
"<",
|
|
235
|
+
"\\leq",
|
|
236
|
+
">",
|
|
237
|
+
"\\geq",
|
|
238
|
+
"...",
|
|
239
|
+
"..",
|
|
240
|
+
"|",
|
|
241
|
+
"||",
|
|
242
|
+
"&&",
|
|
243
|
+
"&",
|
|
244
|
+
"$$",
|
|
245
|
+
"$",
|
|
246
|
+
"??",
|
|
247
|
+
"%%",
|
|
248
|
+
"%",
|
|
249
|
+
"##",
|
|
250
|
+
"++",
|
|
251
|
+
"--",
|
|
252
|
+
"**",
|
|
253
|
+
"//",
|
|
254
|
+
"^^",
|
|
255
|
+
"@@",
|
|
256
|
+
"!!",
|
|
257
|
+
"|-",
|
|
258
|
+
"|=",
|
|
259
|
+
"-|",
|
|
260
|
+
"=|",
|
|
261
|
+
"<:",
|
|
262
|
+
":>",
|
|
263
|
+
":=",
|
|
264
|
+
"::=",
|
|
265
|
+
"\\oplus",
|
|
266
|
+
"\\ominus",
|
|
267
|
+
"\\odot",
|
|
268
|
+
"\\oslash",
|
|
269
|
+
"\\otimes",
|
|
270
|
+
"\\uplus",
|
|
271
|
+
"\\sqcap",
|
|
272
|
+
"\\sqcup",
|
|
273
|
+
"\\div",
|
|
274
|
+
"\\wr",
|
|
275
|
+
"\\star",
|
|
276
|
+
"\\o",
|
|
277
|
+
"\\bigcirc",
|
|
278
|
+
"\\bullet",
|
|
279
|
+
"\\prec",
|
|
280
|
+
"\\succ",
|
|
281
|
+
"\\preceq",
|
|
282
|
+
"\\succeq",
|
|
283
|
+
"\\sim",
|
|
284
|
+
"\\simeq",
|
|
285
|
+
"\\ll",
|
|
286
|
+
"\\gg",
|
|
287
|
+
"\\asymp",
|
|
288
|
+
"\\subset",
|
|
289
|
+
"\\supset",
|
|
290
|
+
"\\supseteq",
|
|
291
|
+
"\\approx",
|
|
292
|
+
"\\cong",
|
|
293
|
+
"\\sqsubset",
|
|
294
|
+
"\\sqsubseteq",
|
|
295
|
+
"\\sqsupset",
|
|
296
|
+
"\\sqsupseteq",
|
|
297
|
+
"\\doteq",
|
|
298
|
+
"\\propto",
|
|
299
|
+
"~",
|
|
300
|
+
"¬",
|
|
301
|
+
"□",
|
|
302
|
+
"◇",
|
|
303
|
+
"/\\",
|
|
304
|
+
"∧",
|
|
305
|
+
"\\/",
|
|
306
|
+
"∨",
|
|
307
|
+
"<=>",
|
|
308
|
+
"≡",
|
|
309
|
+
"⇔",
|
|
310
|
+
"#",
|
|
311
|
+
"≠",
|
|
312
|
+
"<=",
|
|
313
|
+
"=<",
|
|
314
|
+
"≤",
|
|
315
|
+
">=",
|
|
316
|
+
"≥",
|
|
317
|
+
"\\X",
|
|
318
|
+
"×",
|
|
319
|
+
"\\cap",
|
|
320
|
+
"∩",
|
|
321
|
+
"\\cup",
|
|
322
|
+
"∪",
|
|
323
|
+
"\\circ",
|
|
324
|
+
"∘",
|
|
325
|
+
"(+)",
|
|
326
|
+
"⊕",
|
|
327
|
+
"(-)",
|
|
328
|
+
"⊖",
|
|
329
|
+
"(.)",
|
|
330
|
+
"⊙",
|
|
331
|
+
"(/)",
|
|
332
|
+
"⊘",
|
|
333
|
+
"(\\X)",
|
|
334
|
+
"⊗",
|
|
335
|
+
"≈",
|
|
336
|
+
"≔",
|
|
337
|
+
"≍",
|
|
338
|
+
"◯",
|
|
339
|
+
"⩴",
|
|
340
|
+
"●",
|
|
341
|
+
"⋅",
|
|
342
|
+
"≅",
|
|
343
|
+
"÷",
|
|
344
|
+
"≐",
|
|
345
|
+
"‥",
|
|
346
|
+
"…",
|
|
347
|
+
"‼",
|
|
348
|
+
"≫",
|
|
349
|
+
"⇒",
|
|
350
|
+
"∈",
|
|
351
|
+
"⫤",
|
|
352
|
+
"↝",
|
|
353
|
+
"≪",
|
|
354
|
+
"⊣",
|
|
355
|
+
"∉",
|
|
356
|
+
"⇸",
|
|
357
|
+
"≺",
|
|
358
|
+
"⪯",
|
|
359
|
+
"∝",
|
|
360
|
+
"⁇",
|
|
361
|
+
"⊨",
|
|
362
|
+
"⊢",
|
|
363
|
+
"∼",
|
|
364
|
+
"≃",
|
|
365
|
+
"⊓",
|
|
366
|
+
"⊔",
|
|
367
|
+
"⊏",
|
|
368
|
+
"⊑",
|
|
369
|
+
"⊐",
|
|
370
|
+
"⊒",
|
|
371
|
+
"⋆",
|
|
372
|
+
"⊂",
|
|
373
|
+
"⊆",
|
|
374
|
+
"≻",
|
|
375
|
+
"⪰",
|
|
376
|
+
"⊃",
|
|
377
|
+
"⊇",
|
|
378
|
+
"⊎",
|
|
379
|
+
"‖",
|
|
380
|
+
"≀",
|
|
381
|
+
"⁺",
|
|
382
|
+
"@",
|
|
383
|
+
];
|
|
384
|
+
|
|
385
|
+
export const TLC_RUNTIME_STRINGS = [
|
|
386
|
+
"exit",
|
|
387
|
+
"pause",
|
|
388
|
+
"config",
|
|
389
|
+
"spec",
|
|
390
|
+
"coverage",
|
|
391
|
+
"action",
|
|
392
|
+
"install",
|
|
393
|
+
"id",
|
|
394
|
+
"behavior",
|
|
395
|
+
"all",
|
|
396
|
+
"mode",
|
|
397
|
+
"deadlock",
|
|
398
|
+
"seed",
|
|
399
|
+
"fingerprint",
|
|
400
|
+
"worker",
|
|
401
|
+
"traces",
|
|
402
|
+
"depth",
|
|
403
|
+
"aril",
|
|
404
|
+
"sched",
|
|
405
|
+
"revision",
|
|
406
|
+
"timestamp",
|
|
407
|
+
"date",
|
|
408
|
+
"count",
|
|
409
|
+
"tag",
|
|
410
|
+
"calver",
|
|
411
|
+
"impliedinits",
|
|
412
|
+
"impliedactions",
|
|
413
|
+
"invariants",
|
|
414
|
+
"impliedtemporals",
|
|
415
|
+
"temporals",
|
|
416
|
+
"actions",
|
|
417
|
+
"inits",
|
|
418
|
+
"variables",
|
|
419
|
+
"actionconstraints",
|
|
420
|
+
"constraints",
|
|
421
|
+
"stats",
|
|
422
|
+
"duration",
|
|
423
|
+
"generated",
|
|
424
|
+
"diameter",
|
|
425
|
+
"distinct",
|
|
426
|
+
"initial",
|
|
427
|
+
"queue",
|
|
428
|
+
"retries",
|
|
429
|
+
"distinctvalues",
|
|
430
|
+
"levelmean",
|
|
431
|
+
"levelvariance",
|
|
432
|
+
"bfs",
|
|
433
|
+
];
|
|
434
|
+
|
|
435
|
+
export const SANY_NODE_NAMES = [
|
|
436
|
+
"Not a node",
|
|
437
|
+
"N_ActDecl",
|
|
438
|
+
"N_ActionExpr",
|
|
439
|
+
"N_AssumeDecl",
|
|
440
|
+
"N_AssumeProve",
|
|
441
|
+
"N_Assumption",
|
|
442
|
+
"N_BeginModule",
|
|
443
|
+
"N_Body",
|
|
444
|
+
"N_BoundedQuant",
|
|
445
|
+
"N_Case",
|
|
446
|
+
"N_CaseArm",
|
|
447
|
+
"N_CaseStatement",
|
|
448
|
+
"N_ChooseStatement",
|
|
449
|
+
"N_ConjItem",
|
|
450
|
+
"N_ConjList",
|
|
451
|
+
"N_ConsDecl",
|
|
452
|
+
"N_DisjItem",
|
|
453
|
+
"N_DisjList",
|
|
454
|
+
"N_EndModule",
|
|
455
|
+
"N_Except",
|
|
456
|
+
"N_ExceptComponent",
|
|
457
|
+
"N_ExceptSpec",
|
|
458
|
+
"N_Times",
|
|
459
|
+
"N_Extends",
|
|
460
|
+
"N_FairnessExpr",
|
|
461
|
+
"N_FcnAppl",
|
|
462
|
+
"N_FcnConst",
|
|
463
|
+
"N_FieldSet",
|
|
464
|
+
"N_FieldVal",
|
|
465
|
+
"N_FunctionDefinition",
|
|
466
|
+
"N_FunctionParam",
|
|
467
|
+
"N_GeneralId",
|
|
468
|
+
"N_GenInfixOp",
|
|
469
|
+
"N_GenNonExpPrefixOp",
|
|
470
|
+
"N_GenPostfixOp",
|
|
471
|
+
"N_GenPrefixOp",
|
|
472
|
+
"N_IdentDecl",
|
|
473
|
+
"N_Real",
|
|
474
|
+
"N_IdentifierTuple",
|
|
475
|
+
"N_IdentLHS",
|
|
476
|
+
"N_IdPrefix",
|
|
477
|
+
"N_IdPrefixElement",
|
|
478
|
+
"N_IfThenElse",
|
|
479
|
+
"N_InfixDecl",
|
|
480
|
+
"N_InfixExpr",
|
|
481
|
+
"N_InfixLHS",
|
|
482
|
+
"N_InfixOp",
|
|
483
|
+
"N_InnerProof",
|
|
484
|
+
"N_Instance",
|
|
485
|
+
"N_NonLocalInstance",
|
|
486
|
+
"N_Integer",
|
|
487
|
+
"N_LeafProof",
|
|
488
|
+
"N_LetDefinitions",
|
|
489
|
+
"N_LetIn",
|
|
490
|
+
"N_MaybeBound",
|
|
491
|
+
"N_Module",
|
|
492
|
+
"N_ModuleDefinition",
|
|
493
|
+
"N_NonExpPrefixOp",
|
|
494
|
+
"N_Number",
|
|
495
|
+
"N_NumberedAssumeProve",
|
|
496
|
+
"N_OpApplication",
|
|
497
|
+
"N_OpArgs",
|
|
498
|
+
"N_OperatorDefinition",
|
|
499
|
+
"N_OtherArm",
|
|
500
|
+
"N_ParamDecl",
|
|
501
|
+
"N_ParamDeclaration",
|
|
502
|
+
"N_ParenExpr",
|
|
503
|
+
"N_PostfixDecl",
|
|
504
|
+
"N_PostfixExpr",
|
|
505
|
+
"N_PostfixLHS",
|
|
506
|
+
"N_PostfixOp",
|
|
507
|
+
"N_PrefixDecl",
|
|
508
|
+
"N_PrefixExpr",
|
|
509
|
+
"N_PrefixLHS",
|
|
510
|
+
"N_PrefixOp",
|
|
511
|
+
"N_Proof",
|
|
512
|
+
"N_ProofLet",
|
|
513
|
+
"N_ProofName",
|
|
514
|
+
"N_ProofStatement",
|
|
515
|
+
"N_ProofStep",
|
|
516
|
+
"N_QEDStep",
|
|
517
|
+
"N_QuantBound",
|
|
518
|
+
"N_RcdConstructor",
|
|
519
|
+
"N_RecordComponent",
|
|
520
|
+
"N_SetEnumerate",
|
|
521
|
+
"N_SetOfAll",
|
|
522
|
+
"N_SetOfFcns",
|
|
523
|
+
"N_SetOfRcds",
|
|
524
|
+
"N_String",
|
|
525
|
+
"N_SubsetOf",
|
|
526
|
+
"N_Substitution",
|
|
527
|
+
"N_TempDecl",
|
|
528
|
+
"N_Theorem",
|
|
529
|
+
"N_Tuple",
|
|
530
|
+
"N_UnBoundedOrBoundedChoose",
|
|
531
|
+
"N_UnboundedQuant",
|
|
532
|
+
"N_VariableDeclaration",
|
|
533
|
+
"Token =",
|
|
534
|
+
"Token \\in",
|
|
535
|
+
"N_NewSymb",
|
|
536
|
+
"N_Lambda",
|
|
537
|
+
"N_Recursive",
|
|
538
|
+
"N_Label",
|
|
539
|
+
"N_StructOp",
|
|
540
|
+
"N_NumerableStep",
|
|
541
|
+
"N_TerminalProof",
|
|
542
|
+
"N_UseOrHide",
|
|
543
|
+
"N_NonExprBody",
|
|
544
|
+
"N_DefStep",
|
|
545
|
+
"N_HaveStep",
|
|
546
|
+
"N_TakeStep",
|
|
547
|
+
"N_WitnessStep",
|
|
548
|
+
"N_PickStep",
|
|
549
|
+
"N_CaseStep",
|
|
550
|
+
"N_AssertStep",
|
|
551
|
+
];
|
|
552
|
+
|
|
553
|
+
export const TLC_MODULE_SOURCES = new Map([
|
|
554
|
+
[
|
|
555
|
+
"Naturals",
|
|
556
|
+
`-------------------------------- MODULE Naturals ----------------------------
|
|
557
|
+
Nat == { }
|
|
558
|
+
a+b == {a, b}
|
|
559
|
+
a-b == CHOOSE n : b + n = a
|
|
560
|
+
a*b == TRUE
|
|
561
|
+
a^b == {a, b}
|
|
562
|
+
a<b == a = b
|
|
563
|
+
a>b == a = b
|
|
564
|
+
a \\leq b == a = b
|
|
565
|
+
a \\geq b == a = b
|
|
566
|
+
a % b == {a, b}
|
|
567
|
+
a \\div b == {a, b}
|
|
568
|
+
a .. b == {a, b}
|
|
569
|
+
=============================================================================
|
|
570
|
+
`,
|
|
571
|
+
],
|
|
572
|
+
[
|
|
573
|
+
"Integers",
|
|
574
|
+
`-------------------------------- MODULE Integers ----------------------------
|
|
575
|
+
EXTENDS Naturals
|
|
576
|
+
Int == { }
|
|
577
|
+
-. a == 0 - a
|
|
578
|
+
=============================================================================
|
|
579
|
+
`,
|
|
580
|
+
],
|
|
581
|
+
[
|
|
582
|
+
"Sequences",
|
|
583
|
+
`------------------------------ MODULE Sequences -----------------------------
|
|
584
|
+
LOCAL INSTANCE Naturals
|
|
585
|
+
Seq(S) == UNION {[1..n -> S] : n \\in Nat}
|
|
586
|
+
Len(s) == CHOOSE n \\in Nat : DOMAIN s = 1..n
|
|
587
|
+
s \\o t == [i \\in 1..(Len(s) + Len(t)) |-> IF i \\leq Len(s) THEN s[i]
|
|
588
|
+
ELSE t[i-Len(s)]]
|
|
589
|
+
Append(s, e) == s \\o <<e>>
|
|
590
|
+
Head(s) == s[1]
|
|
591
|
+
Tail(s) == CASE s # << >> -> [i \\in 1..(Len(s)-1) |-> s[i+1]]
|
|
592
|
+
SubSeq(s, m, n) == [i \\in 1..(1+n-m) |-> s[i+m-1]]
|
|
593
|
+
SelectSeq(s, Test(_)) ==
|
|
594
|
+
LET F[i \\in 0..Len(s)] ==
|
|
595
|
+
IF i = 0 THEN << >>
|
|
596
|
+
ELSE IF Test(s[i]) THEN Append(F[i-1], s[i])
|
|
597
|
+
ELSE F[i-1]
|
|
598
|
+
IN F[Len(s)]
|
|
599
|
+
=============================================================================
|
|
600
|
+
`,
|
|
601
|
+
],
|
|
602
|
+
[
|
|
603
|
+
"FiniteSets",
|
|
604
|
+
`---------------------------- MODULE FiniteSets -----------------------------
|
|
605
|
+
LOCAL INSTANCE Naturals
|
|
606
|
+
LOCAL INSTANCE Sequences
|
|
607
|
+
IsFiniteSet(S) ==
|
|
608
|
+
\\E seq \\in Seq(S) : \\A s \\in S : \\E n \\in 1..Len(seq) : seq[n] = s
|
|
609
|
+
Cardinality(S) ==
|
|
610
|
+
LET CS[T \\in SUBSET S] == IF T = {} THEN 0
|
|
611
|
+
ELSE 1 + CS[T \\ {CHOOSE x : x \\in T}]
|
|
612
|
+
IN CS[S]
|
|
613
|
+
=============================================================================
|
|
614
|
+
`,
|
|
615
|
+
],
|
|
616
|
+
[
|
|
617
|
+
"TLC",
|
|
618
|
+
`------------------------------- MODULE TLC ----------------------------------
|
|
619
|
+
LOCAL INSTANCE Naturals
|
|
620
|
+
LOCAL INSTANCE Sequences
|
|
621
|
+
LOCAL INSTANCE FiniteSets
|
|
622
|
+
-----------------------------------------------------------------------------
|
|
623
|
+
Print(out, val) == val
|
|
624
|
+
PrintT(out) == TRUE
|
|
625
|
+
Assert(val, out) == IF val = TRUE THEN TRUE
|
|
626
|
+
ELSE CHOOSE v : TRUE
|
|
627
|
+
JavaTime == CHOOSE n : n \\in Nat
|
|
628
|
+
TLCGet(i) == CHOOSE n : TRUE
|
|
629
|
+
TLCSet(i, v) == TRUE
|
|
630
|
+
-----------------------------------------------------------------------------
|
|
631
|
+
d :> e == [x \\in {d} |-> e]
|
|
632
|
+
f @@ g == [x \\in (DOMAIN f) \\cup (DOMAIN g) |->
|
|
633
|
+
IF x \\in DOMAIN f THEN f[x] ELSE g[x]]
|
|
634
|
+
Permutations(S) ==
|
|
635
|
+
{f \\in [S -> S] : \\A w \\in S : \\E v \\in S : f[v]=w}
|
|
636
|
+
-----------------------------------------------------------------------------
|
|
637
|
+
SortSeq(s, Op(_, _)) ==
|
|
638
|
+
LET Perm == CHOOSE p \\in Permutations(1 .. Len(s)) :
|
|
639
|
+
\\A i, j \\in 1..Len(s) :
|
|
640
|
+
(i < j) => Op(s[p[i]], s[p[j]]) \\/ (s[p[i]] = s[p[j]])
|
|
641
|
+
IN [i \\in 1..Len(s) |-> s[Perm[i]]]
|
|
642
|
+
RandomElement(s) == CHOOSE x \\in s : TRUE
|
|
643
|
+
Any == CHOOSE x : TRUE
|
|
644
|
+
ToString(v) == (CHOOSE x \\in [a : v, b : STRING] : TRUE).b
|
|
645
|
+
TLCEval(v) == v
|
|
646
|
+
=============================================================================
|
|
647
|
+
`,
|
|
648
|
+
],
|
|
649
|
+
[
|
|
650
|
+
"TLCExt",
|
|
651
|
+
`------------------------------- MODULE TLCExt -------------------------------
|
|
652
|
+
LOCAL INSTANCE TLC
|
|
653
|
+
LOCAL INSTANCE Integers
|
|
654
|
+
-----------------------------------------------------------------------------
|
|
655
|
+
AssertEq(a, b) ==
|
|
656
|
+
IF a # b THEN
|
|
657
|
+
/\\ PrintT("Assertion failed")
|
|
658
|
+
/\\ PrintT(a)
|
|
659
|
+
/\\ PrintT(b)
|
|
660
|
+
/\\ a = b
|
|
661
|
+
ELSE a = b
|
|
662
|
+
AssertError(err, exp) ==
|
|
663
|
+
LET FailsEval(e) == CHOOSE b \\in BOOLEAN : TRUE
|
|
664
|
+
TLCError == CHOOSE s \\in STRING : TRUE
|
|
665
|
+
IN IF FailsEval(exp) THEN Assert(err = TLCError, TLCError) ELSE TRUE
|
|
666
|
+
-----------------------------------------------------------------------------
|
|
667
|
+
TLCGetOrDefault(key, defaultVal) ==
|
|
668
|
+
CHOOSE n : TRUE
|
|
669
|
+
TLCGetAndSet(key, Op(_,_), val, defaultVal) ==
|
|
670
|
+
LET oldVal == TLCGetOrDefault(key, defaultVal)
|
|
671
|
+
IN CHOOSE v \\in {oldVal} : TLCSet(key, Op(oldVal, val))
|
|
672
|
+
-----------------------------------------------------------------------------
|
|
673
|
+
Trace ==
|
|
674
|
+
TRUE
|
|
675
|
+
-----------------------------------------------------------------------------
|
|
676
|
+
CounterExample ==
|
|
677
|
+
TRUE
|
|
678
|
+
ToTrace(CE) ==
|
|
679
|
+
TRUE
|
|
680
|
+
-----------------------------------------------------------------------------
|
|
681
|
+
TLCModelValue(str) ==
|
|
682
|
+
CHOOSE v: ToString(v) = str
|
|
683
|
+
TLCDefer(expression) ==
|
|
684
|
+
TRUE
|
|
685
|
+
-----------------------------------------------------------------------------
|
|
686
|
+
TLCNoOp(val) ==
|
|
687
|
+
val
|
|
688
|
+
PickSuccessor(exp) ==
|
|
689
|
+
IF (exp)
|
|
690
|
+
THEN TRUE
|
|
691
|
+
ELSE CHOOSE bool \\in BOOLEAN : TRUE
|
|
692
|
+
-----------------------------------------------------------------------------
|
|
693
|
+
TLCCache(expression, closure) ==
|
|
694
|
+
expression
|
|
695
|
+
TLCFP(var) ==
|
|
696
|
+
CHOOSE i \\in Int: TRUE
|
|
697
|
+
-----------------------------------------------------------------------------
|
|
698
|
+
TLCEvalDefinition(definitionName) ==
|
|
699
|
+
TRUE
|
|
700
|
+
============================================================================
|
|
701
|
+
`,
|
|
702
|
+
],
|
|
703
|
+
[
|
|
704
|
+
"Bags",
|
|
705
|
+
`----------------------------- MODULE Bags --------------------------------
|
|
706
|
+
LOCAL INSTANCE Naturals
|
|
707
|
+
IsABag(B) ==
|
|
708
|
+
B \\in [DOMAIN B -> {n \\in Nat : n > 0}]
|
|
709
|
+
BagToSet(B) == DOMAIN B
|
|
710
|
+
SetToBag(S) == [e \\in S |-> 1]
|
|
711
|
+
BagIn(e,B) == e \\in BagToSet(B)
|
|
712
|
+
EmptyBag == SetToBag({})
|
|
713
|
+
B1 (+) B2 ==
|
|
714
|
+
[e \\in (DOMAIN B1) \\cup (DOMAIN B2) |->
|
|
715
|
+
(IF e \\in DOMAIN B1 THEN B1[e] ELSE 0)
|
|
716
|
+
+ (IF e \\in DOMAIN B2 THEN B2[e] ELSE 0) ]
|
|
717
|
+
B1 (-) B2 ==
|
|
718
|
+
LET B == [e \\in DOMAIN B1 |-> IF e \\in DOMAIN B2 THEN B1[e] - B2[e]
|
|
719
|
+
ELSE B1[e]]
|
|
720
|
+
IN [e \\in {d \\in DOMAIN B : B[d] > 0} |-> B[e]]
|
|
721
|
+
LOCAL Sum(f) ==
|
|
722
|
+
LET DSum[S \\in SUBSET DOMAIN f] ==
|
|
723
|
+
LET elt == CHOOSE e \\in S : TRUE
|
|
724
|
+
IN IF S = {} THEN 0
|
|
725
|
+
ELSE f[elt] + DSum[S \\ {elt}]
|
|
726
|
+
IN DSum[DOMAIN f]
|
|
727
|
+
BagUnion(S) ==
|
|
728
|
+
[e \\in UNION {BagToSet(B) : B \\in S} |->
|
|
729
|
+
Sum( [B \\in S |-> IF BagIn(e, B) THEN B[e] ELSE 0] ) ]
|
|
730
|
+
B1 \\sqsubseteq B2 ==
|
|
731
|
+
/\\ (DOMAIN B1) \\subseteq (DOMAIN B2)
|
|
732
|
+
/\\ \\A e \\in DOMAIN B1 : B1[e] \\leq B2[e]
|
|
733
|
+
SubBag(B) ==
|
|
734
|
+
LET RemoveFromDom(x, f) == [y \\in (DOMAIN f) \\ {x} |-> f[y]]
|
|
735
|
+
Combine(x, BagSet) ==
|
|
736
|
+
BagSet \\cup
|
|
737
|
+
{[y \\in (DOMAIN f) \\cup {x} |-> IF y = x THEN i ELSE f[y]] :
|
|
738
|
+
f \\in BagSet, i \\in 1..B[x]}
|
|
739
|
+
Biggest == LET Range == {B[x] : x \\in DOMAIN B}
|
|
740
|
+
IN IF Range = {} THEN 0
|
|
741
|
+
ELSE CHOOSE r \\in Range :
|
|
742
|
+
\\A s \\in Range : r \\geq s
|
|
743
|
+
RSB[BB \\in UNION {[S -> 1..Biggest] : S \\in SUBSET DOMAIN B}] ==
|
|
744
|
+
IF BB = << >> THEN {<< >>}
|
|
745
|
+
ELSE LET x == CHOOSE x \\in DOMAIN BB : TRUE
|
|
746
|
+
IN Combine(x, RSB[RemoveFromDom(x, BB)])
|
|
747
|
+
IN RSB[B]
|
|
748
|
+
BagOfAll(F(_), B) ==
|
|
749
|
+
[e \\in {F(d) : d \\in BagToSet(B)} |->
|
|
750
|
+
Sum( [d \\in BagToSet(B) |-> IF F(d) = e THEN B[d] ELSE 0] ) ]
|
|
751
|
+
BagCardinality(B) ==
|
|
752
|
+
Sum(B)
|
|
753
|
+
CopiesIn(e, B) ==
|
|
754
|
+
IF BagIn(e, B) THEN B[e] ELSE 0
|
|
755
|
+
=============================================================================
|
|
756
|
+
6 Apr 99 : Modified version for standard module set
|
|
757
|
+
7 Dec 98 : Corrected error found by Stephan Merz.
|
|
758
|
+
6 Dec 98 : Modified comments based on suggestions by Lyle Ramshaw.
|
|
759
|
+
5 Dec 98 : Initial version.
|
|
760
|
+
`,
|
|
761
|
+
],
|
|
762
|
+
[
|
|
763
|
+
"Json",
|
|
764
|
+
`-------------------------------- MODULE Json --------------------------------
|
|
765
|
+
LOCAL INSTANCE Sequences
|
|
766
|
+
LOCAL INSTANCE FiniteSets
|
|
767
|
+
LOCAL INSTANCE TLC
|
|
768
|
+
-----------------------------------------------------------------------------
|
|
769
|
+
LOCAL IsSequence(F, D) == TRUE \\/ FALSE
|
|
770
|
+
LOCAL ToJsonKeyValue(F, d) ==
|
|
771
|
+
ToString(ToString(d)) \\o ":" \\o ToString(F[d])
|
|
772
|
+
RECURSIVE ToJsonObjectString(_,_)
|
|
773
|
+
LOCAL ToJsonObjectString(F, D) ==
|
|
774
|
+
LET d == CHOOSE d \\in D: TRUE
|
|
775
|
+
IN IF D = DOMAIN F
|
|
776
|
+
THEN "{" \\o ToJsonKeyValue(F, d) \\o IF D \\ {d} = {}
|
|
777
|
+
THEN "}"
|
|
778
|
+
ELSE ToJsonObjectString(F, D \\ {d})
|
|
779
|
+
ELSE ", " \\o ToJsonKeyValue(F, d) \\o IF D \\ {d} = {}
|
|
780
|
+
THEN "}"
|
|
781
|
+
ELSE ToJsonObjectString(F, D \\ {d})
|
|
782
|
+
RECURSIVE ToJsonArrayString(_,_)
|
|
783
|
+
LOCAL ToJsonArrayString(F, D) ==
|
|
784
|
+
LET d == CHOOSE d \\in D: TRUE
|
|
785
|
+
IN IF D = DOMAIN F
|
|
786
|
+
THEN "[" \\o ToString(F[d]) \\o IF D \\ {d} = {}
|
|
787
|
+
THEN "]"
|
|
788
|
+
ELSE ToJsonArrayString(F, D \\ {d})
|
|
789
|
+
ELSE ", " \\o ToString(F[d]) \\o IF D \\ {d} = {}
|
|
790
|
+
THEN "]"
|
|
791
|
+
ELSE ToJsonArrayString(F, D \\ {d})
|
|
792
|
+
RECURSIVE ToJsonString(_,_)
|
|
793
|
+
LOCAL ToJsonString(F, D) ==
|
|
794
|
+
IF IsFiniteSet(F) \\/ IsSequence(F, D) THEN
|
|
795
|
+
ToJsonArrayString(F, D)
|
|
796
|
+
ELSE
|
|
797
|
+
ToJsonObjectString(F, D)
|
|
798
|
+
ToJson(value) ==
|
|
799
|
+
IF DOMAIN value = {} THEN
|
|
800
|
+
"{}"
|
|
801
|
+
ELSE
|
|
802
|
+
ToJsonString(value, DOMAIN value)
|
|
803
|
+
ToJsonArray(value) ==
|
|
804
|
+
IF DOMAIN value = {} THEN
|
|
805
|
+
"[]"
|
|
806
|
+
ELSE
|
|
807
|
+
ToJsonArrayString(value, DOMAIN value)
|
|
808
|
+
ToJsonObject(value) ==
|
|
809
|
+
IF DOMAIN value = {} THEN
|
|
810
|
+
"{}"
|
|
811
|
+
ELSE
|
|
812
|
+
ToJsonObjectString(value, DOMAIN value)
|
|
813
|
+
JsonSerialize(absoluteFilename, value) ==
|
|
814
|
+
TRUE
|
|
815
|
+
JsonDeserialize(absoluteFilename) ==
|
|
816
|
+
CHOOSE val : TRUE
|
|
817
|
+
ndJsonSerialize(absoluteFilename, value) ==
|
|
818
|
+
TRUE
|
|
819
|
+
ndJsonDeserialize(absoluteFilename) ==
|
|
820
|
+
CHOOSE val : TRUE
|
|
821
|
+
=============================================================================
|
|
822
|
+
`,
|
|
823
|
+
],
|
|
824
|
+
[
|
|
825
|
+
"Randomization",
|
|
826
|
+
`-------------------------- MODULE Randomization------------------------------
|
|
827
|
+
LOCAL INSTANCE Naturals
|
|
828
|
+
LOCAL INSTANCE FiniteSets
|
|
829
|
+
RandomSubset(k, S) == CHOOSE T \\in SUBSET S : Cardinality(T) = k
|
|
830
|
+
RandomSetOfSubsets(k, n, S) == CHOOSE T \\in SUBSET SUBSET S :
|
|
831
|
+
Cardinality(T) \\leq k
|
|
832
|
+
TestRandomSetOfSubsets(k, n, S) ==
|
|
833
|
+
[i \\in 1..5 |-> Cardinality(RandomSetOfSubsets(k, n, S))]
|
|
834
|
+
=============================================================================
|
|
835
|
+
`,
|
|
836
|
+
],
|
|
837
|
+
[
|
|
838
|
+
"Reals",
|
|
839
|
+
`-------------------------------- MODULE Reals -------------------------------
|
|
840
|
+
EXTENDS Integers
|
|
841
|
+
Real == "Reals"
|
|
842
|
+
a / b == CHOOSE m \\in Real : m * b = a
|
|
843
|
+
Infinity == CHOOSE i : (i \\notin Real) /\\ (\\A r \\in Real : i > r)
|
|
844
|
+
=============================================================================
|
|
845
|
+
`,
|
|
846
|
+
],
|
|
847
|
+
[
|
|
848
|
+
"RealTime",
|
|
849
|
+
`----------------------------- MODULE RealTime -------------------------------
|
|
850
|
+
EXTENDS Reals
|
|
851
|
+
VARIABLE now
|
|
852
|
+
RTBound(A, v, D, E) ==
|
|
853
|
+
LET TNext(t) == t' = IF <<A>>_v \\/ ~(ENABLED <<A>>_v)'
|
|
854
|
+
THEN 0
|
|
855
|
+
ELSE t + (now'-now)
|
|
856
|
+
Timer(t) == (t=0) /\\ [][TNext(t)]_<<t, v, now>>
|
|
857
|
+
MaxTime(t) == [](t \\leq E)
|
|
858
|
+
MinTime(t) == [][A => t \\geq D]_v
|
|
859
|
+
IN \\EE t : Timer(t) /\\ MaxTime(t) /\\ MinTime(t)
|
|
860
|
+
-----------------------------------------------------------------------------
|
|
861
|
+
RTnow(v) == LET NowNext == /\\ now' \\in {r \\in Real : r > now}
|
|
862
|
+
/\\ UNCHANGED v
|
|
863
|
+
IN /\\ now \\in Real
|
|
864
|
+
/\\ [][NowNext]_now
|
|
865
|
+
/\\ \\A r \\in Real : WF_now(NowNext /\\ (now'>r))
|
|
866
|
+
=============================================================================
|
|
867
|
+
`,
|
|
868
|
+
],
|
|
869
|
+
[
|
|
870
|
+
"Toolbox",
|
|
871
|
+
`----------------------------- MODULE Toolbox --------------------------------
|
|
872
|
+
LOCAL INSTANCE Naturals
|
|
873
|
+
LOCAL INSTANCE FiniteSets
|
|
874
|
+
LOCAL INSTANCE TLC
|
|
875
|
+
-----------------------------------------------------------------------------
|
|
876
|
+
_TETrace ==
|
|
877
|
+
CHOOSE f \\in [ (Nat \\ {0}) -> STRING ] : TRUE
|
|
878
|
+
LOCAL _TETraceLength == Cardinality(DOMAIN _TETrace)
|
|
879
|
+
_TEPosition ==
|
|
880
|
+
IF TLCGet("level") >= _TETraceLength
|
|
881
|
+
THEN _TETraceLength
|
|
882
|
+
ELSE IF TLCGet("level") = 0 THEN 1 ELSE TLCGet("level")
|
|
883
|
+
=============================================================================
|
|
884
|
+
`,
|
|
885
|
+
],
|
|
886
|
+
[
|
|
887
|
+
"_Possible",
|
|
888
|
+
`------------------------------ MODULE _Possible ------------------------------
|
|
889
|
+
LOCAL INSTANCE TLC
|
|
890
|
+
LOCAL INSTANCE TLCExt
|
|
891
|
+
LOCAL INSTANCE Naturals
|
|
892
|
+
LOCAL INSTANCE Sequences
|
|
893
|
+
LOCAL _Update(Op(_,_), val) ==
|
|
894
|
+
TLCSet("s:_possible", Op(TLCGetOrDefault("s:_possible", <<>>), val))
|
|
895
|
+
_Track(expr, name) ==
|
|
896
|
+
_Update(LAMBDA old, b:
|
|
897
|
+
IF b
|
|
898
|
+
THEN
|
|
899
|
+
IF name \\in DOMAIN old
|
|
900
|
+
THEN [old EXCEPT ![name] = @ + 1]
|
|
901
|
+
ELSE old @@ (name :> 1)
|
|
902
|
+
ELSE old @@ (name :> 0), expr)
|
|
903
|
+
LOCAL _Merge(a, b) ==
|
|
904
|
+
[name \\in (DOMAIN a) \\cup (DOMAIN b) |->
|
|
905
|
+
(IF name \\in DOMAIN a THEN a[name] ELSE 0) +
|
|
906
|
+
(IF name \\in DOMAIN b THEN b[name] ELSE 0)]
|
|
907
|
+
_Counts ==
|
|
908
|
+
LET workers == TLCGet("all:named")["s:_possible"]
|
|
909
|
+
n == Len(workers)
|
|
910
|
+
Fold[i \\in 0..n] ==
|
|
911
|
+
IF i = 0 THEN <<>>
|
|
912
|
+
ELSE _Merge(Fold[i-1], workers[i])
|
|
913
|
+
IN Fold[n]
|
|
914
|
+
_CheckName(name) ==
|
|
915
|
+
LET counts == _Counts
|
|
916
|
+
IN (name \\notin DOMAIN counts \\/ counts[name] = 0)
|
|
917
|
+
=> (PrintT(counts) /\\ FALSE)
|
|
918
|
+
_PrintCounts == PrintT(_Counts)
|
|
919
|
+
=============================================================================
|
|
920
|
+
`,
|
|
921
|
+
],
|
|
922
|
+
]);
|
|
923
|
+
|
|
924
|
+
// The Java methods that override standard module operators, as java.lang.reflect.Method prints
|
|
925
|
+
// them in TLC's errors.
|
|
926
|
+
export const TLC_JAVA_METHODS = new Map([
|
|
927
|
+
[
|
|
928
|
+
"FiniteSets",
|
|
929
|
+
new Map([
|
|
930
|
+
[
|
|
931
|
+
"IsFiniteSet",
|
|
932
|
+
"public static tlc2.value.IBoolValue tlc2.module.FiniteSets.IsFiniteSet(tlc2.value.impl.Value)",
|
|
933
|
+
],
|
|
934
|
+
[
|
|
935
|
+
"Cardinality",
|
|
936
|
+
"public static tlc2.value.impl.IntValue tlc2.module.FiniteSets.Cardinality(tlc2.value.impl.Value)",
|
|
937
|
+
],
|
|
938
|
+
]),
|
|
939
|
+
],
|
|
940
|
+
[
|
|
941
|
+
"Sequences",
|
|
942
|
+
new Map([
|
|
943
|
+
[
|
|
944
|
+
"Seq",
|
|
945
|
+
"public static tlc2.value.impl.Value tlc2.module.Sequences.Seq(tlc2.value.impl.Value)",
|
|
946
|
+
],
|
|
947
|
+
[
|
|
948
|
+
"Len",
|
|
949
|
+
"public static tlc2.value.impl.IntValue tlc2.module.Sequences.Len(tlc2.value.impl.Value)",
|
|
950
|
+
],
|
|
951
|
+
[
|
|
952
|
+
"Head",
|
|
953
|
+
"public static tlc2.value.impl.Value tlc2.module.Sequences.Head(tlc2.value.impl.Value)",
|
|
954
|
+
],
|
|
955
|
+
[
|
|
956
|
+
"Tail",
|
|
957
|
+
"public static tlc2.value.impl.Value tlc2.module.Sequences.Tail(tlc2.value.impl.Value)",
|
|
958
|
+
],
|
|
959
|
+
[
|
|
960
|
+
"Append",
|
|
961
|
+
"public static tlc2.value.impl.Value tlc2.module.Sequences.Append(tlc2.value.impl.Value,tlc2.value.impl.Value)",
|
|
962
|
+
],
|
|
963
|
+
[
|
|
964
|
+
"\\o",
|
|
965
|
+
"public static tlc2.value.impl.Value tlc2.module.Sequences.Concat(tlc2.value.impl.Value,tlc2.value.impl.Value)",
|
|
966
|
+
],
|
|
967
|
+
[
|
|
968
|
+
"SubSeq",
|
|
969
|
+
"public static tlc2.value.impl.Value tlc2.module.Sequences.SubSeq(tlc2.value.impl.Value,tlc2.value.impl.Value,tlc2.value.impl.Value)",
|
|
970
|
+
],
|
|
971
|
+
[
|
|
972
|
+
"SelectSeq",
|
|
973
|
+
"public static tlc2.value.impl.Value tlc2.module.Sequences.SelectSeq(tlc2.value.impl.Value,tlc2.value.impl.Value)",
|
|
974
|
+
],
|
|
975
|
+
]),
|
|
976
|
+
],
|
|
977
|
+
[
|
|
978
|
+
"TLC",
|
|
979
|
+
new Map([
|
|
980
|
+
[
|
|
981
|
+
"Print",
|
|
982
|
+
"public static tlc2.value.impl.Value tlc2.module.TLC.Print(tlc2.value.impl.Value,tlc2.value.impl.Value)",
|
|
983
|
+
],
|
|
984
|
+
[
|
|
985
|
+
"PrintT",
|
|
986
|
+
"public static tlc2.value.impl.Value tlc2.module.TLC.PrintT(tlc2.value.impl.Value)",
|
|
987
|
+
],
|
|
988
|
+
[
|
|
989
|
+
"ToString",
|
|
990
|
+
"public static tlc2.value.impl.Value tlc2.module.TLC.ToString(tlc2.value.impl.Value)",
|
|
991
|
+
],
|
|
992
|
+
[
|
|
993
|
+
"Assert",
|
|
994
|
+
"public static tlc2.value.impl.Value tlc2.module.TLC.Assert(tlc2.value.impl.Value,tlc2.value.impl.Value)",
|
|
995
|
+
],
|
|
996
|
+
[
|
|
997
|
+
":>",
|
|
998
|
+
"public static tlc2.value.impl.Value tlc2.module.TLC.MakeFcn(tlc2.value.impl.Value,tlc2.value.impl.Value)",
|
|
999
|
+
],
|
|
1000
|
+
[
|
|
1001
|
+
"@@",
|
|
1002
|
+
"public static tlc2.value.impl.Value tlc2.module.TLC.CombineFcn(tlc2.value.impl.Value,tlc2.value.impl.Value)",
|
|
1003
|
+
],
|
|
1004
|
+
[
|
|
1005
|
+
"SortSeq",
|
|
1006
|
+
"public static tlc2.value.impl.Value tlc2.module.TLC.SortSeq(tlc2.value.impl.Value,tlc2.value.impl.Value)",
|
|
1007
|
+
],
|
|
1008
|
+
[
|
|
1009
|
+
"Permutations",
|
|
1010
|
+
"public static tlc2.value.impl.Value tlc2.module.TLC.Permutations(tlc2.value.impl.Value)",
|
|
1011
|
+
],
|
|
1012
|
+
[
|
|
1013
|
+
"RandomElement",
|
|
1014
|
+
"public static tlc2.value.impl.Value tlc2.module.TLC.RandomElement(tlc2.value.impl.Value)",
|
|
1015
|
+
],
|
|
1016
|
+
[
|
|
1017
|
+
"TLCEval",
|
|
1018
|
+
"public static tlc2.value.impl.Value tlc2.module.TLCEval.tlcEval(tlc2.tool.impl.Tool,tla2sany.semantic.ExprOrOpArgNode[],tlc2.util.Context,tlc2.tool.TLCState,tlc2.tool.TLCState,int,tlc2.tool.coverage.CostModel)",
|
|
1019
|
+
],
|
|
1020
|
+
]),
|
|
1021
|
+
],
|
|
1022
|
+
]);
|