我想用Z3来推理位向量。除了可满足性决定之外,我还想要位向量的符号表示,以便我可以根据需要对它们应用我自己的计算。例如:
让,
- X [3:0],Y [3:0],Z [4:0]被声明为位向量而不初始化任何值
- 打印X [3:0]
- X [3:0]< -X [3:0]> 1(逻辑转移)
- 打印X [3:0]
- Z [4:0]< -X [3:0] + Y [3:0]
- 打印Z [4:0]
- .......
醇>
所需的输出(像这样的符号):
> 2. [x3 x2 x1 x0]
> 4. [0 x3 x2 x1]
> 6. [s4 s3 s2 s1 s0]
是否可以使用Z3进行此操作?
答案 0 :(得分:0)
一般情况下,这是不可能的。在简化公式之后,Z3使用比特冲击波(转换为布尔变量)并运行一个SAT求解器,它(通常)只返回一个赋值给所有布尔变量(因此,在转换后,转换为位向量变量) )。
可以看到Z3用于QF_BV公式的策略here。对于某些(简单)公式,在您的情况下进行钻头爆破后提取公式可能就足够了; Strategies Tutorial描述了如何构建和应用这些策略。