-
-
Notifications
You must be signed in to change notification settings - Fork 40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
check: surprising temporal NoError result #2985
Comments
Thanks for submitting the report @lucab! I have been starring at the spec for some time, before I realized that the counter keeps incrementing. Technically, the liveness-to-safety reduction works only on finite-state systems. This explains why you were able to find a counterexample when you bounded However, there is another subtle issue at play here. It looks like the liveness reduction does not assume @p-offtermatt could you have a look? I am not really surprised about the behavior on an infinitely-increasing counter, though the example is quite simple. But I am surprised that the minimal counterexample is of length 2, when we add stuttering. Also, do you remember, why we decided not to add stuttering by default? |
You are exactly right about the incrementing counter - it is a limitation of the current implementation that to decide liveness properties, we need an execution that has a loop (as in, coming back back to a state we have already visited and thus finding an execution that can loop infinitely). For the counterexample, if I understand correctly, this is the answer: I am not sure why we did not add stuttering by default - probably just to not restrict the expressivity, although it does lead to weird situations like this. |
Right. Actually, TLC uses |
Thanks for the feedback. You touched quite a bit of topics, so I'll try to split them across different items:
|
This is true. The preprocessor of temporal properties could probably do a better job. It just follows the general algorithm. |
Yeah. This is actually a very hard problem in bounded model checking. If you are curious about it, there is a paper on reoccurence diameters. In practice, this means though that you have to use something like a napkin computation to figure out the bounds. |
@konnov thanks for the paper reference, it looks like an interesting topic, I've put that up in my reading queue! For clarity, I'm totally fine deriving an approximate bound on my own through some napkin math. I guess I'm effectively asking for a new(?) feature which somehow propagates Quint/Apalache |
System information
0.45.4 | build: 99508e4
(latest release)Description
This is a bug report forwarded from Quint: informalsystems/quint#1501
The original Quint specification was:
quint verify
(with Apalache) fails to find a counterexample fortemporalProps
.I followed @bugarela's suggestions and translated the Quint file to TLA+ then directly checked with Apalache, below is the full ouput.
Details
TLA+ specification (autogenerated by
quint compile
):Config:
Command:
Output:
I sanity-checked the TLA+ specification (after some minor fixes) with TLC and it correctly finds the counterexample:
Triage checklist (for maintainers)
The text was updated successfully, but these errors were encountered: