【问题标题】:Is it possible to cast a bitvector of one bit into a boolean variable in SMTLib2?是否可以将一位的位向量转换为 SMTLib2 中的布尔变量?
【发布时间】:2023-04-10 18:44:02
【问题描述】:

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

【问题讨论】:

    标签: z3 smt formal-verification


    【解决方案1】:

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

    例如,

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

    生产

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

    【讨论】:

    • 感谢您的回复,但我想将值存储在变量中。我更新了问题,请您再看一下。谢谢。
    【解决方案2】:

    你正在做的很好;只是bit0 是保留名称。就叫它别的吧。 (mybit0 可以使用,或者其他一些未保留的名称。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      相关资源
      最近更新 更多