JSON output for translated tla.
{
"status": "error",
"result": {
"Nom": "Parsing Failure: Error { input: \"(((0\\n :> [creator |-> \\\"vt2\\\",\\n promiseId |-> 0,\\n type |-> \\\"vat\\\",\\n watchers |-> {}]\\n @@ 1\\n :> [creator |-> \\\"None\\\",\\n promiseId |-> 0,\\n type |-> \\\"blank\\\",\\n watchers |-> {}])\\n @@ 2\\n :> [creator |-> \\\"None\\\",\\n promiseId |-> 0,\\n type |-> \\\"blank\\\",\\n watchers |-> {}])\\n @@ 3\\n :> [creator |-> \\\"vt1\\\",\\n promiseId |-> 0,\\n type |-> \\\"vat\\\",\\n watchers |-> { \\\"vt0\\\", \\\"vt1\\\" }])\\n @@ 4\\n :> [creator |-> \\\"None\\\",\\n promiseId |-> 0,\\n type |-> \\\"blank\\\",\\n watchers |-> {}])\\n @@ 5\\n :> [creator |-> \\\"None\\\",\\n promiseId |-> 0,\\n type |-> \\\"blank\\\",\\n watchers |-> {}]\\n /\\\\ cnt_promise = 0\\n /\\\\ curr = \\\"vt0\\\"\\n /\\\\ step = \\\"init\\\"\\n\\n(* Transition 3 to State1 *)\\n\", code: Satisfy }"
}
}
---------------------------- MODULE counterexample ----------------------------
EXTENDS MC_userspace
(* Constant initialization state *)
ConstInit == TRUE
(* Initial state *)
State0 ==
bank
= ((((0
:> [creator |-> "vt2",
promiseId |-> 0,
type |-> "vat",
watchers |-> {}]
@@ 1
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}])
@@ 2
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}])
@@ 3
:> [creator |-> "vt1",
promiseId |-> 0,
type |-> "vat",
watchers |-> { "vt0", "vt1" }])
@@ 4
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}])
@@ 5
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}]
/\ cnt_promise = 0
/\ curr = "vt0"
/\ step = "init"
(* Transition 3 to State1 *)
State1 ==
bank
= ((((0
:> [creator |-> "vt2",
promiseId |-> 0,
type |-> "vat",
watchers |-> {}]
@@ 3
:> [creator |-> "vt1",
promiseId |-> 0,
type |-> "vat",
watchers |-> { "vt0", "vt1" }])
@@ 5
:> [creator |-> "vt0",
promiseId |-> 1,
type |-> "promise",
watchers |-> {"vt0"}])
@@ 1
:> [creator |-> "vt0",
promiseId |-> 1,
type |-> "resolver",
watchers |-> {"vt0"}])
@@ 2
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}])
@@ 4
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}]
/\ cnt_promise = 1
/\ curr = "vt0"
/\ step = "storePromise"
(* Transition 1 to State2 *)
State2 ==
bank
= ((((3
:> [creator |-> "vt1",
promiseId |-> 0,
type |-> "vat",
watchers |-> { "vt0", "vt1" }]
@@ 2
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}])
@@ 0
:> [creator |-> "vt2",
promiseId |-> 0,
type |-> "vat",
watchers |-> {}])
@@ 1
:> [creator |-> "vt0",
promiseId |-> 1,
type |-> "resolver",
watchers |-> {"vt0"}])
@@ 4
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}])
@@ 5
:> [creator |-> "vt0",
promiseId |-> 1,
type |-> "promise",
watchers |-> {"vt0"}]
/\ cnt_promise = 1
/\ curr = "vt0"
/\ step = "sendItem"
(* Transition 2 to State3 *)
State3 ==
bank
= ((((0
:> [creator |-> "vt2",
promiseId |-> 0,
type |-> "vat",
watchers |-> {}]
@@ 2
:> [creator |-> "vt0",
promiseId |-> 0,
type |-> "vat",
watchers |-> {"vt0"}])
@@ 1
:> [creator |-> "vt0",
promiseId |-> 1,
type |-> "resolver",
watchers |-> {"vt0"}])
@@ 3
:> [creator |-> "vt1",
promiseId |-> 0,
type |-> "vat",
watchers |-> { "vt0", "vt1" }])
@@ 5
:> [creator |-> "vt0",
promiseId |-> 1,
type |-> "promise",
watchers |-> {"vt0"}])
@@ 4
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}]
/\ cnt_promise = 1
/\ curr = "vt0"
/\ step = "storeSelfRef"
(* Transition 4 to State4 *)
State4 ==
bank
= ((((0
:> [creator |-> "vt2",
promiseId |-> 0,
type |-> "vat",
watchers |-> {}]
@@ 1
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}])
@@ 3
:> [creator |-> "vt1",
promiseId |-> 0,
type |-> "vat",
watchers |-> { "vt0", "vt1" }])
@@ 4
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}])
@@ 5
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}])
@@ 2
:> [creator |-> "vt0",
promiseId |-> 0,
type |-> "vat",
watchers |-> {"vt0"}]
/\ cnt_promise = 1
/\ curr = "vt0"
/\ step = "resolve"
(* Transition 0 to State5 *)
State5 ==
bank
= ((((3
:> [creator |-> "vt1",
promiseId |-> 0,
type |-> "vat",
watchers |-> { "vt0", "vt1" }]
@@ 4
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}])
@@ 5
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}])
@@ 0
:> [creator |-> "vt2",
promiseId |-> 0,
type |-> "vat",
watchers |-> {}])
@@ 2
:> [creator |-> "vt0",
promiseId |-> 0,
type |-> "vat",
watchers |-> {"vt0"}])
@@ 1
:> [creator |-> "None",
promiseId |-> 0,
type |-> "blank",
watchers |-> {}]
/\ cnt_promise = 1
/\ curr = "vt1"
/\ step = "transferControl"
(* The following formula holds true in the last state and violates the invariant *)
InvariantViolation ==
LET Call_hist ==
<<
[step |-> $C$6, curr |-> $C$152, cnt_promise |-> $C$8, bank |-> $C$68], [step |->
$C$758,
curr |-> $C$689,
cnt_promise |-> $C$759,
bank |-> $C$757], [step |-> $C$5430,
curr |-> $C$5337,
cnt_promise |-> $C$5431,
bank |-> $C$5429], [step |-> $C$11472,
curr |-> $C$11331,
cnt_promise |-> $C$11473,
bank |-> $C$11471], [step |-> $C$20258,
curr |-> $C$20021,
cnt_promise |-> $C$20259,
bank |-> $C$20257], [step |-> $C$34539,
curr |-> $C$34110,
cnt_promise |-> $C$34540,
bank |-> $C$34538]
>>
IN
LET Example_si_2 ==
{ (Call_hist)[i$22]["step"]: i$22 \in DOMAIN Call_hist }
= { "init",
"resolve",
"storePromise",
"storeSelfRef",
"unwatchSlot",
"sendItem",
"transferControl" }
\/ { (Call_hist)[i$23]["step"]: i$23 \in DOMAIN Call_hist }
= { "init",
"resolve",
"storePromise",
"storeSelfRef",
"sendItem",
"transferControl" }
IN
Example_si_2
================================================================================
(* Created by Apalache on Fri Aug 13 09:44:40 BST 2021 *)
(* https://github.com/informalsystems/apalache *)