Skip to content

Question: Why is Alt-ergo not answering SAT to trivial questions? #1323

@giltho

Description

@giltho

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) ; -> unknown

This 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!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions