任何长度的通用位向量类型(Generic bitvector type of any length)

2019-09-16 18:57发布

对于比这里所描述的相同的原因( 用户自定义函数未解释的 ),我想确定自己未解释功能

bvredxnor():XNOR在给定位向量的位。

如果我按照这里给出的(例子中与C API全称量词的例子 ),我不知道提供给我的功能(一个位向量)的说法什么样的

我可以创建一个位向量某种给定长度的,但我想有它的任何长度的bitvectors。

望着C API可用位向量函数,我注意到,所有参数的类型是Z3_ast,所以我想我可以使用相同的通用类型。 但是,是产生Z3_ast排序的API中没有功能......(写这篇我觉得我接触的类型和种类的区别,但它仍然是一个有点不清楚)

就是用未解释各种各样的解决方案? 如果是的话,在这样做,我岂不松一些精度太多放大型我的模型,而这个假象仅用于调试的目的? 我的意思是,如果我把这个函数的位向量,将这项工作?

先感谢您,

AG。

Answer 1:

SMTLib 不允许位矢量与可变的长度。 也就是说,你不能表达是通过位向量的长度参数问题。 这样做的原因是,关于位向量性能不一定参缓缴的长度,由于基数的问题。 要机智,考虑:

exists x0, x1, x2, x3, x4. distinct [x0, x1, x2, x3, x4]

此属性说,有至少5个不同的位向量的值。 这为真,如果x的结构域具有长度至少为3,而不是其他。 因此,声明的有效性依赖于域。 你也可以认为这是一般SMTLib的一阶性质的限制。

当然,上述适用于SMTLib,而不一定是Z3。 狮子座和合作一直是领先的曲线,和Z3确实有很多的技巧,超越什么SMTLib要求。 这将会是一个惊喜,如果Z3不支持在你所描述的方式参数位向量问题的一些想法。



文章来源: Generic bitvector type of any length
标签: z3