mirror of
https://github.com/tendermint/tendermint.git
synced 2026-08-20 14:16:22 +00:00
experiments
This commit is contained in:
+789
@@ -0,0 +1,789 @@
|
||||
@!@!@STARTMSG 2262:0 @!@!@
|
||||
Created by Apalache on Wed May 18 11:06:20 UTC 2022
|
||||
@!@!@ENDMSG 2262 @!@!@
|
||||
@!@!@STARTMSG 2110:1 @!@!@
|
||||
Invariant is violated.
|
||||
@!@!@ENDMSG 2110 @!@!@
|
||||
@!@!@STARTMSG 2121:1 @!@!@
|
||||
The behavior up to this point is:
|
||||
@!@!@ENDMSG 2121 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
1: <Initial predicate>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "Init"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = {}
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "None">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f3",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, -1>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, -1>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PROPOSE">>, <<"c2", "PROPOSE">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"None", -1, -1>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
2: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "ReceiveProposal"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = {}
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "None">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f3",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, -1>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PROPOSE">>, <<"c2", "PROPOSE">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"None", -1, -1>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
3: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPropose"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = {[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1]}
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "None">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f3",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, -1>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PROPOSE">>, <<"c2", "PREVOTE">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"None", -1, -1>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
4: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "ReceiveProposal"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = {[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1]}
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "None">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f3",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PROPOSE">>, <<"c2", "PREVOTE">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"None", -1, -1>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
5: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPrevoteOrCommitAndPrevote"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2] }
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "v0">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "c2",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PROPOSE">>, <<"c2", "PRECOMMIT">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"v0", 3, 0>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
6: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPropose"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "v0">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "c2",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PREVOTE">>, <<"c2", "PRECOMMIT">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"v0", 3, 0>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
7: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPrecommitNoDecision"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>, <<"c2", <<<<"v0", 3, 0>>, 0>>>>
|
||||
})
|
||||
/\ evidence = { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "v0">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "c2",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PREVOTE">>, <<"c2", "DECIDED">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"v0", 3, 0>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
8: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPrevoteOrCommitAndPrevote"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>, <<"c2", <<<<"v0", 3, 0>>, 0>>>>
|
||||
})
|
||||
/\ evidence = { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "v1">>, <<"c2", "v0">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "c2",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PRECOMMIT">>, <<"c2", "DECIDED">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"v1", 2, 0>>>>, <<"c2", <<"v0", 3, 0>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
9: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPrecommitNoDecision"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"v1", 2, 0>>, 0>>>>, <<"c2", <<<<"v0", 3, 0>>, 0>>>> })
|
||||
/\ evidence = { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "v1">>, <<"c2", "v0">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "c2",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "DECIDED">>, <<"c2", "DECIDED">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"v1", 2, 0>>>>, <<"c2", <<"v0", 3, 0>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
+789
@@ -0,0 +1,789 @@
|
||||
@!@!@STARTMSG 2262:0 @!@!@
|
||||
Created by Apalache on Wed May 18 11:06:20 UTC 2022
|
||||
@!@!@ENDMSG 2262 @!@!@
|
||||
@!@!@STARTMSG 2110:1 @!@!@
|
||||
Invariant is violated.
|
||||
@!@!@ENDMSG 2110 @!@!@
|
||||
@!@!@STARTMSG 2121:1 @!@!@
|
||||
The behavior up to this point is:
|
||||
@!@!@ENDMSG 2121 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
1: <Initial predicate>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "Init"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = {}
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "None">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f3",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, -1>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, -1>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PROPOSE">>, <<"c2", "PROPOSE">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"None", -1, -1>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
2: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "ReceiveProposal"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = {}
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "None">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f3",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, -1>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PROPOSE">>, <<"c2", "PROPOSE">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"None", -1, -1>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
3: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPropose"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = {[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1]}
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "None">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f3",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, -1>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PROPOSE">>, <<"c2", "PREVOTE">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"None", -1, -1>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
4: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "ReceiveProposal"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = {[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1]}
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "None">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f3",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PROPOSE">>, <<"c2", "PREVOTE">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", -1>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"None", -1, -1>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
5: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPrevoteOrCommitAndPrevote"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2] }
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "v0">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "c2",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PROPOSE">>, <<"c2", "PRECOMMIT">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"v0", 3, 0>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
6: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPropose"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>,
|
||||
<<"c2", <<<<"None", -1, -1>>, -1>>>> })
|
||||
/\ evidence = { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "v0">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "c2",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PREVOTE">>, <<"c2", "PRECOMMIT">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"v0", 3, 0>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
7: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPrecommitNoDecision"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>, <<"c2", <<<<"v0", 3, 0>>, 0>>>>
|
||||
})
|
||||
/\ evidence = { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "None">>, <<"c2", "v0">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "c2",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PREVOTE">>, <<"c2", "DECIDED">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", -1>>, <<"c2", 0>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"None", -1, -1>>>>, <<"c2", <<"v0", 3, 0>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
8: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPrevoteOrCommitAndPrevote"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"None", -1, -1>>, -1>>>>, <<"c2", <<<<"v0", 3, 0>>, 0>>>>
|
||||
})
|
||||
/\ evidence = { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "v1">>, <<"c2", "v0">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "c2",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "PRECOMMIT">>, <<"c2", "DECIDED">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"v1", 2, 0>>>>, <<"c2", <<"v0", 3, 0>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
@!@!@STARTMSG 2217:4 @!@!@
|
||||
9: <Next>
|
||||
/\ Proposer = SetAsFun({ <<0, "f4">>, <<1, "f4">>, <<2, "f4">>, <<3, "f4">> })
|
||||
/\ action = "UponProposalInPrecommitNoDecision"
|
||||
/\ beginRound = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, 7>>,
|
||||
<<<<1, "c1">>, 7>>,
|
||||
<<<<2, "c2">>, 7>>,
|
||||
<<<<1, "c2">>, 7>>,
|
||||
<<<<3, "c2">>, 7>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, 7>> })
|
||||
/\ decision = SetAsFun({ <<"c1", <<<<"v1", 2, 0>>, 0>>>>, <<"c2", <<<<"v0", 3, 0>>, 0>>>> })
|
||||
/\ evidence = { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1],
|
||||
[proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
/\ localClock = SetAsFun({ <<"c1", 3>>, <<"c2", 2>> })
|
||||
/\ lockedRound = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ lockedValue = SetAsFun({ <<"c1", "v1">>, <<"c2", "v0">> })
|
||||
/\ msgsPrecommit = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "c2",
|
||||
type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PRECOMMIT"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PRECOMMIT"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<
|
||||
2, {[id |-> <<"v2", 3, 2>>, round |-> 2, src |-> "f3", type |-> "PRECOMMIT"]}
|
||||
>>,
|
||||
<<
|
||||
3, {[id |-> <<"v2", 7, 3>>, round |-> 3, src |-> "f4", type |-> "PRECOMMIT"]}
|
||||
>> })
|
||||
/\ msgsPrevote = SetAsFun({ <<
|
||||
0, { [id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "c2", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v0", 3, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "c1", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f3", type |-> "PREVOTE"],
|
||||
[id |-> <<"v1", 2, 0>>, round |-> 0, src |-> "f4", type |-> "PREVOTE"] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ msgsPropose = SetAsFun({ <<
|
||||
0, { [proposal |-> <<"v0", 3, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> 2],
|
||||
[proposal |-> <<"v1", 2, 0>>,
|
||||
round |-> 0,
|
||||
src |-> "f4",
|
||||
type |-> "PROPOSAL",
|
||||
validRound |-> -1] }
|
||||
>>,
|
||||
<<1, {}>>,
|
||||
<<2, {}>>,
|
||||
<<3, {}>> })
|
||||
/\ proposalReceptionTime = SetAsFun({ <<<<0, "c1">>, 3>>,
|
||||
<<<<2, "c1">>, -1>>,
|
||||
<<<<1, "c1">>, -1>>,
|
||||
<<<<2, "c2">>, -1>>,
|
||||
<<<<1, "c2">>, -1>>,
|
||||
<<<<3, "c2">>, -1>>,
|
||||
<<<<0, "c2">>, 2>>,
|
||||
<<<<3, "c1">>, -1>> })
|
||||
/\ realTime = 0
|
||||
/\ round = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ step = SetAsFun({ <<"c1", "DECIDED">>, <<"c2", "DECIDED">> })
|
||||
/\ validRound = SetAsFun({ <<"c1", 0>>, <<"c2", 0>> })
|
||||
/\ validValue = SetAsFun({ <<"c1", <<"v1", 2, 0>>>>, <<"c2", <<"v0", 3, 0>>>> })
|
||||
|
||||
@!@!@ENDMSG 2217 @!@!@
|
||||
+5910
File diff suppressed because it is too large
Load Diff
+34833
File diff suppressed because it is too large
Load Diff
+1174
File diff suppressed because it is too large
Load Diff
+5910
File diff suppressed because it is too large
Load Diff
+34833
File diff suppressed because it is too large
Load Diff
+1174
File diff suppressed because it is too large
Load Diff
+44690
File diff suppressed because it is too large
Load Diff
+1047
File diff suppressed because it is too large
Load Diff
+44670
File diff suppressed because it is too large
Load Diff
+1065
File diff suppressed because it is too large
Load Diff
+44670
File diff suppressed because it is too large
Load Diff
+1065
File diff suppressed because it is too large
Load Diff
+50642
File diff suppressed because it is too large
Load Diff
+1117
File diff suppressed because it is too large
Load Diff
+52433
File diff suppressed because it is too large
Load Diff
+896
@@ -0,0 +1,896 @@
|
||||
--------------------------- MODULE 04_OutInlinePass ---------------------------
|
||||
|
||||
EXTENDS Integers, Sequences, FiniteSets, TLC, Apalache
|
||||
|
||||
CONSTANT
|
||||
(*
|
||||
@type: (Int -> Str);
|
||||
*)
|
||||
Proposer
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> <<<<Str, Int, Int>>, Int>>);
|
||||
*)
|
||||
decision
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
msgsPrecommit
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (<<Int, Str>> -> Int);
|
||||
*)
|
||||
beginRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
msgsPrevote
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Str;
|
||||
*)
|
||||
action
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
lockedRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]));
|
||||
*)
|
||||
msgsPropose
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
validRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Str);
|
||||
*)
|
||||
step
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Str);
|
||||
*)
|
||||
lockedValue
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> <<Str, Int, Int>>);
|
||||
*)
|
||||
validValue
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Int;
|
||||
*)
|
||||
realTime
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
round
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Set([id: <<Str, Int, Int>>, proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
evidence
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (<<Int, Str>> -> Int);
|
||||
*)
|
||||
proposalReceptionTime
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
localClock
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
CInit == Proposer \in [(0 .. 3) -> ({ "c1", "c2" } \union { "f3", "f4" })]
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Inv ==
|
||||
(\A p$22 \in { "c1", "c2" }:
|
||||
\A q$6 \in { "c1", "c2" }:
|
||||
decision[p$22] /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
/\ decision[q$6] /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
=> (\E v$10 \in { "v0", "v1" }:
|
||||
\E t$10 \in 0 .. 7:
|
||||
\E pr$5 \in 0 .. 3:
|
||||
\E r1$3 \in 0 .. 3:
|
||||
\E r2$3 \in 0 .. 3:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_8 == <<v$10, t$10, pr$5>>
|
||||
IN
|
||||
decision[p$22] = <<(prop_si_8), r1$3>>
|
||||
/\ decision[q$6] = <<(prop_si_8), r2$3>>))
|
||||
/\ (\A p$23 \in { "c1", "c2" }:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_9 == decision[p$23][1]
|
||||
IN
|
||||
prop_si_9 /= <<"None", (-1), (-1)>> => (prop_si_9)[1] \in { "v0", "v1" })
|
||||
/\ (\A p$24 \in { "c1", "c2" }:
|
||||
\E v$11 \in { "v0", "v1" }:
|
||||
\E t$11 \in 0 .. 7:
|
||||
\E pr$6 \in 0 .. 3:
|
||||
\E dr$2 \in 0 .. 3:
|
||||
decision[p$24] = <<<<v$11, t$11, pr$6>>, dr$2>>
|
||||
=> (\E q$7 \in { "c1", "c2" }:
|
||||
LET (*
|
||||
@type: (() => Int);
|
||||
*)
|
||||
propRecvTime_si_2 == proposalReceptionTime[pr$6, q$7]
|
||||
IN
|
||||
beginRound[pr$6, q$7] <= propRecvTime_si_2
|
||||
/\ beginRound[(pr$6 + 1), q$7] >= propRecvTime_si_2
|
||||
/\ (propRecvTime_si_2 >= t$11 - 2
|
||||
/\ propRecvTime_si_2 <= (t$11 + 2) + 2)))
|
||||
/\ (\A r$31 \in 0 .. 3 \ {3}:
|
||||
\A v$12 \in { "v0", "v1" }:
|
||||
LET (*@type: (() => Str); *) p_si_25 == Proposer[r$31] IN
|
||||
p_si_25 \in { "c1", "c2" }
|
||||
=> (\E t$12 \in 0 .. 7:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_10 == <<v$12, t$12, r$31>>
|
||||
IN
|
||||
(\E msg$8 \in msgsPropose[r$31]:
|
||||
msg$8["proposal"] = prop_si_10
|
||||
/\ msg$8["src"] = p_si_25
|
||||
/\ msg$8["validRound"] = -1)
|
||||
/\ LET (*@type: (() => Int); *) tOffset_si_2 == (t$12 + 2) + 2 IN
|
||||
[
|
||||
r$32 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Min2_si_4(a_si_7, b_si_7) == IF a$7 <= b$7 THEN a$7 ELSE b$7
|
||||
IN
|
||||
Min2$4, 7, {
|
||||
beginRound[r$32, p$26]:
|
||||
p$26 \in { "c1", "c2" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
<= t$12
|
||||
/\ t$12
|
||||
<= [
|
||||
r$33 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Max2_si_4(a_si_8, b_si_8) ==
|
||||
IF a$8 >= b$8 THEN a$8 ELSE b$8
|
||||
IN
|
||||
Max2$4, (-1), {
|
||||
beginRound[r$33, p$27]:
|
||||
p$27 \in { "c1", "c2" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
/\ [
|
||||
r$34 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Max2_si_5(a_si_9, b_si_9) == IF a$9 >= b$9 THEN a$9 ELSE b$9
|
||||
IN
|
||||
Max2$5, (-1), {
|
||||
beginRound[r$34, p$28]:
|
||||
p$28 \in { "c1", "c2" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
<= tOffset_si_2
|
||||
/\ tOffset_si_2
|
||||
<= [
|
||||
r$35 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Min2_si_5(a_si_10, b_si_10) ==
|
||||
IF a$10 <= b$10 THEN a$10 ELSE b$10
|
||||
IN
|
||||
Min2$5, 7, {
|
||||
beginRound[r$35, p$29]:
|
||||
p$29 \in { "c1", "c2" }
|
||||
})
|
||||
][
|
||||
(r$31 + 1)
|
||||
]
|
||||
=> (\A q$8 \in { "c1", "c2" }:
|
||||
LET (*
|
||||
@type: (() => <<<<Str, Int, Int>>, Int>>);
|
||||
*)
|
||||
dq_si_2 == decision[q$8]
|
||||
IN
|
||||
dq_si_2 /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
=> (dq_si_2)[1] = prop_si_10)))
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Init ==
|
||||
round = [ p$10 \in { "c1", "c2" } |-> 0 ]
|
||||
/\ localClock \in [{ "c1", "c2" } -> (2 .. 2 + 2)]
|
||||
/\ realTime = 0
|
||||
/\ step = [ p$11 \in { "c1", "c2" } |-> "PROPOSE" ]
|
||||
/\ decision
|
||||
= [ p$12 \in { "c1", "c2" } |-> <<<<"None", (-1), (-1)>>, (-1)>> ]
|
||||
/\ lockedValue = [ p$13 \in { "c1", "c2" } |-> "None" ]
|
||||
/\ lockedRound = [ p$14 \in { "c1", "c2" } |-> -1 ]
|
||||
/\ validValue = [ p$15 \in { "c1", "c2" } |-> <<"None", (-1), (-1)>> ]
|
||||
/\ validRound = [ p$16 \in { "c1", "c2" } |-> -1 ]
|
||||
/\ ((TRUE
|
||||
/\ (msgsPropose \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrevote \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrecommit \in [(0 .. 3) -> Gen(5)]
|
||||
/\ ((\A r$43 \in 0 .. 3:
|
||||
msgsPropose[r$43]
|
||||
\subseteq [type: {"PROPOSAL"},
|
||||
src: { "f3", "f4" },
|
||||
round: 0 .. 3,
|
||||
proposal:
|
||||
({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3),
|
||||
validRound: 0 .. 3 \union {(-1)}]
|
||||
/\ (\A m$29 \in msgsPropose[r$43]: r$43 = m$29["round"])))
|
||||
/\ ((\A r$44 \in 0 .. 3:
|
||||
msgsPrevote[r$44]
|
||||
\subseteq [type: {"PREVOTE"},
|
||||
src: { "f3", "f4" },
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$30 \in msgsPrevote[r$44]: r$44 = m$30["round"])))
|
||||
/\ ((\A r$45 \in 0 .. 3:
|
||||
msgsPrecommit[r$45]
|
||||
\subseteq [type: {"PRECOMMIT"},
|
||||
src: { "f3", "f4" },
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$31 \in msgsPrecommit[r$45]: r$45 = m$31["round"])))))
|
||||
\/ (~TRUE
|
||||
/\ msgsPropose = [ r$46 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrevote = [ r$47 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrecommit = [ r$48 \in 0 .. 3 |-> {} ]))
|
||||
/\ proposalReceptionTime = [ r_p$1 \in (0 .. 3) \X { "c1", "c2" } |-> -1 ]
|
||||
/\ evidence = {}
|
||||
/\ action = "Init"
|
||||
/\ beginRound
|
||||
= [
|
||||
r_c$1 \in (0 .. 3) \X { "c1", "c2" } |->
|
||||
IF r_c$1[1] = 0 THEN localClock[r_c$1[2]] ELSE 7
|
||||
]
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Next ==
|
||||
(realTime < 7
|
||||
/\ (\E t$18 \in 0 .. 7:
|
||||
t$18 > realTime
|
||||
/\ realTime' = t$18
|
||||
/\ localClock'
|
||||
= [ p$30 \in { "c1", "c2" } |-> localClock[p$30] + t$18 - realTime ])
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>
|
||||
/\ <<
|
||||
msgsPropose, msgsPrevote, msgsPrecommit, evidence, proposalReceptionTime
|
||||
>>'
|
||||
= <<
|
||||
msgsPropose, msgsPrevote, msgsPrecommit, evidence, proposalReceptionTime
|
||||
>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ action' = "AdvanceRealTime")
|
||||
\/ (~TRUE
|
||||
/\ action' = "FaultyBroadcast"
|
||||
/\ (\E r$49 \in 0 .. 3:
|
||||
(\E msgs$4 \in SUBSET ([type: {"PROPOSAL"},
|
||||
src: { "f3", "f4" },
|
||||
round: {r$49},
|
||||
proposal: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3),
|
||||
validRound: 0 .. 3 \union {(-1)}]):
|
||||
msgsPropose'
|
||||
= [
|
||||
msgsPropose EXCEPT
|
||||
![r$49] = msgsPropose[r$49] \union msgs$4
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))
|
||||
\/ (\E msgs$5 \in SUBSET ([type: {"PREVOTE"},
|
||||
src: { "f3", "f4" },
|
||||
round: {r$49},
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]):
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r$49] = msgsPrevote[r$49] \union msgs$5
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))
|
||||
\/ (\E msgs$6 \in SUBSET ([type: {"PRECOMMIT"},
|
||||
src: { "f3", "f4" },
|
||||
round: {r$49},
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]):
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![r$49] = msgsPrecommit[r$49] \union msgs$6
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))))
|
||||
\/ ((\A p$31 \in { "c1", "c2" }:
|
||||
\A q$9 \in { "c1", "c2" }:
|
||||
p$31 /= q$9
|
||||
=> (localClock[p$31] >= localClock[q$9]
|
||||
/\ localClock[p$31] - localClock[q$9] < 2)
|
||||
\/ (localClock[p$31] < localClock[q$9]
|
||||
/\ localClock[q$9] - localClock[p$31] < 2))
|
||||
/\ (\E p$17 \in { "c1", "c2" }:
|
||||
LET (*@type: (() => Int); *) r_si_50 == round[p$17] IN
|
||||
p$17 = Proposer[(r_si_50)]
|
||||
/\ step[p$17] = "PROPOSE"
|
||||
/\ (\A m$32 \in msgsPropose[(r_si_50)]: m$32["src"] /= p$17)
|
||||
/\ (\E v$19 \in { "v0", "v1" }:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
proposal_si_3 ==
|
||||
IF validValue[p$17] /= <<"None", (-1), (-1)>>
|
||||
THEN validValue[p$17]
|
||||
ELSE <<v$19, localClock[p$17], (r_si_50)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
newMsg_si_18 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> p$17,
|
||||
round |-> r_si_50,
|
||||
proposal |-> proposal_si_3,
|
||||
validRound |-> validRound[p$17]]
|
||||
IN
|
||||
msgsPropose'
|
||||
= [
|
||||
msgsPropose EXCEPT
|
||||
![r_si_50] =
|
||||
msgsPropose[(r_si_50)] \union {(newMsg_si_18)}
|
||||
])
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>)
|
||||
/\ (msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "InsertProposal"
|
||||
\/ (\E v$20 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$19 \in 0 .. 7:
|
||||
LET (*@type: (() => Int); *) r_si_51 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_14 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[round[p$17]],
|
||||
round |-> round[p$17],
|
||||
proposal |-> <<v$20, t$19, (r_si_51)>>,
|
||||
validRound |-> -1]
|
||||
IN
|
||||
msg_si_14 \in msgsPropose[round[p$17]]
|
||||
/\ proposalReceptionTime[(r_si_51), p$17] = -1
|
||||
/\ proposalReceptionTime'
|
||||
= [
|
||||
proposalReceptionTime EXCEPT
|
||||
![<<(r_si_51), p$17>>] = localClock[p$17]
|
||||
]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "ReceiveProposal")
|
||||
\/ (\E v$21 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$20 \in 0 .. 7:
|
||||
LET (*@type: (() => Int); *) r_si_52 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_15 == <<v$21, t$20, (r_si_52)>>
|
||||
IN
|
||||
step[p$17] = "PROPOSE"
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_15 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_52)],
|
||||
round |-> r_si_52,
|
||||
proposal |-> prop_si_15,
|
||||
validRound |-> -1]
|
||||
IN
|
||||
evidence' = {(msg_si_15)} \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
mid_si_5 ==
|
||||
IF (proposalReceptionTime[(r_si_52), p$17] >= t$20 - 2
|
||||
/\ proposalReceptionTime[(r_si_52), p$17]
|
||||
<= (t$20 + 2) + 2)
|
||||
/\ prop_si_15 \in { "v0", "v1" } \X (2 .. 7) \X (0 .. 3)
|
||||
/\ (lockedRound[p$17] = -1 \/ lockedValue[p$17] = v$21)
|
||||
THEN prop_si_15
|
||||
ELSE <<"None", (-1), (-1)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_19 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> r_si_52,
|
||||
id |-> mid_si_5]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r_si_52] =
|
||||
msgsPrevote[(r_si_52)] \union {(newMsg_si_19)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInPropose")
|
||||
\/ (\E v$22 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$21 \in 0 .. 7:
|
||||
\E vr$7 \in 0 .. 3:
|
||||
\E pr$9 \in 0 .. 3:
|
||||
LET (*@type: (() => Int); *) r_si_53 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_16 == <<v$22, t$21, pr$9>>
|
||||
IN
|
||||
((step[p$17] = "PROPOSE" /\ 0 <= vr$7) /\ vr$7 < r_si_53)
|
||||
/\ pr$9 <= vr$7
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_16 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_53)],
|
||||
round |-> r_si_53,
|
||||
proposal |-> prop_si_16,
|
||||
validRound |-> vr$7]
|
||||
IN
|
||||
msg_si_16 \in msgsPropose[(r_si_53)]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_9 ==
|
||||
{ m$33 \in msgsPrevote[vr$7]: m$33["id"] = prop_si_16 }
|
||||
IN
|
||||
Cardinality((PV_si_9)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_9 \union {(msg_si_16)}) \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
mid_si_6 ==
|
||||
IF prop_si_16 \in { "v0", "v1" } \X (2 .. 7) \X (0 .. 3)
|
||||
/\ (lockedRound[p$17] <= vr$7
|
||||
\/ lockedValue[p$17] = v$22)
|
||||
THEN prop_si_16
|
||||
ELSE <<"None", (-1), (-1)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_20 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> r_si_53,
|
||||
id |-> mid_si_6]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r_si_53] =
|
||||
msgsPrevote[(r_si_53)] \union {(newMsg_si_20)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInProposeAndPrevote")
|
||||
\/ (step[p$17] = "PREVOTE"
|
||||
/\ (\E MyEvidence$7 \in SUBSET (msgsPrevote[round[p$17]]):
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Voters_si_3 == { m$34["src"]: m$34 \in MyEvidence$7 }
|
||||
IN
|
||||
Cardinality((Voters_si_3)) >= 2 * 1 + 1
|
||||
/\ evidence' = MyEvidence$7 \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_21 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrecommit[round[p$17]] \union {(newMsg_si_21)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponQuorumOfPrevotesAny"))
|
||||
\/ (\E v$23 \in { "v0", "v1" }:
|
||||
\E t$22 \in 0 .. 7:
|
||||
\E vr$8 \in 0 .. 3 \union {(-1)}:
|
||||
LET (*@type: (() => Int); *) r_si_54 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_17 == <<v$23, t$22, (r_si_54)>>
|
||||
IN
|
||||
step[p$17] \in { "PREVOTE", "PRECOMMIT" }
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_17 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_54)],
|
||||
round |-> r_si_54,
|
||||
proposal |-> prop_si_17,
|
||||
validRound |-> vr$8]
|
||||
IN
|
||||
msg_si_17 \in msgsPropose[(r_si_54)]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_10 ==
|
||||
{
|
||||
m$35 \in msgsPrevote[(r_si_54)]:
|
||||
m$35["id"] = prop_si_17
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_10)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_10 \union {(msg_si_17)}) \union evidence
|
||||
/\ (IF step[p$17] = "PREVOTE"
|
||||
THEN lockedValue' = [ lockedValue EXCEPT ![p$17] = v$23 ]
|
||||
/\ lockedRound' = [ lockedRound EXCEPT ![p$17] = r_si_54 ]
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_22 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> r_si_54,
|
||||
id |-> prop_si_17]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![r_si_54] =
|
||||
msgsPrecommit[(r_si_54)] \union {(newMsg_si_22)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
ELSE lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ step' := step)
|
||||
/\ validValue' = [ validValue EXCEPT ![p$17] = prop_si_17 ]
|
||||
/\ validRound' = [ validRound EXCEPT ![p$17] = r_si_54 ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round /\ decision' := decision)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInPrevoteOrCommitAndPrevote")
|
||||
\/ ((\E MyEvidence$8 \in SUBSET (msgsPrecommit[round[p$17]]):
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Committers_si_3 == { m$36["src"]: m$36 \in MyEvidence$8 }
|
||||
IN
|
||||
Cardinality((Committers_si_3)) >= 2 * 1 + 1
|
||||
/\ evidence' = MyEvidence$8 \union evidence
|
||||
/\ round[p$17] + 1 \in 0 .. 3
|
||||
/\ (step[p$17] /= "DECIDED"
|
||||
/\ round' = [ round EXCEPT ![p$17] = round[p$17] + 1 ]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PROPOSE" ]
|
||||
/\ beginRound'
|
||||
= [
|
||||
beginRound EXCEPT
|
||||
![<<(round[p$17] + 1), p$17>>] = localClock[p$17]
|
||||
])
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ (decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponQuorumOfPrecommitsAny"))
|
||||
\/ (decision[p$17] = <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
/\ (\E v$24 \in { "v0", "v1" }:
|
||||
\E t$23 \in 0 .. 7:
|
||||
\E r$55 \in 0 .. 3:
|
||||
\E pr$10 \in 0 .. 3:
|
||||
\E vr$9 \in 0 .. 3 \union {(-1)}:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_18 == <<v$24, t$23, pr$10>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_18 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[r$55],
|
||||
round |-> r$55,
|
||||
proposal |-> prop_si_18,
|
||||
validRound |-> vr$9]
|
||||
IN
|
||||
msg_si_18 \in msgsPropose[r$55]
|
||||
/\ proposalReceptionTime[r$55, p$17] /= -1
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_11 ==
|
||||
{
|
||||
m$37 \in msgsPrecommit[r$55]:
|
||||
m$37["id"] = prop_si_18
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_11)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_11 \union {(msg_si_18)}) \union evidence
|
||||
/\ decision'
|
||||
= [
|
||||
decision EXCEPT
|
||||
![p$17] = <<(prop_si_18), r$55>>
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "DECIDED" ]
|
||||
/\ <<localClock, realTime>>'
|
||||
= <<localClock, realTime>>
|
||||
/\ (round' := round
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "UponProposalInPrecommitNoDecision"))
|
||||
\/ (step[p$17] = "PROPOSE"
|
||||
/\ p$17 /= Proposer[round[p$17]]
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_23 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrevote[round[p$17]] \union {(newMsg_si_23)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnTimeoutPropose")
|
||||
\/ (step[p$17] = "PREVOTE"
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_12 ==
|
||||
{
|
||||
m$38 \in msgsPrevote[round[p$17]]:
|
||||
m$38["id"] = <<"None", (-1), (-1)>>
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_12)) >= 2 * 1 + 1
|
||||
/\ evidence' = PV_si_12 \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_24 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrecommit[round[p$17]] \union {(newMsg_si_24)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnQuorumOfNilPrevotes")
|
||||
\/ (\E r$56 \in 0 .. 3:
|
||||
r$56 > round[p$17]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]));
|
||||
*)
|
||||
RoundMsgs_si_3 ==
|
||||
(msgsPropose[r$56] \union msgsPrevote[r$56])
|
||||
\union msgsPrecommit[r$56]
|
||||
IN
|
||||
\E MyEvidence$9 \in SUBSET RoundMsgs_si_3:
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Faster_si_3 == { m$39["src"]: m$39 \in MyEvidence$9 }
|
||||
IN
|
||||
Cardinality((Faster_si_3)) >= 1 + 1
|
||||
/\ evidence' = MyEvidence$9 \union evidence
|
||||
/\ (step[p$17] /= "DECIDED"
|
||||
/\ round' = [ round EXCEPT ![p$17] = r$56 ]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PROPOSE" ]
|
||||
/\ beginRound'
|
||||
= [
|
||||
beginRound EXCEPT
|
||||
![<<r$56, p$17>>] = localClock[p$17]
|
||||
])
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ (decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnRoundCatchup")))
|
||||
|
||||
================================================================================
|
||||
+59165
File diff suppressed because it is too large
Load Diff
+950
@@ -0,0 +1,950 @@
|
||||
--------------------------- MODULE 05_OutPrimingPass ---------------------------
|
||||
|
||||
EXTENDS Integers, Sequences, FiniteSets, TLC, Apalache
|
||||
|
||||
CONSTANT
|
||||
(*
|
||||
@type: (Int -> Str);
|
||||
*)
|
||||
Proposer
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> <<<<Str, Int, Int>>, Int>>);
|
||||
*)
|
||||
decision
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
msgsPrecommit
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (<<Int, Str>> -> Int);
|
||||
*)
|
||||
beginRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
msgsPrevote
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Str;
|
||||
*)
|
||||
action
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
lockedRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]));
|
||||
*)
|
||||
msgsPropose
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
validRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Str);
|
||||
*)
|
||||
step
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Str);
|
||||
*)
|
||||
lockedValue
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> <<Str, Int, Int>>);
|
||||
*)
|
||||
validValue
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Int;
|
||||
*)
|
||||
realTime
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
round
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Set([id: <<Str, Int, Int>>, proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
evidence
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (<<Int, Str>> -> Int);
|
||||
*)
|
||||
proposalReceptionTime
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
localClock
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
CInit == Proposer \in [(0 .. 3) -> ({ "c1", "c2" } \union { "f3", "f4" })]
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Inv ==
|
||||
(\A p$22 \in { "c1", "c2" }:
|
||||
\A q$6 \in { "c1", "c2" }:
|
||||
decision[p$22] /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
/\ decision[q$6] /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
=> (\E v$10 \in { "v0", "v1" }:
|
||||
\E t$10 \in 0 .. 7:
|
||||
\E pr$5 \in 0 .. 3:
|
||||
\E r1$3 \in 0 .. 3:
|
||||
\E r2$3 \in 0 .. 3:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_8 == <<v$10, t$10, pr$5>>
|
||||
IN
|
||||
decision[p$22] = <<(prop_si_8), r1$3>>
|
||||
/\ decision[q$6] = <<(prop_si_8), r2$3>>))
|
||||
/\ (\A p$23 \in { "c1", "c2" }:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_9 == decision[p$23][1]
|
||||
IN
|
||||
prop_si_9 /= <<"None", (-1), (-1)>> => (prop_si_9)[1] \in { "v0", "v1" })
|
||||
/\ (\A p$24 \in { "c1", "c2" }:
|
||||
\E v$11 \in { "v0", "v1" }:
|
||||
\E t$11 \in 0 .. 7:
|
||||
\E pr$6 \in 0 .. 3:
|
||||
\E dr$2 \in 0 .. 3:
|
||||
decision[p$24] = <<<<v$11, t$11, pr$6>>, dr$2>>
|
||||
=> (\E q$7 \in { "c1", "c2" }:
|
||||
LET (*
|
||||
@type: (() => Int);
|
||||
*)
|
||||
propRecvTime_si_2 == proposalReceptionTime[pr$6, q$7]
|
||||
IN
|
||||
beginRound[pr$6, q$7] <= propRecvTime_si_2
|
||||
/\ beginRound[(pr$6 + 1), q$7] >= propRecvTime_si_2
|
||||
/\ (propRecvTime_si_2 >= t$11 - 2
|
||||
/\ propRecvTime_si_2 <= (t$11 + 2) + 2)))
|
||||
/\ (\A r$31 \in 0 .. 3 \ {3}:
|
||||
\A v$12 \in { "v0", "v1" }:
|
||||
LET (*@type: (() => Str); *) p_si_25 == Proposer[r$31] IN
|
||||
p_si_25 \in { "c1", "c2" }
|
||||
=> (\E t$12 \in 0 .. 7:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_10 == <<v$12, t$12, r$31>>
|
||||
IN
|
||||
(\E msg$8 \in msgsPropose[r$31]:
|
||||
msg$8["proposal"] = prop_si_10
|
||||
/\ msg$8["src"] = p_si_25
|
||||
/\ msg$8["validRound"] = -1)
|
||||
/\ LET (*@type: (() => Int); *) tOffset_si_2 == (t$12 + 2) + 2 IN
|
||||
[
|
||||
r$32 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Min2_si_4(a_si_7, b_si_7) == IF a$7 <= b$7 THEN a$7 ELSE b$7
|
||||
IN
|
||||
Min2$4, 7, {
|
||||
beginRound[r$32, p$26]:
|
||||
p$26 \in { "c1", "c2" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
<= t$12
|
||||
/\ t$12
|
||||
<= [
|
||||
r$33 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Max2_si_4(a_si_8, b_si_8) ==
|
||||
IF a$8 >= b$8 THEN a$8 ELSE b$8
|
||||
IN
|
||||
Max2$4, (-1), {
|
||||
beginRound[r$33, p$27]:
|
||||
p$27 \in { "c1", "c2" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
/\ [
|
||||
r$34 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Max2_si_5(a_si_9, b_si_9) == IF a$9 >= b$9 THEN a$9 ELSE b$9
|
||||
IN
|
||||
Max2$5, (-1), {
|
||||
beginRound[r$34, p$28]:
|
||||
p$28 \in { "c1", "c2" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
<= tOffset_si_2
|
||||
/\ tOffset_si_2
|
||||
<= [
|
||||
r$35 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Min2_si_5(a_si_10, b_si_10) ==
|
||||
IF a$10 <= b$10 THEN a$10 ELSE b$10
|
||||
IN
|
||||
Min2$5, 7, {
|
||||
beginRound[r$35, p$29]:
|
||||
p$29 \in { "c1", "c2" }
|
||||
})
|
||||
][
|
||||
(r$31 + 1)
|
||||
]
|
||||
=> (\A q$8 \in { "c1", "c2" }:
|
||||
LET (*
|
||||
@type: (() => <<<<Str, Int, Int>>, Int>>);
|
||||
*)
|
||||
dq_si_2 == decision[q$8]
|
||||
IN
|
||||
dq_si_2 /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
=> (dq_si_2)[1] = prop_si_10)))
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Init ==
|
||||
round = [ p$10 \in { "c1", "c2" } |-> 0 ]
|
||||
/\ localClock \in [{ "c1", "c2" } -> (2 .. 2 + 2)]
|
||||
/\ realTime = 0
|
||||
/\ step = [ p$11 \in { "c1", "c2" } |-> "PROPOSE" ]
|
||||
/\ decision
|
||||
= [ p$12 \in { "c1", "c2" } |-> <<<<"None", (-1), (-1)>>, (-1)>> ]
|
||||
/\ lockedValue = [ p$13 \in { "c1", "c2" } |-> "None" ]
|
||||
/\ lockedRound = [ p$14 \in { "c1", "c2" } |-> -1 ]
|
||||
/\ validValue = [ p$15 \in { "c1", "c2" } |-> <<"None", (-1), (-1)>> ]
|
||||
/\ validRound = [ p$16 \in { "c1", "c2" } |-> -1 ]
|
||||
/\ ((TRUE
|
||||
/\ (msgsPropose \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrevote \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrecommit \in [(0 .. 3) -> Gen(5)]
|
||||
/\ ((\A r$43 \in 0 .. 3:
|
||||
msgsPropose[r$43]
|
||||
\subseteq [type: {"PROPOSAL"},
|
||||
src: { "f3", "f4" },
|
||||
round: 0 .. 3,
|
||||
proposal:
|
||||
({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3),
|
||||
validRound: 0 .. 3 \union {(-1)}]
|
||||
/\ (\A m$29 \in msgsPropose[r$43]: r$43 = m$29["round"])))
|
||||
/\ ((\A r$44 \in 0 .. 3:
|
||||
msgsPrevote[r$44]
|
||||
\subseteq [type: {"PREVOTE"},
|
||||
src: { "f3", "f4" },
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$30 \in msgsPrevote[r$44]: r$44 = m$30["round"])))
|
||||
/\ ((\A r$45 \in 0 .. 3:
|
||||
msgsPrecommit[r$45]
|
||||
\subseteq [type: {"PRECOMMIT"},
|
||||
src: { "f3", "f4" },
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$31 \in msgsPrecommit[r$45]: r$45 = m$31["round"])))))
|
||||
\/ (~TRUE
|
||||
/\ msgsPropose = [ r$46 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrevote = [ r$47 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrecommit = [ r$48 \in 0 .. 3 |-> {} ]))
|
||||
/\ proposalReceptionTime = [ r_p$1 \in (0 .. 3) \X { "c1", "c2" } |-> -1 ]
|
||||
/\ evidence = {}
|
||||
/\ action = "Init"
|
||||
/\ beginRound
|
||||
= [
|
||||
r_c$1 \in (0 .. 3) \X { "c1", "c2" } |->
|
||||
IF r_c$1[1] = 0 THEN localClock[r_c$1[2]] ELSE 7
|
||||
]
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Next ==
|
||||
(realTime < 7
|
||||
/\ (\E t$18 \in 0 .. 7:
|
||||
t$18 > realTime
|
||||
/\ realTime' = t$18
|
||||
/\ localClock'
|
||||
= [ p$30 \in { "c1", "c2" } |-> localClock[p$30] + t$18 - realTime ])
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>
|
||||
/\ <<
|
||||
msgsPropose, msgsPrevote, msgsPrecommit, evidence, proposalReceptionTime
|
||||
>>'
|
||||
= <<
|
||||
msgsPropose, msgsPrevote, msgsPrecommit, evidence, proposalReceptionTime
|
||||
>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ action' = "AdvanceRealTime")
|
||||
\/ (~TRUE
|
||||
/\ action' = "FaultyBroadcast"
|
||||
/\ (\E r$49 \in 0 .. 3:
|
||||
(\E msgs$4 \in SUBSET ([type: {"PROPOSAL"},
|
||||
src: { "f3", "f4" },
|
||||
round: {r$49},
|
||||
proposal: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3),
|
||||
validRound: 0 .. 3 \union {(-1)}]):
|
||||
msgsPropose'
|
||||
= [
|
||||
msgsPropose EXCEPT
|
||||
![r$49] = msgsPropose[r$49] \union msgs$4
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))
|
||||
\/ (\E msgs$5 \in SUBSET ([type: {"PREVOTE"},
|
||||
src: { "f3", "f4" },
|
||||
round: {r$49},
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]):
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r$49] = msgsPrevote[r$49] \union msgs$5
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))
|
||||
\/ (\E msgs$6 \in SUBSET ([type: {"PRECOMMIT"},
|
||||
src: { "f3", "f4" },
|
||||
round: {r$49},
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]):
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![r$49] = msgsPrecommit[r$49] \union msgs$6
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))))
|
||||
\/ ((\A p$31 \in { "c1", "c2" }:
|
||||
\A q$9 \in { "c1", "c2" }:
|
||||
p$31 /= q$9
|
||||
=> (localClock[p$31] >= localClock[q$9]
|
||||
/\ localClock[p$31] - localClock[q$9] < 2)
|
||||
\/ (localClock[p$31] < localClock[q$9]
|
||||
/\ localClock[q$9] - localClock[p$31] < 2))
|
||||
/\ (\E p$17 \in { "c1", "c2" }:
|
||||
LET (*@type: (() => Int); *) r_si_50 == round[p$17] IN
|
||||
p$17 = Proposer[(r_si_50)]
|
||||
/\ step[p$17] = "PROPOSE"
|
||||
/\ (\A m$32 \in msgsPropose[(r_si_50)]: m$32["src"] /= p$17)
|
||||
/\ (\E v$19 \in { "v0", "v1" }:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
proposal_si_3 ==
|
||||
IF validValue[p$17] /= <<"None", (-1), (-1)>>
|
||||
THEN validValue[p$17]
|
||||
ELSE <<v$19, localClock[p$17], (r_si_50)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
newMsg_si_18 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> p$17,
|
||||
round |-> r_si_50,
|
||||
proposal |-> proposal_si_3,
|
||||
validRound |-> validRound[p$17]]
|
||||
IN
|
||||
msgsPropose'
|
||||
= [
|
||||
msgsPropose EXCEPT
|
||||
![r_si_50] =
|
||||
msgsPropose[(r_si_50)] \union {(newMsg_si_18)}
|
||||
])
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>)
|
||||
/\ (msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "InsertProposal"
|
||||
\/ (\E v$20 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$19 \in 0 .. 7:
|
||||
LET (*@type: (() => Int); *) r_si_51 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_14 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[round[p$17]],
|
||||
round |-> round[p$17],
|
||||
proposal |-> <<v$20, t$19, (r_si_51)>>,
|
||||
validRound |-> -1]
|
||||
IN
|
||||
msg_si_14 \in msgsPropose[round[p$17]]
|
||||
/\ proposalReceptionTime[(r_si_51), p$17] = -1
|
||||
/\ proposalReceptionTime'
|
||||
= [
|
||||
proposalReceptionTime EXCEPT
|
||||
![<<(r_si_51), p$17>>] = localClock[p$17]
|
||||
]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "ReceiveProposal")
|
||||
\/ (\E v$21 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$20 \in 0 .. 7:
|
||||
LET (*@type: (() => Int); *) r_si_52 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_15 == <<v$21, t$20, (r_si_52)>>
|
||||
IN
|
||||
step[p$17] = "PROPOSE"
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_15 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_52)],
|
||||
round |-> r_si_52,
|
||||
proposal |-> prop_si_15,
|
||||
validRound |-> -1]
|
||||
IN
|
||||
evidence' = {(msg_si_15)} \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
mid_si_5 ==
|
||||
IF (proposalReceptionTime[(r_si_52), p$17] >= t$20 - 2
|
||||
/\ proposalReceptionTime[(r_si_52), p$17]
|
||||
<= (t$20 + 2) + 2)
|
||||
/\ prop_si_15 \in { "v0", "v1" } \X (2 .. 7) \X (0 .. 3)
|
||||
/\ (lockedRound[p$17] = -1 \/ lockedValue[p$17] = v$21)
|
||||
THEN prop_si_15
|
||||
ELSE <<"None", (-1), (-1)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_19 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> r_si_52,
|
||||
id |-> mid_si_5]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r_si_52] =
|
||||
msgsPrevote[(r_si_52)] \union {(newMsg_si_19)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInPropose")
|
||||
\/ (\E v$22 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$21 \in 0 .. 7:
|
||||
\E vr$7 \in 0 .. 3:
|
||||
\E pr$9 \in 0 .. 3:
|
||||
LET (*@type: (() => Int); *) r_si_53 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_16 == <<v$22, t$21, pr$9>>
|
||||
IN
|
||||
((step[p$17] = "PROPOSE" /\ 0 <= vr$7) /\ vr$7 < r_si_53)
|
||||
/\ pr$9 <= vr$7
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_16 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_53)],
|
||||
round |-> r_si_53,
|
||||
proposal |-> prop_si_16,
|
||||
validRound |-> vr$7]
|
||||
IN
|
||||
msg_si_16 \in msgsPropose[(r_si_53)]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_9 ==
|
||||
{ m$33 \in msgsPrevote[vr$7]: m$33["id"] = prop_si_16 }
|
||||
IN
|
||||
Cardinality((PV_si_9)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_9 \union {(msg_si_16)}) \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
mid_si_6 ==
|
||||
IF prop_si_16 \in { "v0", "v1" } \X (2 .. 7) \X (0 .. 3)
|
||||
/\ (lockedRound[p$17] <= vr$7
|
||||
\/ lockedValue[p$17] = v$22)
|
||||
THEN prop_si_16
|
||||
ELSE <<"None", (-1), (-1)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_20 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> r_si_53,
|
||||
id |-> mid_si_6]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r_si_53] =
|
||||
msgsPrevote[(r_si_53)] \union {(newMsg_si_20)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInProposeAndPrevote")
|
||||
\/ (step[p$17] = "PREVOTE"
|
||||
/\ (\E MyEvidence$7 \in SUBSET (msgsPrevote[round[p$17]]):
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Voters_si_3 == { m$34["src"]: m$34 \in MyEvidence$7 }
|
||||
IN
|
||||
Cardinality((Voters_si_3)) >= 2 * 1 + 1
|
||||
/\ evidence' = MyEvidence$7 \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_21 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrecommit[round[p$17]] \union {(newMsg_si_21)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponQuorumOfPrevotesAny"))
|
||||
\/ (\E v$23 \in { "v0", "v1" }:
|
||||
\E t$22 \in 0 .. 7:
|
||||
\E vr$8 \in 0 .. 3 \union {(-1)}:
|
||||
LET (*@type: (() => Int); *) r_si_54 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_17 == <<v$23, t$22, (r_si_54)>>
|
||||
IN
|
||||
step[p$17] \in { "PREVOTE", "PRECOMMIT" }
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_17 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_54)],
|
||||
round |-> r_si_54,
|
||||
proposal |-> prop_si_17,
|
||||
validRound |-> vr$8]
|
||||
IN
|
||||
msg_si_17 \in msgsPropose[(r_si_54)]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_10 ==
|
||||
{
|
||||
m$35 \in msgsPrevote[(r_si_54)]:
|
||||
m$35["id"] = prop_si_17
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_10)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_10 \union {(msg_si_17)}) \union evidence
|
||||
/\ (IF step[p$17] = "PREVOTE"
|
||||
THEN lockedValue' = [ lockedValue EXCEPT ![p$17] = v$23 ]
|
||||
/\ lockedRound' = [ lockedRound EXCEPT ![p$17] = r_si_54 ]
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_22 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> r_si_54,
|
||||
id |-> prop_si_17]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![r_si_54] =
|
||||
msgsPrecommit[(r_si_54)] \union {(newMsg_si_22)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
ELSE lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ step' := step)
|
||||
/\ validValue' = [ validValue EXCEPT ![p$17] = prop_si_17 ]
|
||||
/\ validRound' = [ validRound EXCEPT ![p$17] = r_si_54 ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round /\ decision' := decision)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInPrevoteOrCommitAndPrevote")
|
||||
\/ ((\E MyEvidence$8 \in SUBSET (msgsPrecommit[round[p$17]]):
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Committers_si_3 == { m$36["src"]: m$36 \in MyEvidence$8 }
|
||||
IN
|
||||
Cardinality((Committers_si_3)) >= 2 * 1 + 1
|
||||
/\ evidence' = MyEvidence$8 \union evidence
|
||||
/\ round[p$17] + 1 \in 0 .. 3
|
||||
/\ (step[p$17] /= "DECIDED"
|
||||
/\ round' = [ round EXCEPT ![p$17] = round[p$17] + 1 ]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PROPOSE" ]
|
||||
/\ beginRound'
|
||||
= [
|
||||
beginRound EXCEPT
|
||||
![<<(round[p$17] + 1), p$17>>] = localClock[p$17]
|
||||
])
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ (decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponQuorumOfPrecommitsAny"))
|
||||
\/ (decision[p$17] = <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
/\ (\E v$24 \in { "v0", "v1" }:
|
||||
\E t$23 \in 0 .. 7:
|
||||
\E r$55 \in 0 .. 3:
|
||||
\E pr$10 \in 0 .. 3:
|
||||
\E vr$9 \in 0 .. 3 \union {(-1)}:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_18 == <<v$24, t$23, pr$10>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_18 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[r$55],
|
||||
round |-> r$55,
|
||||
proposal |-> prop_si_18,
|
||||
validRound |-> vr$9]
|
||||
IN
|
||||
msg_si_18 \in msgsPropose[r$55]
|
||||
/\ proposalReceptionTime[r$55, p$17] /= -1
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_11 ==
|
||||
{
|
||||
m$37 \in msgsPrecommit[r$55]:
|
||||
m$37["id"] = prop_si_18
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_11)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_11 \union {(msg_si_18)}) \union evidence
|
||||
/\ decision'
|
||||
= [
|
||||
decision EXCEPT
|
||||
![p$17] = <<(prop_si_18), r$55>>
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "DECIDED" ]
|
||||
/\ <<localClock, realTime>>'
|
||||
= <<localClock, realTime>>
|
||||
/\ (round' := round
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "UponProposalInPrecommitNoDecision"))
|
||||
\/ (step[p$17] = "PROPOSE"
|
||||
/\ p$17 /= Proposer[round[p$17]]
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_23 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrevote[round[p$17]] \union {(newMsg_si_23)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnTimeoutPropose")
|
||||
\/ (step[p$17] = "PREVOTE"
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_12 ==
|
||||
{
|
||||
m$38 \in msgsPrevote[round[p$17]]:
|
||||
m$38["id"] = <<"None", (-1), (-1)>>
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_12)) >= 2 * 1 + 1
|
||||
/\ evidence' = PV_si_12 \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_24 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrecommit[round[p$17]] \union {(newMsg_si_24)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnQuorumOfNilPrevotes")
|
||||
\/ (\E r$56 \in 0 .. 3:
|
||||
r$56 > round[p$17]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]));
|
||||
*)
|
||||
RoundMsgs_si_3 ==
|
||||
(msgsPropose[r$56] \union msgsPrevote[r$56])
|
||||
\union msgsPrecommit[r$56]
|
||||
IN
|
||||
\E MyEvidence$9 \in SUBSET RoundMsgs_si_3:
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Faster_si_3 == { m$39["src"]: m$39 \in MyEvidence$9 }
|
||||
IN
|
||||
Cardinality((Faster_si_3)) >= 1 + 1
|
||||
/\ evidence' = MyEvidence$9 \union evidence
|
||||
/\ (step[p$17] /= "DECIDED"
|
||||
/\ round' = [ round EXCEPT ![p$17] = r$56 ]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PROPOSE" ]
|
||||
/\ beginRound'
|
||||
= [
|
||||
beginRound EXCEPT
|
||||
![<<r$56, p$17>>] = localClock[p$17]
|
||||
])
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ (decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnRoundCatchup")))
|
||||
|
||||
CInitPrimed ==
|
||||
Proposer' \in [(0 .. 3) -> ({ "c1", "c2" } \union { "f3", "f4" })]
|
||||
|
||||
InitPrimed ==
|
||||
round' = [ p$10 \in { "c1", "c2" } |-> 0 ]
|
||||
/\ localClock' \in [{ "c1", "c2" } -> (2 .. 2 + 2)]
|
||||
/\ realTime' = 0
|
||||
/\ step' = [ p$11 \in { "c1", "c2" } |-> "PROPOSE" ]
|
||||
/\ decision'
|
||||
= [ p$12 \in { "c1", "c2" } |-> <<<<"None", (-1), (-1)>>, (-1)>> ]
|
||||
/\ lockedValue' = [ p$13 \in { "c1", "c2" } |-> "None" ]
|
||||
/\ lockedRound' = [ p$14 \in { "c1", "c2" } |-> -1 ]
|
||||
/\ validValue' = [ p$15 \in { "c1", "c2" } |-> <<"None", (-1), (-1)>> ]
|
||||
/\ validRound' = [ p$16 \in { "c1", "c2" } |-> -1 ]
|
||||
/\ ((TRUE
|
||||
/\ (msgsPropose' \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrevote' \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrecommit' \in [(0 .. 3) -> Gen(5)]
|
||||
/\ ((\A r$43 \in 0 .. 3:
|
||||
msgsPropose'[r$43]
|
||||
\subseteq [type: {"PROPOSAL"},
|
||||
src: { "f3", "f4" },
|
||||
round: 0 .. 3,
|
||||
proposal:
|
||||
({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3),
|
||||
validRound: 0 .. 3 \union {(-1)}]
|
||||
/\ (\A m$29 \in msgsPropose'[r$43]: r$43 = m$29["round"])))
|
||||
/\ ((\A r$44 \in 0 .. 3:
|
||||
msgsPrevote'[r$44]
|
||||
\subseteq [type: {"PREVOTE"},
|
||||
src: { "f3", "f4" },
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$30 \in msgsPrevote'[r$44]: r$44 = m$30["round"])))
|
||||
/\ ((\A r$45 \in 0 .. 3:
|
||||
msgsPrecommit'[r$45]
|
||||
\subseteq [type: {"PRECOMMIT"},
|
||||
src: { "f3", "f4" },
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$31 \in msgsPrecommit'[r$45]: r$45 = m$31["round"])))))
|
||||
\/ (~TRUE
|
||||
/\ msgsPropose' = [ r$46 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrevote' = [ r$47 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrecommit' = [ r$48 \in 0 .. 3 |-> {} ]))
|
||||
/\ proposalReceptionTime' = [ r_p$1 \in (0 .. 3) \X { "c1", "c2" } |-> -1 ]
|
||||
/\ evidence' = {}
|
||||
/\ action' = "Init"
|
||||
/\ beginRound'
|
||||
= [
|
||||
r_c$1 \in (0 .. 3) \X { "c1", "c2" } |->
|
||||
IF r_c$1[1] = 0 THEN localClock'[r_c$1[2]] ELSE 7
|
||||
]
|
||||
|
||||
================================================================================
|
||||
+73971
File diff suppressed because it is too large
Load Diff
+1222
File diff suppressed because it is too large
Load Diff
+75679
File diff suppressed because it is too large
Load Diff
+1370
File diff suppressed because it is too large
Load Diff
+77344
File diff suppressed because it is too large
Load Diff
+1352
File diff suppressed because it is too large
Load Diff
+65873
File diff suppressed because it is too large
Load Diff
+1204
File diff suppressed because it is too large
Load Diff
+66943
File diff suppressed because it is too large
Load Diff
+1205
File diff suppressed because it is too large
Load Diff
+66943
File diff suppressed because it is too large
Load Diff
+1205
File diff suppressed because it is too large
Load Diff
+5
@@ -0,0 +1,5 @@
|
||||
Logging is disabled (Z3SolverContext.debug = false). Activate with --debug.
|
||||
;; sat.random_seed = 0
|
||||
;; smt.random_seed = 0
|
||||
;; fp.spacer.random_seed = 0
|
||||
;; sls.random_seed = 0
|
||||
+1
@@ -0,0 +1 @@
|
||||
check --length=8 --inv=Inv --cinit=CInit --discard-disabled=false MC_PBT_2C_2F.tla
|
||||
+45070
File diff suppressed because it is too large
Load Diff
+1046
File diff suppressed because it is too large
Load Diff
+45050
File diff suppressed because it is too large
Load Diff
+1064
File diff suppressed because it is too large
Load Diff
+45050
File diff suppressed because it is too large
Load Diff
+1064
File diff suppressed because it is too large
Load Diff
+51022
File diff suppressed because it is too large
Load Diff
+1116
File diff suppressed because it is too large
Load Diff
+52794
File diff suppressed because it is too large
Load Diff
+900
@@ -0,0 +1,900 @@
|
||||
--------------------------- MODULE 04_OutInlinePass ---------------------------
|
||||
|
||||
EXTENDS Integers, Sequences, FiniteSets, TLC, Apalache
|
||||
|
||||
CONSTANT
|
||||
(*
|
||||
@type: (Int -> Str);
|
||||
*)
|
||||
Proposer
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> <<<<Str, Int, Int>>, Int>>);
|
||||
*)
|
||||
decision
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
msgsPrecommit
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (<<Int, Str>> -> Int);
|
||||
*)
|
||||
beginRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
msgsPrevote
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Str;
|
||||
*)
|
||||
action
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
lockedRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]));
|
||||
*)
|
||||
msgsPropose
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
validRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Str);
|
||||
*)
|
||||
step
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Str);
|
||||
*)
|
||||
lockedValue
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> <<Str, Int, Int>>);
|
||||
*)
|
||||
validValue
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Int;
|
||||
*)
|
||||
realTime
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
round
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Set([id: <<Str, Int, Int>>, proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
evidence
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (<<Int, Str>> -> Int);
|
||||
*)
|
||||
proposalReceptionTime
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
localClock
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
CInit == Proposer \in [(0 .. 3) -> ({ "c1", "c2", "c3" } \union {"f4"})]
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Inv ==
|
||||
(\A p$22 \in { "c1", "c2", "c3" }:
|
||||
\A q$6 \in { "c1", "c2", "c3" }:
|
||||
decision[p$22] /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
/\ decision[q$6] /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
=> (\E v$10 \in { "v0", "v1" }:
|
||||
\E t$10 \in 0 .. 7:
|
||||
\E pr$5 \in 0 .. 3:
|
||||
\E r1$3 \in 0 .. 3:
|
||||
\E r2$3 \in 0 .. 3:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_8 == <<v$10, t$10, pr$5>>
|
||||
IN
|
||||
decision[p$22] = <<(prop_si_8), r1$3>>
|
||||
/\ decision[q$6] = <<(prop_si_8), r2$3>>))
|
||||
/\ (\A p$23 \in { "c1", "c2", "c3" }:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_9 == decision[p$23][1]
|
||||
IN
|
||||
prop_si_9 /= <<"None", (-1), (-1)>> => (prop_si_9)[1] \in { "v0", "v1" })
|
||||
/\ (\A p$24 \in { "c1", "c2", "c3" }:
|
||||
\E v$11 \in { "v0", "v1" }:
|
||||
\E t$11 \in 0 .. 7:
|
||||
\E pr$6 \in 0 .. 3:
|
||||
\E dr$2 \in 0 .. 3:
|
||||
decision[p$24] = <<<<v$11, t$11, pr$6>>, dr$2>>
|
||||
=> (\E q$7 \in { "c1", "c2", "c3" }:
|
||||
LET (*
|
||||
@type: (() => Int);
|
||||
*)
|
||||
propRecvTime_si_2 == proposalReceptionTime[pr$6, q$7]
|
||||
IN
|
||||
beginRound[pr$6, q$7] <= propRecvTime_si_2
|
||||
/\ beginRound[(pr$6 + 1), q$7] >= propRecvTime_si_2
|
||||
/\ (propRecvTime_si_2 >= t$11 - 2
|
||||
/\ propRecvTime_si_2 <= (t$11 + 2) + 2)))
|
||||
/\ (\A r$31 \in 0 .. 3 \ {3}:
|
||||
\A v$12 \in { "v0", "v1" }:
|
||||
LET (*@type: (() => Str); *) p_si_25 == Proposer[r$31] IN
|
||||
p_si_25 \in { "c1", "c2", "c3" }
|
||||
=> (\E t$12 \in 0 .. 7:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_10 == <<v$12, t$12, r$31>>
|
||||
IN
|
||||
(\E msg$8 \in msgsPropose[r$31]:
|
||||
msg$8["proposal"] = prop_si_10
|
||||
/\ msg$8["src"] = p_si_25
|
||||
/\ msg$8["validRound"] = -1)
|
||||
/\ LET (*@type: (() => Int); *) tOffset_si_2 == (t$12 + 2) + 2 IN
|
||||
[
|
||||
r$32 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Min2_si_4(a_si_7, b_si_7) == IF a$7 <= b$7 THEN a$7 ELSE b$7
|
||||
IN
|
||||
Min2$4, 7, {
|
||||
beginRound[r$32, p$26]:
|
||||
p$26 \in { "c1", "c2", "c3" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
<= t$12
|
||||
/\ t$12
|
||||
<= [
|
||||
r$33 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Max2_si_4(a_si_8, b_si_8) ==
|
||||
IF a$8 >= b$8 THEN a$8 ELSE b$8
|
||||
IN
|
||||
Max2$4, (-1), {
|
||||
beginRound[r$33, p$27]:
|
||||
p$27 \in { "c1", "c2", "c3" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
/\ [
|
||||
r$34 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Max2_si_5(a_si_9, b_si_9) == IF a$9 >= b$9 THEN a$9 ELSE b$9
|
||||
IN
|
||||
Max2$5, (-1), {
|
||||
beginRound[r$34, p$28]:
|
||||
p$28 \in { "c1", "c2", "c3" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
<= tOffset_si_2
|
||||
/\ tOffset_si_2
|
||||
<= [
|
||||
r$35 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Min2_si_5(a_si_10, b_si_10) ==
|
||||
IF a$10 <= b$10 THEN a$10 ELSE b$10
|
||||
IN
|
||||
Min2$5, 7, {
|
||||
beginRound[r$35, p$29]:
|
||||
p$29 \in { "c1", "c2", "c3" }
|
||||
})
|
||||
][
|
||||
(r$31 + 1)
|
||||
]
|
||||
=> (\A q$8 \in { "c1", "c2", "c3" }:
|
||||
LET (*
|
||||
@type: (() => <<<<Str, Int, Int>>, Int>>);
|
||||
*)
|
||||
dq_si_2 == decision[q$8]
|
||||
IN
|
||||
dq_si_2 /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
=> (dq_si_2)[1] = prop_si_10)))
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Init ==
|
||||
round = [ p$10 \in { "c1", "c2", "c3" } |-> 0 ]
|
||||
/\ localClock \in [{ "c1", "c2", "c3" } -> (2 .. 2 + 2)]
|
||||
/\ realTime = 0
|
||||
/\ step = [ p$11 \in { "c1", "c2", "c3" } |-> "PROPOSE" ]
|
||||
/\ decision
|
||||
= [ p$12 \in { "c1", "c2", "c3" } |-> <<<<"None", (-1), (-1)>>, (-1)>> ]
|
||||
/\ lockedValue = [ p$13 \in { "c1", "c2", "c3" } |-> "None" ]
|
||||
/\ lockedRound = [ p$14 \in { "c1", "c2", "c3" } |-> -1 ]
|
||||
/\ validValue = [ p$15 \in { "c1", "c2", "c3" } |-> <<"None", (-1), (-1)>> ]
|
||||
/\ validRound = [ p$16 \in { "c1", "c2", "c3" } |-> -1 ]
|
||||
/\ ((TRUE
|
||||
/\ (msgsPropose \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrevote \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrecommit \in [(0 .. 3) -> Gen(5)]
|
||||
/\ ((\A r$43 \in 0 .. 3:
|
||||
msgsPropose[r$43]
|
||||
\subseteq [type: {"PROPOSAL"},
|
||||
src: {"f4"},
|
||||
round: 0 .. 3,
|
||||
proposal:
|
||||
({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3),
|
||||
validRound: 0 .. 3 \union {(-1)}]
|
||||
/\ (\A m$29 \in msgsPropose[r$43]: r$43 = m$29["round"])))
|
||||
/\ ((\A r$44 \in 0 .. 3:
|
||||
msgsPrevote[r$44]
|
||||
\subseteq [type: {"PREVOTE"},
|
||||
src: {"f4"},
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$30 \in msgsPrevote[r$44]: r$44 = m$30["round"])))
|
||||
/\ ((\A r$45 \in 0 .. 3:
|
||||
msgsPrecommit[r$45]
|
||||
\subseteq [type: {"PRECOMMIT"},
|
||||
src: {"f4"},
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$31 \in msgsPrecommit[r$45]: r$45 = m$31["round"])))))
|
||||
\/ (~TRUE
|
||||
/\ msgsPropose = [ r$46 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrevote = [ r$47 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrecommit = [ r$48 \in 0 .. 3 |-> {} ]))
|
||||
/\ proposalReceptionTime
|
||||
= [ r_p$1 \in (0 .. 3) \X { "c1", "c2", "c3" } |-> -1 ]
|
||||
/\ evidence = {}
|
||||
/\ action = "Init"
|
||||
/\ beginRound
|
||||
= [
|
||||
r_c$1 \in (0 .. 3) \X { "c1", "c2", "c3" } |->
|
||||
IF r_c$1[1] = 0 THEN localClock[r_c$1[2]] ELSE 7
|
||||
]
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Next ==
|
||||
(realTime < 7
|
||||
/\ (\E t$18 \in 0 .. 7:
|
||||
t$18 > realTime
|
||||
/\ realTime' = t$18
|
||||
/\ localClock'
|
||||
= [
|
||||
p$30 \in { "c1", "c2", "c3" } |->
|
||||
localClock[p$30] + t$18 - realTime
|
||||
])
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>
|
||||
/\ <<
|
||||
msgsPropose, msgsPrevote, msgsPrecommit, evidence, proposalReceptionTime
|
||||
>>'
|
||||
= <<
|
||||
msgsPropose, msgsPrevote, msgsPrecommit, evidence, proposalReceptionTime
|
||||
>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ action' = "AdvanceRealTime")
|
||||
\/ (~TRUE
|
||||
/\ action' = "FaultyBroadcast"
|
||||
/\ (\E r$49 \in 0 .. 3:
|
||||
(\E msgs$4 \in SUBSET ([type: {"PROPOSAL"},
|
||||
src: {"f4"},
|
||||
round: {r$49},
|
||||
proposal: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3),
|
||||
validRound: 0 .. 3 \union {(-1)}]):
|
||||
msgsPropose'
|
||||
= [
|
||||
msgsPropose EXCEPT
|
||||
![r$49] = msgsPropose[r$49] \union msgs$4
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))
|
||||
\/ (\E msgs$5 \in SUBSET ([type: {"PREVOTE"},
|
||||
src: {"f4"},
|
||||
round: {r$49},
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]):
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r$49] = msgsPrevote[r$49] \union msgs$5
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))
|
||||
\/ (\E msgs$6 \in SUBSET ([type: {"PRECOMMIT"},
|
||||
src: {"f4"},
|
||||
round: {r$49},
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]):
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![r$49] = msgsPrecommit[r$49] \union msgs$6
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))))
|
||||
\/ ((\A p$31 \in { "c1", "c2", "c3" }:
|
||||
\A q$9 \in { "c1", "c2", "c3" }:
|
||||
p$31 /= q$9
|
||||
=> (localClock[p$31] >= localClock[q$9]
|
||||
/\ localClock[p$31] - localClock[q$9] < 2)
|
||||
\/ (localClock[p$31] < localClock[q$9]
|
||||
/\ localClock[q$9] - localClock[p$31] < 2))
|
||||
/\ (\E p$17 \in { "c1", "c2", "c3" }:
|
||||
LET (*@type: (() => Int); *) r_si_50 == round[p$17] IN
|
||||
p$17 = Proposer[(r_si_50)]
|
||||
/\ step[p$17] = "PROPOSE"
|
||||
/\ (\A m$32 \in msgsPropose[(r_si_50)]: m$32["src"] /= p$17)
|
||||
/\ (\E v$19 \in { "v0", "v1" }:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
proposal_si_3 ==
|
||||
IF validValue[p$17] /= <<"None", (-1), (-1)>>
|
||||
THEN validValue[p$17]
|
||||
ELSE <<v$19, localClock[p$17], (r_si_50)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
newMsg_si_18 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> p$17,
|
||||
round |-> r_si_50,
|
||||
proposal |-> proposal_si_3,
|
||||
validRound |-> validRound[p$17]]
|
||||
IN
|
||||
msgsPropose'
|
||||
= [
|
||||
msgsPropose EXCEPT
|
||||
![r_si_50] =
|
||||
msgsPropose[(r_si_50)] \union {(newMsg_si_18)}
|
||||
])
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>)
|
||||
/\ (msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "InsertProposal"
|
||||
\/ (\E v$20 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$19 \in 0 .. 7:
|
||||
LET (*@type: (() => Int); *) r_si_51 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_14 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[round[p$17]],
|
||||
round |-> round[p$17],
|
||||
proposal |-> <<v$20, t$19, (r_si_51)>>,
|
||||
validRound |-> -1]
|
||||
IN
|
||||
msg_si_14 \in msgsPropose[round[p$17]]
|
||||
/\ proposalReceptionTime[(r_si_51), p$17] = -1
|
||||
/\ proposalReceptionTime'
|
||||
= [
|
||||
proposalReceptionTime EXCEPT
|
||||
![<<(r_si_51), p$17>>] = localClock[p$17]
|
||||
]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "ReceiveProposal")
|
||||
\/ (\E v$21 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$20 \in 0 .. 7:
|
||||
LET (*@type: (() => Int); *) r_si_52 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_15 == <<v$21, t$20, (r_si_52)>>
|
||||
IN
|
||||
step[p$17] = "PROPOSE"
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_15 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_52)],
|
||||
round |-> r_si_52,
|
||||
proposal |-> prop_si_15,
|
||||
validRound |-> -1]
|
||||
IN
|
||||
evidence' = {(msg_si_15)} \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
mid_si_5 ==
|
||||
IF (proposalReceptionTime[(r_si_52), p$17] >= t$20 - 2
|
||||
/\ proposalReceptionTime[(r_si_52), p$17]
|
||||
<= (t$20 + 2) + 2)
|
||||
/\ prop_si_15 \in { "v0", "v1" } \X (2 .. 7) \X (0 .. 3)
|
||||
/\ (lockedRound[p$17] = -1 \/ lockedValue[p$17] = v$21)
|
||||
THEN prop_si_15
|
||||
ELSE <<"None", (-1), (-1)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_19 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> r_si_52,
|
||||
id |-> mid_si_5]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r_si_52] =
|
||||
msgsPrevote[(r_si_52)] \union {(newMsg_si_19)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInPropose")
|
||||
\/ (\E v$22 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$21 \in 0 .. 7:
|
||||
\E vr$7 \in 0 .. 3:
|
||||
\E pr$9 \in 0 .. 3:
|
||||
LET (*@type: (() => Int); *) r_si_53 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_16 == <<v$22, t$21, pr$9>>
|
||||
IN
|
||||
((step[p$17] = "PROPOSE" /\ 0 <= vr$7) /\ vr$7 < r_si_53)
|
||||
/\ pr$9 <= vr$7
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_16 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_53)],
|
||||
round |-> r_si_53,
|
||||
proposal |-> prop_si_16,
|
||||
validRound |-> vr$7]
|
||||
IN
|
||||
msg_si_16 \in msgsPropose[(r_si_53)]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_9 ==
|
||||
{ m$33 \in msgsPrevote[vr$7]: m$33["id"] = prop_si_16 }
|
||||
IN
|
||||
Cardinality((PV_si_9)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_9 \union {(msg_si_16)}) \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
mid_si_6 ==
|
||||
IF prop_si_16 \in { "v0", "v1" } \X (2 .. 7) \X (0 .. 3)
|
||||
/\ (lockedRound[p$17] <= vr$7
|
||||
\/ lockedValue[p$17] = v$22)
|
||||
THEN prop_si_16
|
||||
ELSE <<"None", (-1), (-1)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_20 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> r_si_53,
|
||||
id |-> mid_si_6]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r_si_53] =
|
||||
msgsPrevote[(r_si_53)] \union {(newMsg_si_20)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInProposeAndPrevote")
|
||||
\/ (step[p$17] = "PREVOTE"
|
||||
/\ (\E MyEvidence$7 \in SUBSET (msgsPrevote[round[p$17]]):
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Voters_si_3 == { m$34["src"]: m$34 \in MyEvidence$7 }
|
||||
IN
|
||||
Cardinality((Voters_si_3)) >= 2 * 1 + 1
|
||||
/\ evidence' = MyEvidence$7 \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_21 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrecommit[round[p$17]] \union {(newMsg_si_21)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponQuorumOfPrevotesAny"))
|
||||
\/ (\E v$23 \in { "v0", "v1" }:
|
||||
\E t$22 \in 0 .. 7:
|
||||
\E vr$8 \in 0 .. 3 \union {(-1)}:
|
||||
LET (*@type: (() => Int); *) r_si_54 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_17 == <<v$23, t$22, (r_si_54)>>
|
||||
IN
|
||||
step[p$17] \in { "PREVOTE", "PRECOMMIT" }
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_17 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_54)],
|
||||
round |-> r_si_54,
|
||||
proposal |-> prop_si_17,
|
||||
validRound |-> vr$8]
|
||||
IN
|
||||
msg_si_17 \in msgsPropose[(r_si_54)]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_10 ==
|
||||
{
|
||||
m$35 \in msgsPrevote[(r_si_54)]:
|
||||
m$35["id"] = prop_si_17
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_10)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_10 \union {(msg_si_17)}) \union evidence
|
||||
/\ (IF step[p$17] = "PREVOTE"
|
||||
THEN lockedValue' = [ lockedValue EXCEPT ![p$17] = v$23 ]
|
||||
/\ lockedRound' = [ lockedRound EXCEPT ![p$17] = r_si_54 ]
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_22 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> r_si_54,
|
||||
id |-> prop_si_17]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![r_si_54] =
|
||||
msgsPrecommit[(r_si_54)] \union {(newMsg_si_22)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
ELSE lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ step' := step)
|
||||
/\ validValue' = [ validValue EXCEPT ![p$17] = prop_si_17 ]
|
||||
/\ validRound' = [ validRound EXCEPT ![p$17] = r_si_54 ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round /\ decision' := decision)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInPrevoteOrCommitAndPrevote")
|
||||
\/ ((\E MyEvidence$8 \in SUBSET (msgsPrecommit[round[p$17]]):
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Committers_si_3 == { m$36["src"]: m$36 \in MyEvidence$8 }
|
||||
IN
|
||||
Cardinality((Committers_si_3)) >= 2 * 1 + 1
|
||||
/\ evidence' = MyEvidence$8 \union evidence
|
||||
/\ round[p$17] + 1 \in 0 .. 3
|
||||
/\ (step[p$17] /= "DECIDED"
|
||||
/\ round' = [ round EXCEPT ![p$17] = round[p$17] + 1 ]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PROPOSE" ]
|
||||
/\ beginRound'
|
||||
= [
|
||||
beginRound EXCEPT
|
||||
![<<(round[p$17] + 1), p$17>>] = localClock[p$17]
|
||||
])
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ (decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponQuorumOfPrecommitsAny"))
|
||||
\/ (decision[p$17] = <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
/\ (\E v$24 \in { "v0", "v1" }:
|
||||
\E t$23 \in 0 .. 7:
|
||||
\E r$55 \in 0 .. 3:
|
||||
\E pr$10 \in 0 .. 3:
|
||||
\E vr$9 \in 0 .. 3 \union {(-1)}:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_18 == <<v$24, t$23, pr$10>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_18 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[r$55],
|
||||
round |-> r$55,
|
||||
proposal |-> prop_si_18,
|
||||
validRound |-> vr$9]
|
||||
IN
|
||||
msg_si_18 \in msgsPropose[r$55]
|
||||
/\ proposalReceptionTime[r$55, p$17] /= -1
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_11 ==
|
||||
{
|
||||
m$37 \in msgsPrecommit[r$55]:
|
||||
m$37["id"] = prop_si_18
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_11)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_11 \union {(msg_si_18)}) \union evidence
|
||||
/\ decision'
|
||||
= [
|
||||
decision EXCEPT
|
||||
![p$17] = <<(prop_si_18), r$55>>
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "DECIDED" ]
|
||||
/\ <<localClock, realTime>>'
|
||||
= <<localClock, realTime>>
|
||||
/\ (round' := round
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "UponProposalInPrecommitNoDecision"))
|
||||
\/ (step[p$17] = "PROPOSE"
|
||||
/\ p$17 /= Proposer[round[p$17]]
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_23 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrevote[round[p$17]] \union {(newMsg_si_23)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnTimeoutPropose")
|
||||
\/ (step[p$17] = "PREVOTE"
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_12 ==
|
||||
{
|
||||
m$38 \in msgsPrevote[round[p$17]]:
|
||||
m$38["id"] = <<"None", (-1), (-1)>>
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_12)) >= 2 * 1 + 1
|
||||
/\ evidence' = PV_si_12 \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_24 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrecommit[round[p$17]] \union {(newMsg_si_24)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnQuorumOfNilPrevotes")
|
||||
\/ (\E r$56 \in 0 .. 3:
|
||||
r$56 > round[p$17]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]));
|
||||
*)
|
||||
RoundMsgs_si_3 ==
|
||||
(msgsPropose[r$56] \union msgsPrevote[r$56])
|
||||
\union msgsPrecommit[r$56]
|
||||
IN
|
||||
\E MyEvidence$9 \in SUBSET RoundMsgs_si_3:
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Faster_si_3 == { m$39["src"]: m$39 \in MyEvidence$9 }
|
||||
IN
|
||||
Cardinality((Faster_si_3)) >= 1 + 1
|
||||
/\ evidence' = MyEvidence$9 \union evidence
|
||||
/\ (step[p$17] /= "DECIDED"
|
||||
/\ round' = [ round EXCEPT ![p$17] = r$56 ]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PROPOSE" ]
|
||||
/\ beginRound'
|
||||
= [
|
||||
beginRound EXCEPT
|
||||
![<<r$56, p$17>>] = localClock[p$17]
|
||||
])
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ (decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnRoundCatchup")))
|
||||
|
||||
================================================================================
|
||||
+59659
File diff suppressed because it is too large
Load Diff
+955
@@ -0,0 +1,955 @@
|
||||
--------------------------- MODULE 05_OutPrimingPass ---------------------------
|
||||
|
||||
EXTENDS Integers, Sequences, FiniteSets, TLC, Apalache
|
||||
|
||||
CONSTANT
|
||||
(*
|
||||
@type: (Int -> Str);
|
||||
*)
|
||||
Proposer
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> <<<<Str, Int, Int>>, Int>>);
|
||||
*)
|
||||
decision
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
msgsPrecommit
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (<<Int, Str>> -> Int);
|
||||
*)
|
||||
beginRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
msgsPrevote
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Str;
|
||||
*)
|
||||
action
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
lockedRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Int -> Set([proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]));
|
||||
*)
|
||||
msgsPropose
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
validRound
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Str);
|
||||
*)
|
||||
step
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Str);
|
||||
*)
|
||||
lockedValue
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> <<Str, Int, Int>>);
|
||||
*)
|
||||
validValue
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Int;
|
||||
*)
|
||||
realTime
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
round
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: Set([id: <<Str, Int, Int>>, proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
evidence
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (<<Int, Str>> -> Int);
|
||||
*)
|
||||
proposalReceptionTime
|
||||
|
||||
VARIABLE
|
||||
(*
|
||||
@type: (Str -> Int);
|
||||
*)
|
||||
localClock
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
CInit == Proposer \in [(0 .. 3) -> ({ "c1", "c2", "c3" } \union {"f4"})]
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Inv ==
|
||||
(\A p$22 \in { "c1", "c2", "c3" }:
|
||||
\A q$6 \in { "c1", "c2", "c3" }:
|
||||
decision[p$22] /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
/\ decision[q$6] /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
=> (\E v$10 \in { "v0", "v1" }:
|
||||
\E t$10 \in 0 .. 7:
|
||||
\E pr$5 \in 0 .. 3:
|
||||
\E r1$3 \in 0 .. 3:
|
||||
\E r2$3 \in 0 .. 3:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_8 == <<v$10, t$10, pr$5>>
|
||||
IN
|
||||
decision[p$22] = <<(prop_si_8), r1$3>>
|
||||
/\ decision[q$6] = <<(prop_si_8), r2$3>>))
|
||||
/\ (\A p$23 \in { "c1", "c2", "c3" }:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_9 == decision[p$23][1]
|
||||
IN
|
||||
prop_si_9 /= <<"None", (-1), (-1)>> => (prop_si_9)[1] \in { "v0", "v1" })
|
||||
/\ (\A p$24 \in { "c1", "c2", "c3" }:
|
||||
\E v$11 \in { "v0", "v1" }:
|
||||
\E t$11 \in 0 .. 7:
|
||||
\E pr$6 \in 0 .. 3:
|
||||
\E dr$2 \in 0 .. 3:
|
||||
decision[p$24] = <<<<v$11, t$11, pr$6>>, dr$2>>
|
||||
=> (\E q$7 \in { "c1", "c2", "c3" }:
|
||||
LET (*
|
||||
@type: (() => Int);
|
||||
*)
|
||||
propRecvTime_si_2 == proposalReceptionTime[pr$6, q$7]
|
||||
IN
|
||||
beginRound[pr$6, q$7] <= propRecvTime_si_2
|
||||
/\ beginRound[(pr$6 + 1), q$7] >= propRecvTime_si_2
|
||||
/\ (propRecvTime_si_2 >= t$11 - 2
|
||||
/\ propRecvTime_si_2 <= (t$11 + 2) + 2)))
|
||||
/\ (\A r$31 \in 0 .. 3 \ {3}:
|
||||
\A v$12 \in { "v0", "v1" }:
|
||||
LET (*@type: (() => Str); *) p_si_25 == Proposer[r$31] IN
|
||||
p_si_25 \in { "c1", "c2", "c3" }
|
||||
=> (\E t$12 \in 0 .. 7:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_10 == <<v$12, t$12, r$31>>
|
||||
IN
|
||||
(\E msg$8 \in msgsPropose[r$31]:
|
||||
msg$8["proposal"] = prop_si_10
|
||||
/\ msg$8["src"] = p_si_25
|
||||
/\ msg$8["validRound"] = -1)
|
||||
/\ LET (*@type: (() => Int); *) tOffset_si_2 == (t$12 + 2) + 2 IN
|
||||
[
|
||||
r$32 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Min2_si_4(a_si_7, b_si_7) == IF a$7 <= b$7 THEN a$7 ELSE b$7
|
||||
IN
|
||||
Min2$4, 7, {
|
||||
beginRound[r$32, p$26]:
|
||||
p$26 \in { "c1", "c2", "c3" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
<= t$12
|
||||
/\ t$12
|
||||
<= [
|
||||
r$33 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Max2_si_4(a_si_8, b_si_8) ==
|
||||
IF a$8 >= b$8 THEN a$8 ELSE b$8
|
||||
IN
|
||||
Max2$4, (-1), {
|
||||
beginRound[r$33, p$27]:
|
||||
p$27 \in { "c1", "c2", "c3" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
/\ [
|
||||
r$34 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Max2_si_5(a_si_9, b_si_9) == IF a$9 >= b$9 THEN a$9 ELSE b$9
|
||||
IN
|
||||
Max2$5, (-1), {
|
||||
beginRound[r$34, p$28]:
|
||||
p$28 \in { "c1", "c2", "c3" }
|
||||
})
|
||||
][
|
||||
r$31
|
||||
]
|
||||
<= tOffset_si_2
|
||||
/\ tOffset_si_2
|
||||
<= [
|
||||
r$35 \in 0 .. 3 |->
|
||||
ApaFoldSet(LET (*
|
||||
@type: ((Int, Int) => Int);
|
||||
*)
|
||||
Min2_si_5(a_si_10, b_si_10) ==
|
||||
IF a$10 <= b$10 THEN a$10 ELSE b$10
|
||||
IN
|
||||
Min2$5, 7, {
|
||||
beginRound[r$35, p$29]:
|
||||
p$29 \in { "c1", "c2", "c3" }
|
||||
})
|
||||
][
|
||||
(r$31 + 1)
|
||||
]
|
||||
=> (\A q$8 \in { "c1", "c2", "c3" }:
|
||||
LET (*
|
||||
@type: (() => <<<<Str, Int, Int>>, Int>>);
|
||||
*)
|
||||
dq_si_2 == decision[q$8]
|
||||
IN
|
||||
dq_si_2 /= <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
=> (dq_si_2)[1] = prop_si_10)))
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Init ==
|
||||
round = [ p$10 \in { "c1", "c2", "c3" } |-> 0 ]
|
||||
/\ localClock \in [{ "c1", "c2", "c3" } -> (2 .. 2 + 2)]
|
||||
/\ realTime = 0
|
||||
/\ step = [ p$11 \in { "c1", "c2", "c3" } |-> "PROPOSE" ]
|
||||
/\ decision
|
||||
= [ p$12 \in { "c1", "c2", "c3" } |-> <<<<"None", (-1), (-1)>>, (-1)>> ]
|
||||
/\ lockedValue = [ p$13 \in { "c1", "c2", "c3" } |-> "None" ]
|
||||
/\ lockedRound = [ p$14 \in { "c1", "c2", "c3" } |-> -1 ]
|
||||
/\ validValue = [ p$15 \in { "c1", "c2", "c3" } |-> <<"None", (-1), (-1)>> ]
|
||||
/\ validRound = [ p$16 \in { "c1", "c2", "c3" } |-> -1 ]
|
||||
/\ ((TRUE
|
||||
/\ (msgsPropose \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrevote \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrecommit \in [(0 .. 3) -> Gen(5)]
|
||||
/\ ((\A r$43 \in 0 .. 3:
|
||||
msgsPropose[r$43]
|
||||
\subseteq [type: {"PROPOSAL"},
|
||||
src: {"f4"},
|
||||
round: 0 .. 3,
|
||||
proposal:
|
||||
({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3),
|
||||
validRound: 0 .. 3 \union {(-1)}]
|
||||
/\ (\A m$29 \in msgsPropose[r$43]: r$43 = m$29["round"])))
|
||||
/\ ((\A r$44 \in 0 .. 3:
|
||||
msgsPrevote[r$44]
|
||||
\subseteq [type: {"PREVOTE"},
|
||||
src: {"f4"},
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$30 \in msgsPrevote[r$44]: r$44 = m$30["round"])))
|
||||
/\ ((\A r$45 \in 0 .. 3:
|
||||
msgsPrecommit[r$45]
|
||||
\subseteq [type: {"PRECOMMIT"},
|
||||
src: {"f4"},
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$31 \in msgsPrecommit[r$45]: r$45 = m$31["round"])))))
|
||||
\/ (~TRUE
|
||||
/\ msgsPropose = [ r$46 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrevote = [ r$47 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrecommit = [ r$48 \in 0 .. 3 |-> {} ]))
|
||||
/\ proposalReceptionTime
|
||||
= [ r_p$1 \in (0 .. 3) \X { "c1", "c2", "c3" } |-> -1 ]
|
||||
/\ evidence = {}
|
||||
/\ action = "Init"
|
||||
/\ beginRound
|
||||
= [
|
||||
r_c$1 \in (0 .. 3) \X { "c1", "c2", "c3" } |->
|
||||
IF r_c$1[1] = 0 THEN localClock[r_c$1[2]] ELSE 7
|
||||
]
|
||||
|
||||
(*
|
||||
@type: (() => Bool);
|
||||
*)
|
||||
Next ==
|
||||
(realTime < 7
|
||||
/\ (\E t$18 \in 0 .. 7:
|
||||
t$18 > realTime
|
||||
/\ realTime' = t$18
|
||||
/\ localClock'
|
||||
= [
|
||||
p$30 \in { "c1", "c2", "c3" } |->
|
||||
localClock[p$30] + t$18 - realTime
|
||||
])
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>
|
||||
/\ <<
|
||||
msgsPropose, msgsPrevote, msgsPrecommit, evidence, proposalReceptionTime
|
||||
>>'
|
||||
= <<
|
||||
msgsPropose, msgsPrevote, msgsPrecommit, evidence, proposalReceptionTime
|
||||
>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ action' = "AdvanceRealTime")
|
||||
\/ (~TRUE
|
||||
/\ action' = "FaultyBroadcast"
|
||||
/\ (\E r$49 \in 0 .. 3:
|
||||
(\E msgs$4 \in SUBSET ([type: {"PROPOSAL"},
|
||||
src: {"f4"},
|
||||
round: {r$49},
|
||||
proposal: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3),
|
||||
validRound: 0 .. 3 \union {(-1)}]):
|
||||
msgsPropose'
|
||||
= [
|
||||
msgsPropose EXCEPT
|
||||
![r$49] = msgsPropose[r$49] \union msgs$4
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))
|
||||
\/ (\E msgs$5 \in SUBSET ([type: {"PREVOTE"},
|
||||
src: {"f4"},
|
||||
round: {r$49},
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]):
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r$49] = msgsPrevote[r$49] \union msgs$5
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))
|
||||
\/ (\E msgs$6 \in SUBSET ([type: {"PRECOMMIT"},
|
||||
src: {"f4"},
|
||||
round: {r$49},
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]):
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![r$49] = msgsPrecommit[r$49] \union msgs$6
|
||||
]
|
||||
/\ (<<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime))))
|
||||
\/ ((\A p$31 \in { "c1", "c2", "c3" }:
|
||||
\A q$9 \in { "c1", "c2", "c3" }:
|
||||
p$31 /= q$9
|
||||
=> (localClock[p$31] >= localClock[q$9]
|
||||
/\ localClock[p$31] - localClock[q$9] < 2)
|
||||
\/ (localClock[p$31] < localClock[q$9]
|
||||
/\ localClock[q$9] - localClock[p$31] < 2))
|
||||
/\ (\E p$17 \in { "c1", "c2", "c3" }:
|
||||
LET (*@type: (() => Int); *) r_si_50 == round[p$17] IN
|
||||
p$17 = Proposer[(r_si_50)]
|
||||
/\ step[p$17] = "PROPOSE"
|
||||
/\ (\A m$32 \in msgsPropose[(r_si_50)]: m$32["src"] /= p$17)
|
||||
/\ (\E v$19 \in { "v0", "v1" }:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
proposal_si_3 ==
|
||||
IF validValue[p$17] /= <<"None", (-1), (-1)>>
|
||||
THEN validValue[p$17]
|
||||
ELSE <<v$19, localClock[p$17], (r_si_50)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
newMsg_si_18 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> p$17,
|
||||
round |-> r_si_50,
|
||||
proposal |-> proposal_si_3,
|
||||
validRound |-> validRound[p$17]]
|
||||
IN
|
||||
msgsPropose'
|
||||
= [
|
||||
msgsPropose EXCEPT
|
||||
![r_si_50] =
|
||||
msgsPropose[(r_si_50)] \union {(newMsg_si_18)}
|
||||
])
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue, validRound
|
||||
>>)
|
||||
/\ (msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "InsertProposal"
|
||||
\/ (\E v$20 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$19 \in 0 .. 7:
|
||||
LET (*@type: (() => Int); *) r_si_51 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_14 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[round[p$17]],
|
||||
round |-> round[p$17],
|
||||
proposal |-> <<v$20, t$19, (r_si_51)>>,
|
||||
validRound |-> -1]
|
||||
IN
|
||||
msg_si_14 \in msgsPropose[round[p$17]]
|
||||
/\ proposalReceptionTime[(r_si_51), p$17] = -1
|
||||
/\ proposalReceptionTime'
|
||||
= [
|
||||
proposalReceptionTime EXCEPT
|
||||
![<<(r_si_51), p$17>>] = localClock[p$17]
|
||||
]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>'
|
||||
= <<
|
||||
round, step, decision, lockedValue, lockedRound, validValue,
|
||||
validRound
|
||||
>>)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "ReceiveProposal")
|
||||
\/ (\E v$21 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$20 \in 0 .. 7:
|
||||
LET (*@type: (() => Int); *) r_si_52 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_15 == <<v$21, t$20, (r_si_52)>>
|
||||
IN
|
||||
step[p$17] = "PROPOSE"
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_15 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_52)],
|
||||
round |-> r_si_52,
|
||||
proposal |-> prop_si_15,
|
||||
validRound |-> -1]
|
||||
IN
|
||||
evidence' = {(msg_si_15)} \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
mid_si_5 ==
|
||||
IF (proposalReceptionTime[(r_si_52), p$17] >= t$20 - 2
|
||||
/\ proposalReceptionTime[(r_si_52), p$17]
|
||||
<= (t$20 + 2) + 2)
|
||||
/\ prop_si_15 \in { "v0", "v1" } \X (2 .. 7) \X (0 .. 3)
|
||||
/\ (lockedRound[p$17] = -1 \/ lockedValue[p$17] = v$21)
|
||||
THEN prop_si_15
|
||||
ELSE <<"None", (-1), (-1)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_19 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> r_si_52,
|
||||
id |-> mid_si_5]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r_si_52] =
|
||||
msgsPrevote[(r_si_52)] \union {(newMsg_si_19)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInPropose")
|
||||
\/ (\E v$22 \in { "v0", "v1" } \union {"v2"}:
|
||||
\E t$21 \in 0 .. 7:
|
||||
\E vr$7 \in 0 .. 3:
|
||||
\E pr$9 \in 0 .. 3:
|
||||
LET (*@type: (() => Int); *) r_si_53 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_16 == <<v$22, t$21, pr$9>>
|
||||
IN
|
||||
((step[p$17] = "PROPOSE" /\ 0 <= vr$7) /\ vr$7 < r_si_53)
|
||||
/\ pr$9 <= vr$7
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_16 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_53)],
|
||||
round |-> r_si_53,
|
||||
proposal |-> prop_si_16,
|
||||
validRound |-> vr$7]
|
||||
IN
|
||||
msg_si_16 \in msgsPropose[(r_si_53)]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_9 ==
|
||||
{ m$33 \in msgsPrevote[vr$7]: m$33["id"] = prop_si_16 }
|
||||
IN
|
||||
Cardinality((PV_si_9)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_9 \union {(msg_si_16)}) \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
mid_si_6 ==
|
||||
IF prop_si_16 \in { "v0", "v1" } \X (2 .. 7) \X (0 .. 3)
|
||||
/\ (lockedRound[p$17] <= vr$7
|
||||
\/ lockedValue[p$17] = v$22)
|
||||
THEN prop_si_16
|
||||
ELSE <<"None", (-1), (-1)>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_20 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> r_si_53,
|
||||
id |-> mid_si_6]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![r_si_53] =
|
||||
msgsPrevote[(r_si_53)] \union {(newMsg_si_20)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInProposeAndPrevote")
|
||||
\/ (step[p$17] = "PREVOTE"
|
||||
/\ (\E MyEvidence$7 \in SUBSET (msgsPrevote[round[p$17]]):
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Voters_si_3 == { m$34["src"]: m$34 \in MyEvidence$7 }
|
||||
IN
|
||||
Cardinality((Voters_si_3)) >= 2 * 1 + 1
|
||||
/\ evidence' = MyEvidence$7 \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_21 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrecommit[round[p$17]] \union {(newMsg_si_21)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponQuorumOfPrevotesAny"))
|
||||
\/ (\E v$23 \in { "v0", "v1" }:
|
||||
\E t$22 \in 0 .. 7:
|
||||
\E vr$8 \in 0 .. 3 \union {(-1)}:
|
||||
LET (*@type: (() => Int); *) r_si_54 == round[p$17] IN
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_17 == <<v$23, t$22, (r_si_54)>>
|
||||
IN
|
||||
step[p$17] \in { "PREVOTE", "PRECOMMIT" }
|
||||
/\ LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_17 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[(r_si_54)],
|
||||
round |-> r_si_54,
|
||||
proposal |-> prop_si_17,
|
||||
validRound |-> vr$8]
|
||||
IN
|
||||
msg_si_17 \in msgsPropose[(r_si_54)]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_10 ==
|
||||
{
|
||||
m$35 \in msgsPrevote[(r_si_54)]:
|
||||
m$35["id"] = prop_si_17
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_10)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_10 \union {(msg_si_17)}) \union evidence
|
||||
/\ (IF step[p$17] = "PREVOTE"
|
||||
THEN lockedValue' = [ lockedValue EXCEPT ![p$17] = v$23 ]
|
||||
/\ lockedRound' = [ lockedRound EXCEPT ![p$17] = r_si_54 ]
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_22 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> r_si_54,
|
||||
id |-> prop_si_17]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![r_si_54] =
|
||||
msgsPrecommit[(r_si_54)] \union {(newMsg_si_22)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
ELSE lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ step' := step)
|
||||
/\ validValue' = [ validValue EXCEPT ![p$17] = prop_si_17 ]
|
||||
/\ validRound' = [ validRound EXCEPT ![p$17] = r_si_54 ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round /\ decision' := decision)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponProposalInPrevoteOrCommitAndPrevote")
|
||||
\/ ((\E MyEvidence$8 \in SUBSET (msgsPrecommit[round[p$17]]):
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Committers_si_3 == { m$36["src"]: m$36 \in MyEvidence$8 }
|
||||
IN
|
||||
Cardinality((Committers_si_3)) >= 2 * 1 + 1
|
||||
/\ evidence' = MyEvidence$8 \union evidence
|
||||
/\ round[p$17] + 1 \in 0 .. 3
|
||||
/\ (step[p$17] /= "DECIDED"
|
||||
/\ round' = [ round EXCEPT ![p$17] = round[p$17] + 1 ]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PROPOSE" ]
|
||||
/\ beginRound'
|
||||
= [
|
||||
beginRound EXCEPT
|
||||
![<<(round[p$17] + 1), p$17>>] = localClock[p$17]
|
||||
])
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ (decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "UponQuorumOfPrecommitsAny"))
|
||||
\/ (decision[p$17] = <<<<"None", (-1), (-1)>>, (-1)>>
|
||||
/\ (\E v$24 \in { "v0", "v1" }:
|
||||
\E t$23 \in 0 .. 7:
|
||||
\E r$55 \in 0 .. 3:
|
||||
\E pr$10 \in 0 .. 3:
|
||||
\E vr$9 \in 0 .. 3 \union {(-1)}:
|
||||
LET (*
|
||||
@type: (() => <<Str, Int, Int>>);
|
||||
*)
|
||||
prop_si_18 == <<v$24, t$23, pr$10>>
|
||||
IN
|
||||
LET (*
|
||||
@type: (() => [proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]);
|
||||
*)
|
||||
msg_si_18 ==
|
||||
[type |-> "PROPOSAL",
|
||||
src |-> Proposer[r$55],
|
||||
round |-> r$55,
|
||||
proposal |-> prop_si_18,
|
||||
validRound |-> vr$9]
|
||||
IN
|
||||
msg_si_18 \in msgsPropose[r$55]
|
||||
/\ proposalReceptionTime[r$55, p$17] /= -1
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_11 ==
|
||||
{
|
||||
m$37 \in msgsPrecommit[r$55]:
|
||||
m$37["id"] = prop_si_18
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_11)) >= 2 * 1 + 1
|
||||
/\ evidence'
|
||||
= (PV_si_11 \union {(msg_si_18)}) \union evidence
|
||||
/\ decision'
|
||||
= [
|
||||
decision EXCEPT
|
||||
![p$17] = <<(prop_si_18), r$55>>
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "DECIDED" ]
|
||||
/\ <<localClock, realTime>>'
|
||||
= <<localClock, realTime>>
|
||||
/\ (round' := round
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ beginRound' := beginRound
|
||||
/\ action' = "UponProposalInPrecommitNoDecision"))
|
||||
\/ (step[p$17] = "PROPOSE"
|
||||
/\ p$17 /= Proposer[round[p$17]]
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_23 ==
|
||||
[type |-> "PREVOTE",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrevote'
|
||||
= [
|
||||
msgsPrevote EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrevote[round[p$17]] \union {(newMsg_si_23)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PREVOTE" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ evidence' := evidence
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnTimeoutPropose")
|
||||
\/ (step[p$17] = "PREVOTE"
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]));
|
||||
*)
|
||||
PV_si_12 ==
|
||||
{
|
||||
m$38 \in msgsPrevote[round[p$17]]:
|
||||
m$38["id"] = <<"None", (-1), (-1)>>
|
||||
}
|
||||
IN
|
||||
Cardinality((PV_si_12)) >= 2 * 1 + 1
|
||||
/\ evidence' = PV_si_12 \union evidence
|
||||
/\ LET (*
|
||||
@type: (() => [id: <<Str, Int, Int>>, round: Int, src: Str, type: Str]);
|
||||
*)
|
||||
newMsg_si_24 ==
|
||||
[type |-> "PRECOMMIT",
|
||||
src |-> p$17,
|
||||
round |-> round[p$17],
|
||||
id |-> <<"None", (-1), (-1)>>]
|
||||
IN
|
||||
msgsPrecommit'
|
||||
= [
|
||||
msgsPrecommit EXCEPT
|
||||
![round[p$17]] =
|
||||
msgsPrecommit[round[p$17]] \union {(newMsg_si_24)}
|
||||
]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PRECOMMIT" ]
|
||||
/\ (<<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ beginRound' := beginRound)
|
||||
/\ (round' := round
|
||||
/\ decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnQuorumOfNilPrevotes")
|
||||
\/ (\E r$56 \in 0 .. 3:
|
||||
r$56 > round[p$17]
|
||||
/\ LET (*
|
||||
@type: (() => Set([id: <<Str, Int, Int>>, proposal: <<Str, Int, Int>>, round: Int, src: Str, type: Str, validRound: Int]));
|
||||
*)
|
||||
RoundMsgs_si_3 ==
|
||||
(msgsPropose[r$56] \union msgsPrevote[r$56])
|
||||
\union msgsPrecommit[r$56]
|
||||
IN
|
||||
\E MyEvidence$9 \in SUBSET RoundMsgs_si_3:
|
||||
LET (*
|
||||
@type: (() => Set(Str));
|
||||
*)
|
||||
Faster_si_3 == { m$39["src"]: m$39 \in MyEvidence$9 }
|
||||
IN
|
||||
Cardinality((Faster_si_3)) >= 1 + 1
|
||||
/\ evidence' = MyEvidence$9 \union evidence
|
||||
/\ (step[p$17] /= "DECIDED"
|
||||
/\ round' = [ round EXCEPT ![p$17] = r$56 ]
|
||||
/\ step' = [ step EXCEPT ![p$17] = "PROPOSE" ]
|
||||
/\ beginRound'
|
||||
= [
|
||||
beginRound EXCEPT
|
||||
![<<r$56, p$17>>] = localClock[p$17]
|
||||
])
|
||||
/\ <<localClock, realTime>>' = <<localClock, realTime>>
|
||||
/\ (decision' := decision
|
||||
/\ lockedValue' := lockedValue
|
||||
/\ lockedRound' := lockedRound
|
||||
/\ validValue' := validValue
|
||||
/\ validRound' := validRound)
|
||||
/\ (msgsPropose' := msgsPropose
|
||||
/\ msgsPrevote' := msgsPrevote
|
||||
/\ msgsPrecommit' := msgsPrecommit
|
||||
/\ proposalReceptionTime' := proposalReceptionTime)
|
||||
/\ action' = "OnRoundCatchup")))
|
||||
|
||||
CInitPrimed == Proposer' \in [(0 .. 3) -> ({ "c1", "c2", "c3" } \union {"f4"})]
|
||||
|
||||
InitPrimed ==
|
||||
round' = [ p$10 \in { "c1", "c2", "c3" } |-> 0 ]
|
||||
/\ localClock' \in [{ "c1", "c2", "c3" } -> (2 .. 2 + 2)]
|
||||
/\ realTime' = 0
|
||||
/\ step' = [ p$11 \in { "c1", "c2", "c3" } |-> "PROPOSE" ]
|
||||
/\ decision'
|
||||
= [ p$12 \in { "c1", "c2", "c3" } |-> <<<<"None", (-1), (-1)>>, (-1)>> ]
|
||||
/\ lockedValue' = [ p$13 \in { "c1", "c2", "c3" } |-> "None" ]
|
||||
/\ lockedRound' = [ p$14 \in { "c1", "c2", "c3" } |-> -1 ]
|
||||
/\ validValue'
|
||||
= [ p$15 \in { "c1", "c2", "c3" } |-> <<"None", (-1), (-1)>> ]
|
||||
/\ validRound' = [ p$16 \in { "c1", "c2", "c3" } |-> -1 ]
|
||||
/\ ((TRUE
|
||||
/\ (msgsPropose' \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrevote' \in [(0 .. 3) -> Gen(5)]
|
||||
/\ msgsPrecommit' \in [(0 .. 3) -> Gen(5)]
|
||||
/\ ((\A r$43 \in 0 .. 3:
|
||||
msgsPropose'[r$43]
|
||||
\subseteq [type: {"PROPOSAL"},
|
||||
src: {"f4"},
|
||||
round: 0 .. 3,
|
||||
proposal:
|
||||
({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3),
|
||||
validRound: 0 .. 3 \union {(-1)}]
|
||||
/\ (\A m$29 \in msgsPropose'[r$43]: r$43 = m$29["round"])))
|
||||
/\ ((\A r$44 \in 0 .. 3:
|
||||
msgsPrevote'[r$44]
|
||||
\subseteq [type: {"PREVOTE"},
|
||||
src: {"f4"},
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$30 \in msgsPrevote'[r$44]: r$44 = m$30["round"])))
|
||||
/\ ((\A r$45 \in 0 .. 3:
|
||||
msgsPrecommit'[r$45]
|
||||
\subseteq [type: {"PRECOMMIT"},
|
||||
src: {"f4"},
|
||||
round: 0 .. 3,
|
||||
id: ({ "v0", "v1" } \union {"v2"}) \X (0 .. 7) \X (0 .. 3)]
|
||||
/\ (\A m$31 \in msgsPrecommit'[r$45]: r$45 = m$31["round"])))))
|
||||
\/ (~TRUE
|
||||
/\ msgsPropose' = [ r$46 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrevote' = [ r$47 \in 0 .. 3 |-> {} ]
|
||||
/\ msgsPrecommit' = [ r$48 \in 0 .. 3 |-> {} ]))
|
||||
/\ proposalReceptionTime'
|
||||
= [ r_p$1 \in (0 .. 3) \X { "c1", "c2", "c3" } |-> -1 ]
|
||||
/\ evidence' = {}
|
||||
/\ action' = "Init"
|
||||
/\ beginRound'
|
||||
= [
|
||||
r_c$1 \in (0 .. 3) \X { "c1", "c2", "c3" } |->
|
||||
IF r_c$1[1] = 0 THEN localClock'[r_c$1[2]] ELSE 7
|
||||
]
|
||||
|
||||
================================================================================
|
||||
+74883
File diff suppressed because it is too large
Load Diff
+1233
File diff suppressed because it is too large
Load Diff
+76591
File diff suppressed because it is too large
Load Diff
+1383
File diff suppressed because it is too large
Load Diff
+78731
File diff suppressed because it is too large
Load Diff
+1375
File diff suppressed because it is too large
Load Diff
+67127
File diff suppressed because it is too large
Load Diff
+1216
File diff suppressed because it is too large
Load Diff
+68197
File diff suppressed because it is too large
Load Diff
+1218
File diff suppressed because it is too large
Load Diff
+68197
File diff suppressed because it is too large
Load Diff
+1218
File diff suppressed because it is too large
Load Diff
+5
@@ -0,0 +1,5 @@
|
||||
Logging is disabled (Z3SolverContext.debug = false). Activate with --debug.
|
||||
;; sat.random_seed = 0
|
||||
;; smt.random_seed = 0
|
||||
;; fp.spacer.random_seed = 0
|
||||
;; sls.random_seed = 0
|
||||
+1
@@ -0,0 +1 @@
|
||||
check --length=8 --inv=Inv --cinit=CInit --discard-disabled=false MC_PBT_3C_1F.tla
|
||||
@@ -0,0 +1,34 @@
|
||||
Architecture: x86_64
|
||||
CPU op-mode(s): 32-bit, 64-bit
|
||||
Byte Order: Little Endian
|
||||
Address sizes: 40 bits physical, 48 bits virtual
|
||||
CPU(s): 4
|
||||
On-line CPU(s) list: 0-3
|
||||
Thread(s) per core: 1
|
||||
Core(s) per socket: 4
|
||||
Socket(s): 1
|
||||
NUMA node(s): 1
|
||||
Vendor ID: GenuineIntel
|
||||
CPU family: 6
|
||||
Model: 85
|
||||
Model name: Intel(R) Xeon(R) Gold 6248 CPU @ 2.50GHz
|
||||
Stepping: 7
|
||||
CPU MHz: 2494.140
|
||||
BogoMIPS: 4988.28
|
||||
Virtualization: VT-x
|
||||
Hypervisor vendor: KVM
|
||||
Virtualization type: full
|
||||
L1d cache: 128 KiB
|
||||
L1i cache: 128 KiB
|
||||
L2 cache: 16 MiB
|
||||
NUMA node0 CPU(s): 0-3
|
||||
Vulnerability Itlb multihit: KVM: Mitigation: Split huge pages
|
||||
Vulnerability L1tf: Not affected
|
||||
Vulnerability Mds: Not affected
|
||||
Vulnerability Meltdown: Not affected
|
||||
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
|
||||
Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
|
||||
Vulnerability Spectre v2: Mitigation; Enhanced IBRS, IBPB conditional, RSB filling
|
||||
Vulnerability Srbds: Not affected
|
||||
Vulnerability Tsx async abort: Not affected
|
||||
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb ibrs_enhanced tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase bmi1 avx2 smep bmi2 erms invpcid avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 pku ospke avx512_vnni arch_capabilities
|
||||
@@ -0,0 +1,9 @@
|
||||
# Experiment Log
|
||||
This file summarizes the history of Apalache experiments for the PBTS specification.
|
||||
|
||||
| Date | Commit | Command | Runtime [h:min:s] | Machine | Notes |
|
||||
|---|---|---|---|---|---|
|
||||
| May 11, 2022 | cd48156f662af8fc325a6478dfa34de6be0e36c8 | [run.txt](./experiment_data/May2022/MC_PBT_3C_1F.tla/run.txt) | 74:39:2 | [machine.txt](./experiment_data/May2022/machine.txt) | No invariant violation |
|
||||
| May 16, 2022 | cd48156f662af8fc325a6478dfa34de6be0e36c8 | [run.txt](./experiment_data/May2022/MC_PBT_2C_2F.tla/run.txt) | 48:31:29 | [machine.txt](./experiment_data/May2022/machine.txt) | [Counterexample](experiment_data/May2022/MC_PBT_2C_2F.tla/counterexample.tla) found (expected) |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user