使用数据日志输入格式在Z3中的BitVec中计算1

使用数据日志输入格式在Z3中的BitVec中计算1,z3,datalog,Z3,Datalog,是否有一种使用数据日志输入格式计算Z3中BitVec中设置为1的位数的紧凑方法 $ z3 -h # most of the lines below omited for clarity Input format: -dl use parser for Datalog input format. 对于这个问题,目前公认的答案是:在SMT 2输入格式中没有很好的方法 对于这个问题,目前公认的答案是:显示如何在Python中执行此操作。对于32位向量,您可以尝试将以下伪代码转换

是否有一种使用数据日志输入格式计算Z3中BitVec中设置为1的位数的紧凑方法

$ z3 -h  # most of the lines below omited for clarity
Input format:
  -dl         use parser for Datalog input format.
对于这个问题,目前公认的答案是:在SMT 2输入格式中没有很好的方法


对于这个问题,目前公认的答案是:显示如何在Python中执行此操作。

对于
32位
向量,您可以尝试将以下伪代码转换为SMT:

v = v - ((v >> 1) & 0x55555555);                    // reuse input as temporary
v = (v & 0x33333333) + ((v >> 2) & 0x33333333);     // temp
c = ((v + (v >> 4) & 0xF0F0F0F) * 0x1010101) >> 24; // count

这是我们的电话,也已发布。

谢谢!为了减少样板代码的数量,使用这种方法确实是一个有趣的想法。(不过,这个问题是关于数据日志输入格式的。)