-
Notifications
You must be signed in to change notification settings - Fork 9
Example for a correctness witness contains forbidden data key control
#14
Comments
This worries me now in general because when I implemented correctness witness generation in Goblint I also chose to ignore this rule and add If de facto this is common in existing verifiers, then it seems to me like the README rules should be updated to also allow that. This change wouldn't punish any existing verifiers so there should be no harm. And besides the README example, the new testing example also has this: sv-witnesses/lint/test/program/simple/simple_correct.graphml Lines 57 to 63 in e9bfcb8
|
A opinion survey in the SV-COMP meeting showed that people would mostly welcome if this were more actively enforced, i.e., the examples in this repository should be fixed (instead of changing the witness format specification).
Yeah, I just added that to get some way of testing the linter. That witness was produces with CPAchecker, which up until now (I am working on the fix currently) outputs Basically we will just omit the |
Ultimate also adds Is there a reason to remove it? It seems easier to change the README. Actually, reading the README again, it seems that changing the README is the best fix, because it is less likely to affect existing implementations. |
One argument for not allowing it is because its semantics are that parts of the state space are removed, so this can potentially be harmful if a validator then removes a branch for which there is no Another argument regarding fairness was made: it would be unfair to tools who stick to the format spec if this has disadvantages regarding validation (maybe a validator might have trouble validating a witness in case there are no I am also not really sure whether removing it from the correcntess witnesses is really the best solution, I wouldn't have done it, but the opinion poll was quite clear ( 7 to 2, not counting myself). I would have welcomed to address this next year and ignore it for now. Do you have a proposal for how the README would be changed to clarify things? Would the |
I can only say: allowing the key is not the same as requiring it. It seems to me that the README was just a typo, seeing that both Ultimate and CPAChecker generate this key. My proposal for a correction is: Change the table in section
|
I think in CPAchecker we actually use it to slice the state space when analyzing violation witnesses. If Ultimate doesn't do this for violation witnesses, how else is the state space then restricted? |
Regarding fairness, a related point I tried to make during the meeting was that verifiers can use custom data keys in witnesses to guide validators that happen to understand that custom data key. The response was negative as if that's not allowed and only the specified data keys in README should be used. Later reading the README again, I found it to contain this sentence which allows that:
Moreover, the SV-COMP FAQ seems to even encourage that:
It would be far more unfair to help some validator using a custom data key than using Sorry if this remark is going too off-topic. |
For violation: For correctness: |
@sim642 this is a very good point. We always encouraged adding custom keys -- obviously we assume a friendly verifier/validator scenario. |
Actually, this might not just affect a verifier's score on correct tasks (by having all correctness witnesses rejected by the linter) but the verifier's qualification at all. The rules for qualification state:
If a verifier cannot produce a single syntactically correct (i.e. accepted by the linter) correctness witness, because it uses |
@MartinSpiessl : We need to agree on some resolution. I say we change the README and are done with it. Do you agree? |
I carefully checked all publications as well as how witnesses were implemented by various tools in the past and now agree that this is most likely a typo/ is actually implemented this way in all tools I looked at. I just created a PR for this: #25, @danieldietsch could you have a look? |
… linter rejects it and we ignore it anyways
My opinion last week was to stick with the rules and definitions. And the definition was very clear on this. Thus, I confirmed when the issue was brought up to me last week that we should follow the (strict) definition and reject witnesses with However, @danieldietsch in comment #14 (comment) According to the definition of correctness witnesses https://doi.org/10.1145/2950290.2950351 Thus, the |
The example multivar_true-unreach-call1.graphml for a correctness witness in this repository contains control annotations like the following:
According to the
README.md
, the data keycontrol
may only be used in violation witnesses, not in correctness witnesses. Here it is of course the case that the other branch is also present in the witness, so the automaton is still an observer automaton.This probably means that the
README.md
needs to be updated/fixed in a way that does not break current implementations.Enforcing the current rules might also be possible, we would need to do a quick survey on how widespread people are using the
control
data key in correctness witnesses.The text was updated successfully, but these errors were encountered: