Adding to this reply, I think it is important to be clear about what you want to verify. TLC returns a counter-example to <>TransferComplete (or []<>TransferComplete) that shows how it is possible that the sum of balances is never 2 because at all points there is some wire transfer being transmitted. As pointed out below, you can check that this property holds, assuming that the network is periodically empty. However, perhaps the property is just too strong, and it would be more reasonable to check that every transfer is eventually performed. In order to express this, you probably want to add IDs to wire transfers in order to distinguish two transfers between the same two agents with the same amount. Finally, your fairness property is quite weak because it only assumes that some transfer will be performed as long as there is some pending transfer. This would still allow the system to never perform some specific pending transfer. Again, assuming that transfers carry a unique ID, you could write DepositWireTransfer(id) == … and assert the fairness property \A id \in ID : WF_vars(DepositWireTransfer(id)) The problem with using IDs is that you’ll have to bound the set of IDs for model checking and will then run out of IDs at some point. Finally, you use a sequence for representing the pending transfers but allow them to be performed in any order. Using a (multi-)set instead of a sequence gives you an unordered structure and may reduce the size of the state space that TLC computes. Hope this helps, Stephan
You received this message because you are subscribed to the Google Groups "tlaplus" group. To unsubscribe from this group and stop receiving emails from it, send an email to tlaplus+unsubscribe@xxxxxxxxxxxxxxxx. To view this discussion on the web visit https://groups.google.com/d/msgid/tlaplus/EC54437A-BE72-4A65-9D78-AD9EB44C0103%40gmail.com. |