【问题标题】:Expressing bitvectors with don't care in SMT在 SMT 中表示无关位向量
【发布时间】:2018-06-01 11:40:35
【问题描述】:

我想定义一个函数,它接受一个位向量,如果某个位置的位满足某些值,则返回 true。 例如:如果位向量为 1x00x01x,其中 x 表示不关心,我需要返回 true。

我目前的实现是:

(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 的速度。提取函数会减慢求解器的速度吗?有没有更好的方法来实现这一点?

【问题讨论】:

    标签: z3 smt bitvector


    【解决方案1】:

    没关系。更紧凑的方式是 (i & 1101) == 1000 (强制第一位 1、第二位 0 和最后一位 0,第三位可以是 0 或 1)

    【讨论】:

      猜你喜欢
      • 2021-01-13
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 1970-01-01
      • 2017-05-17
      相关资源
      最近更新 更多