z3py:在BitVec中约束一点的最有效方法是什么?

时间:2015-09-15 20:09:22

标签: z3 smt z3py

我有一些约束断言BitVec中的位,我想知道在BitVec中为特定位声明约束的最有效方法是什么?

假设我想断言BitVec中的第5位是1,有没有比这更有效(更短的检查时间)的方法?

bitvec = BitVec('bitvec',10)
s.add(Extract(5,5,bitvec)==1)

1 个答案:

答案 0 :(得分:2)

根据我对Z3内部的了解(来自实验和查看来源),这是最有效的方法。

据我所知,摘录和concats没有求解器运行时成本。他们只是将这些位分成几部分。

唯一的选择是应用and操作来提取位。但是这应该在简化后变成一个提取物(实际上你可以通过运行简化策略进行测试。这是一个有趣的重写来观察)。