我在Z3中很新,但是我的问题可以用它来解决。 我有两个变量A和B以及两个这样的模式: pattern_1:1010x11x pattern_2:x0x01111 其中1和0是0和1位,x(不关心)冷是位0或1。 我想使用Z3Py来检查带有pattern_1的A和带有pattern_2的B是否可以同时为真。 在这种情况下,如果A = 10101111且B = 10101111,则A和B冷同时为真。 谁能帮我这个??可以通过Z3Py解决这个问题
答案 0 :(得分:1)
澄清后的修改后的答案
这是您表示这些约束的一种方式。有一个名为Extract
的操作可以应用于位向量项。它的定义如下:
def Extract(high, low, a):
"""Create a Z3 bit-vector extraction expression."""
其中high
是要提取的高位,low
是要提取的低位,a
是位向量。此函数表示a
和high
之间low
的位数。
使用Extract
函数,您可以约束要检查的任何术语的每个位,以使其与模式匹配。例如,如果D
的第七位必须为1,那么您可以编写s.add(Extract(7, 7, D) == 1)
。对于不是x
的模式中的每个位重复此操作。