[SMT-LIB] BitVectors32
Domagoj Babic
babic.domagoj at gmail.com
Fri Jan 5 22:32:44 EST 2007
Hi,
On 1/5/07, Clark Barrett <barrett at cs.nyu.edu> wrote:
> > bv(0|1) are in the logic files, but where are bv<op>, op=(add|sub|...)
> > specified?
>
> in the theory file (theory Fixed_Size_BitVectors[32])
Thx, I missed that. Sorry.
> > Also, I'm wondering about a couple of other related things:
> >
> > 1) My application requires a full set of integer operators (sdiv,
> > udiv, urem, mul...).
> > If I generate benchmarks in BitVec[32] format am I supposed to define the
> > operators, or I can just use bvsdiv, for instance?
>
> Currently, we do not have a mechanism for defining macros, so all operations
> must be in the theory or logic file. However, we are considering extending the
> bitvector logic to include more operators, so please let us know which
> operators you think are necessary.
SDIV, // Signed division
UDIV, // Unsigned division
SREM, // Signed remainder
UREM, // Unsigned remainder
I'd also suggest replacing the current set of comparisons:
theory file: leq, lt, eq, gt,
extensions: slt, sleq, sgt, sgeq
With a more consistent set:
SETEQ, // ==
SETNE, // !=
SETULE, // <= unsigned
SETUGE, // >= unsigned
SETULT, // < unsigned
SETUGT, // > unsigned
SETSLE, // <= signed
SETSGE, // >= signed
SETSLT, // < signed
SETSGT, // > signed
from the theory file it is not clear what leq, lt, eq, gt are. Only when
I saw the signed extensions, I concluded that those in the theory file
are probably unsigned versions.
Although it is easy to encode ASHR/LSHR operators with
shift_right0 and shift_right1, the following set would be (in my opinion)
simpler and more intuitive:
SHL, // Shift left
ASHR, // Arithmetic shift right (sign extended)
LSHR, // Logical shift right (zero extended)
> > 2) Are theorem provers required to interpret all the operators? If not, how
> > do you compare (during the competition) theorem provers that handle
> > expensive operators as UIFs and those that handle them precisely?
>
> Theorem provers that compete in the bitvector division are required to
> interpret all of the operations precisely. This is one reason we are reluctant
> to add operations that do not appear in any benchmarks.
If you specify the additional operators, I can generate benchmarks from
software verification of open source applications. Just submitted
benchmarks to SAT competition. Without the additional operators, and
with a bit confusing comparisons (at least confusing to me), I can't
generate the benchmarks. Generating 10-20k benchmarks is not a problem.
BTW, what does "packet" mean in egt benchmarks?
Regards,
Domagoj Babic
More information about the SMT-LIB
mailing list