在Z3中获取位向量的符号值

时间:2014-04-22 09:30:37

标签: z3 smt bitvector

我想用Z3来推理位向量。除了可满足性决定之外,我还想要位向量的符号表示,以便我可以根据需要对它们应用我自己的计算。例如:

让,

  
      
  1. X [3:0],Y [3:0],Z [4:0]被声明为位向量而不初始化任何值
  2.   
  3. 打印X [3:0]
  4.   
  5. X [3:0]< -X [3:0]> 1(逻辑转移)
  6.   
  7. 打印X [3:0]
  8.   
  9. Z [4:0]< -X [3:0] + Y [3:0]
  10.   
  11. 打印Z [4:0]
  12.   
  13. .......
  14.   

所需的输出(像这样的符号):

> 2. [x3 x2 x1 x0]
> 4. [0 x3 x2 x1]
> 6. [s4 s3 s2 s1 s0]

是否可以使用Z3进行此操作?

1 个答案:

答案 0 :(得分:0)

一般情况下,这是不可能的。在简化公式之后,Z3使用比特冲击波(转换为布尔变量)并运行一个SAT求解器,它(通常)只返回一个赋值给所有布尔变量(因此,在转换后,转换为位向量变量) )。

可以看到Z3用于QF_BV公式的策略here。对于某些(简单)公式,在您的情况下进行钻头爆破后提取公式可能就足够了; Strategies Tutorial描述了如何构建和应用这些策略。