Skip to content

Handling abstract values in (get-value) statements #202

Description

@Halbaroth

According to the SMT-LIB standard (see page 49 and 65), we can use abstract values returned by a previous get-value statement in a new statement.
For instance:

(set-option :produce-models true)
(set-logic ALL)
(declare-const a (Array Int Int))
(check-sat)
(get-value (a))

Let's imagine the last statement produces the output:

(a (as @array1 (Array Int Int)))

Then the statement:

(get-value ((select @array1 0 0)))

is valid even if @array1 isn't a part of signature.

Notice that this feature can be used only in an interactive mode. Otherwise, there is no way to predict the abstract value
returned by the previous get-value.

Both Z3 and cvc5 don't print an abstract value for the array a but Alt-Ergo does.

We don't plan to implement an interactive mode for AE but if we do, we'll need to fix this issue to be SMT-LIB compliant.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions