我想要一个布尔变量来测试,例如,位向量的第三位是否为0.比特矢量理论允许提取1位作为位向量,但不是布尔类型。我想知道我是否可以做这个演员。谢谢。
===更新===
如果我的问题不明确,我很抱歉。但Nikolaj Bjorner的答案是如何测试一点点向量。虽然我想将位向量的第一位的值赋给变量。我尝试按如下方式修改示例:
(declare-fun x () (_ BitVec 5))
(declare-fun bit0 () Bool)
(assert (= (= #b1 ((_ extract 0 0) x)) bit0 ))
(check-sat)
并且z3抱怨:
(error "line 2 column 25: invalid declaration, builtin symbol bit0")
(error "line 3 column 44: invalid function application, sort mismatch on argument at position 2")
我需要变量bit0供以后使用。你能给我一个提示吗?感谢。
答案 0 :(得分:3)
在第三位的提取与值为1(和一位)的位向量之间创建相等。
E.g,
(declare-const x (_ BitVec 5))
(assert (= #b1 ((_ extract 2 2) x)))
(check-sat)
(get-model)
产生
sat
(model
(define-fun x () (_ BitVec 5)
#b00100)
)
答案 1 :(得分:2)
你在做什么就好了;只是bit0
是保留名称。只需称它为别的东西。 (mybit0
可以使用,或其他一些无保留的名称。)