-
Notifications
You must be signed in to change notification settings - Fork 35
Description
Hello,
Warning: the formulation might be interpreted as criticism of alt-ergo ("why can't alt-ergo solve trivial stuff?", this is not what I mean). It is not, I understand that the choices make sense in the context of verification, I am just curious about other use-cases.
Is there a particular reason why Alt-ergo isn't answering SAT to trivial questions? (Not meaning it can't solve them, it does!)
For instance, alt-ergo will have the following behaviour:
(set-logic ALL)
(check-sat) ; -> unknownThis is surprising, given that we know the answer quite immediately.
I know this is a design choice and not a bug, because on questions like:
(set-logic ALL)
(declare-fun Y () Int)
(assert (<= (- 2147483648) Y))
(assert (<= Y 2147483647))
(assert (not (= Y 0)))
(check-sat)
(get-model)Alt-ergo returns unknown but (get-model) still shows a correct model, so under the hood, sat-solving is correctly happening. The question is: is Alt-ergo not answering sat because it would require additional effort that is (for verification) not required, or is there a more profound soundness reason?
I am asking because this behaviour makes alt-ergo unfit for under-approximate reasoning, where one needs to know that something is sat, but unknown and unsat collapes into "I don't care" (i.e. opposite of verification tasks).
Thank you!