Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Z3 任意长度的通用位向量类型_Z3 - Fatal编程技术网

Z3 任意长度的通用位向量类型

Z3 任意长度的通用位向量类型,z3,Z3,出于与本文()所述相同的原因,我想定义自己的未解释函数 bvredxnor():给定位向量位上的xnor 如果按照这里给出的示例()进行操作,我不知道该为函数的参数(位向量)提供什么样的排序 我可以创建一个给定长度的位向量排序,但我希望它适用于任何长度的位向量 查看C API中可用的位向量函数,我注意到所有参数的类型都是Z3_ast,所以我想我可以使用相同的泛型类型。但API中没有生成Z3_ast排序的函数。。。(写这篇文章我觉得我触及了类型和种类之间的区别,但仍然有点不清楚) 解决方案是使用未

出于与本文()所述相同的原因,我想定义自己的未解释函数

bvredxnor():给定位向量位上的xnor

如果按照这里给出的示例()进行操作,我不知道该为函数的参数(位向量)提供什么样的排序

我可以创建一个给定长度的位向量排序,但我希望它适用于任何长度的位向量

查看C API中可用的位向量函数,我注意到所有参数的类型都是Z3_ast,所以我想我可以使用相同的泛型类型。但API中没有生成Z3_ast排序的函数。。。(写这篇文章我觉得我触及了类型和种类之间的区别,但仍然有点不清楚)

解决方案是使用未解释的排序吗?如果是这样的话,在这样做的时候,我会不会因为放大了太多的类型而在我的模型中失去一些精度,而这个人工制品只是为了调试的目的?我的意思是,如果我把这个函数应用到一个位向量上,它会起作用吗

提前谢谢大家,

AG.

SMTLib不允许具有可变长度的位向量。也就是说,您不能表示在位向量长度上参数化的问题。原因是,由于基数问题,关于位向量的属性不一定在长度上保持参数化。也就是说,考虑一下:

exists x0, x1, x2, x3, x4. distinct [x0, x1, x2, x3, x4]
此属性表示至少有5个不同的位向量值。如果x的域的长度至少为3,则为真,否则为假。因此,语句的有效性取决于域。您也可以将其视为SMTLib一阶特性的一个限制


当然,上述内容适用于SMTLib,而不一定适用于Z3。Leo和co一直处于领先地位,而Z3确实拥有许多超出SMTLib要求的技巧。如果Z3确实以您所描述的方式支持一些参数化位向量问题的概念,那将是一个惊喜。

那么,Z3_mk_bvredor()存在于API中,并且与位向量的长度无关。我只是想让xnor也一样,它不存在……如果我能做到这一点,它应该可以简化我的约束看起来的方式,这更容易调试。如果我能为这个函数这样做,我也能将同样的原理应用到其他函数中。实际上,您并不想以参数化的方式证明变长位向量,而是有一种构造此类表达式的通用方法。看来我误解了你的问题。@Heyji:我知道这是一个迟来的回答,但我认为你要求的是一个高阶函数,它将
n
映射到
\ubitvector n
。Z3(目前)不支持高阶函数。我最终得到了一个如下所述的解决方案: