在Z3Py中为BitVec的元素编制索引

问题描述 投票:2回答:1

是否可以在BitVec中为元素建立索引?我想要这样的东西:

s = Solver()
x = BitVec('x', 8)
s.add(Not(And(x[0], x[2])))

或者是掩盖隔离位的唯一方法:

s.add(x & 5 != 5)
z3 smt z3py
1个回答
0
投票

您可以使用Extract(high, low, a)Extract(high, low, a)类型的术语中提取一个或多个位。

例如

BitVec

输出:

from z3 import *

s = Solver()
x = BitVec("x", 8)

x_0 = Extract(0, 0, x)
x_2 = Extract(2, 2, x)

expr = Or(x_0 == 0, x_2 == 0)

s.add(expr)

while s.check() == sat:
    m = s.model()
    print("Model: " + str(m))

    v_0 = m.eval(x_0)
    v_2 = m.eval(x_2)

    bl = Or(x_0 != v_0, x_2 != v_2)

    s.add(bl)
© www.soinside.com 2019 - 2024. All rights reserved.