我有一些约束断言BitVec中的位,我想知道在BitVec中为特定位声明约束的最有效方法是什么?
假设我想断言BitVec中的第5位是1,有没有比这更有效(更短的检查时间)的方法?
bitvec = BitVec('bitvec',10)
s.add(Extract(5,5,bitvec)==1)
答案 0 :(得分:2)
根据我对Z3内部的了解(来自实验和查看来源),这是最有效的方法。
据我所知,摘录和concats没有求解器运行时成本。他们只是将这些位分成几部分。
唯一的选择是应用and
操作来提取位。但是这应该在简化后变成一个提取物(实际上你可以通过运行简化策略进行测试。这是一个有趣的重写来观察)。