Preserve sat counterexamples on universal-quantification VCs#1326
Preserve sat counterexamples on universal-quantification VCs#1326julesmt wants to merge 1 commit into
Conversation
|
It looks like a couple of tests are failing, but in a way that I think just confirms that your fix had the intended behavior. They'll just need to have their expected output updated. |
atomb
left a comment
There was a problem hiding this comment.
Can you update the target branch to main2? We're not merging changes to main for the next week or so unless they're related to splitting the repo into multiple pieces.
|
Sorry I rushed and forgot to commit the expected files for the tests. I will update all that |
LoopElim, CallElim, and frontEndPhase demote every sat counterexample via a `fun _ => false` validator stub. For universal-quantification obligations (loop-invariant maintenance/entry, measure bounds, callee postcondition), any witness in the abstracted domain is already in the user's stated domain, so the demotion is unnecessary. Adds `obligationLabelIsUniversal` and wires it as the first branch of each phase's getValidation. Universal labels preserve the model; everything else still demotes. Updates expected outputs in Loops and SelectiveVerification tests where sat counterexamples on universal VCs now report `❌ fail` instead of `❓ unknown`, confirming the intended behavior. Closes part of strata-org#1324.
d7a1e52 to
150d6b5
Compare
|
I have one structural comment and one more interesting comment. The more interesting question is, let's assume that we have a program like this, with a loop whose invariant is somewhat incompletely annotated: Since the loop invariant didn't mention However, I am leaning towards Strata always providing concrete counterexamples that can be reproduced in the original source program (hence the first interpretation among the two options). Then this will make the goal of reducing |
LoopElim, CallElim, and frontEndPhase demote every sat counterexample
via a
fun _ => falsevalidator stub. For universal-quantificationobligations (loop-invariant maintenance/entry, measure bounds, callee
postcondition), any witness in the abstracted domain is already in the
user's stated domain, so the demotion is unnecessary.
Adds
obligationLabelIsUniversaland wires it as the first branch ofeach phase's getValidation. Universal labels preserve the model;
everything else still demotes.
Closes part of #1324.