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.
According to the SMT-LIB standard (see page 49 and 65), we can use abstract values returned by a previous
get-valuestatement in a new statement.For instance:
Let's imagine the last statement produces the output:
Then the statement:
is valid even if
@array1isn'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
Z3andcvc5don't print an abstract value for the arrayabutAlt-Ergodoes.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-LIBcompliant.