繁体   English   中英

是否可以将一位的位向量转换为SMTLib2中的布尔变量?

[英]Is it possible to cast a bitvector of one bit into a boolean variable in SMTLib2?

我想要一个布尔变量来测试,例如,位向量的第三位是否为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供以后使用。 你能给我一个提示吗? 谢谢。

在第三位的提取和值为1(和一位)的位向量之间创建相等。

例如,

(declare-const x (_ BitVec 5))
(assert (= #b1 ((_ extract 2 2) x)))
(check-sat)
(get-model)

产生

sat
(model
  (define-fun x () (_ BitVec 5)
    #b00100)
)

你在做什么就好了; 只是bit0是一个保留名称。 只需称它为别的东西。 mybit0可以使用,或其他一些无保留的名称。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM