[SMT-LIB] Standardizing extraction of arrays

Alberto Griggio griggio at fbk.eu
Mon Mar 9 03:59:12 EDT 2015


Hi all,

> Dear SMT-Lib community:
>
> A common question that comes up in interfacing with SMT-Solvers is that of
> extracting values of arrays. As far as I know, SMTLib2 has not specified
> any means of bulk-extraction of array values; though one can use get-value
> to extract individual elements. Unfortunately the latter is not very useful
> when building tools on top of these solvers as the driving program usually
> doesn't know which elements are relevant for the model at hand.

I agree, there should be a way to extract the information. Calling
get-value repeatedly is not enough, if you don't know which indices are
relevant.

>
> Needless to say, almost all solvers do support bulk array models, and they
> print the models in somewhat similar yet in their own idiosyncratic
> ways.

[...]

> MathSat:
> ( (array_0 @0) )

[...]

> (My MathSat version dates back to 2013, so it might've changed in the
> mean time.)

FWIW, yes, it has. Now MathSAT (since version 5.3.0) will print
something like:

   ( (array_0 (store ((as const (Array (_ BitVec 8) (_ BitVec 8))) (_ 
bv0 8)) (_ bv64 8) (_ bv128 8))) )

I.e., the model is represented as a sequence of writes over a base
constant array.


Alberto


More information about the SMT-LIB mailing list