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

在Z3中获取位向量的符号值,z3,smt,bitvector,Z3,Smt,Bitvector,我想使用Z3对位向量进行推理。除了可满足性决策之外,我还需要位向量的符号表示,以便我可以根据需要对它们应用我自己的计算。例如: 让, X[3:0],Y[3:0],Z[4:0]被声明为位向量,而不初始化任何值 打印X[3:0] X[3:0]>1(逻辑移位) 打印X[3:0] Z[4:0]通常这是不可能的。在简化公式后,Z3使用位爆炸器(转换为布尔变量)并运行SAT解算器,该解算器(通常)只向所有布尔变量返回一个赋值(因此,转换后,向位向量变量返回) Z3用于QF_BV公式的策略可以看出。对于某些(

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

让,

  • X[3:0],Y[3:0],Z[4:0]被声明为位向量,而不初始化任何值
  • 打印X[3:0]
  • X[3:0]>1(逻辑移位)
  • 打印X[3:0]

  • Z[4:0]通常这是不可能的。在简化公式后,Z3使用位爆炸器(转换为布尔变量)并运行SAT解算器,该解算器(通常)只向所有布尔变量返回一个赋值(因此,转换后,向位向量变量返回)

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

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