如何使用Z3Py在变量中设置模式

如何使用Z3Py在变量中设置模式,z3,z3py,Z3,Z3py,我是Z3的新手,但我的问题可以用它来解决。 我有两个变量A和B,两种模式如下: 模式_1:1010x11x 图案_2:x0x01111 其中1和0是位0和1,x(不在乎)是位0或1。 我想用Z3Py来检查A和B是否可以同时为真。 在这种情况下,如果A=10101111和B=10101111,则A和B冷态应同时成立。 有人能帮我吗??有可能在澄清后通过Z3Py修改答案来解决此问题 这里有一种表示这些约束的方法。有一个名为Extract的操作可以应用于位向量项。其定义如下: def提取(高、低、a)

我是Z3的新手,但我的问题可以用它来解决。 我有两个变量A和B,两种模式如下: 模式_1:1010x11x 图案_2:x0x01111 其中1和0是位0和1,x(不在乎)是位0或1。 我想用Z3Py来检查A和B是否可以同时为真。 在这种情况下,如果A=10101111和B=10101111,则A和B冷态应同时成立。 有人能帮我吗??有可能在澄清后通过Z3Py修改答案来解决此问题

这里有一种表示这些约束的方法。有一个名为
Extract
的操作可以应用于位向量项。其定义如下:

def提取(高、低、a): “”“创建Z3位向量提取表达式。”“”

其中,
high
是要提取的高位,
low
是要提取的低位,
a
是位向量。此函数表示
之间的
a


使用
Extract
函数,您可以约束要检查的任何术语的每一位,使其与模式匹配。例如,如果
D
的第七位必须是1,则可以编写
s.add(Extract(7,7,D)=1)
。对于不是
x

的模式中的每个位重复此操作,非常感谢。我还有一个问题。你知道我如何表示这个向量吗?因为对于BitVec,我不能输入值,而对于BitVecVal,我必须输入常量。如何用高、低和不关心(未定义)值表示向量?非常感谢您的帮助。对于BitVec,仅使用一个变量是不可能做到这一点的。Z3的类型系统定义了可以放入BitVec的唯一合法值为0和1。正如我所解释的,您必须将其编码为单独的约束,或者作为两个单独的BitVec变量——一个表示位是否为“不关心”,另一个表示在该位不为“不关心”的情况下设置的值(0或1)。