我想定义一个接受位向量的函数,如果某个位置的位满足某些值,则返回true。 例如:如果bitvector是1x00x01x,我需要返回true,其中x表示不关心。
我目前的实施是:
(define-fun function_i ((i (_ BitVec 8))) Bool
(and true
(= #b1 ((_ extract 1 1) i))
(= #b0 ((_ extract 2 2) i))
(= #b0 ((_ extract 4 4) i))
(= #b0 ((_ extract 5 5) i))
(= #b1 ((_ extract 7 7) i))
)
)
这是一个变量,可能有许多变量具有32个大小的位向量。我担心这种实现会减慢z3的速度。提取函数会降低求解器的速度吗?有没有更好的方法来实现这个?
答案 0 :(得分:2)
没关系。更紧凑的方式是(i& 1101)== 1000(强制第一位,第二位0和最后一位,第三位可以是0或1)