如何使用Z3求解器解决有关位向量矩阵的乘法和逻辑隐式的问题?

时间:2019-04-09 06:41:00

标签: python matrix z3 solver

我正在尝试使用python和z3解算器来描述约束。这个常数包括三个位向量矩阵为X[i]=X[j]-->(R1[i]*X=R1[j]*X)&(R1[i]*X=R1[j]*X)&(R1[i]*X=R1[j]*X)

X,R1,R2,R3是3 * 3的位向量矩阵

我得到了一些追溯:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
  File "D:\Z3\z3-master\z3-master\build\python\z3\z3.py", line 1613, in Implies
b = s.cast(b)
  File "D:\Z3\z3-master\z3-master\build\python\z3\z3.py", line 1369, in cast
    _z3_assert(is_expr(val), "True, False or Z3 Boolean expression expected. Received %s" % val)
  File "D:\Z3\z3-master\z3-master\build\python\z3\z3.py", line 92, in _z3_assert
    raise Z3Exception(msg)
z3.z3types.Z3Exception: True, False or Z3 Boolean expression expected. Received [[ True  True  True]]

如何调试它?

要解决位向量矩阵乘法问题,除了导入z3之外,我还导入了numpy,numpy可以解决乘法问题。

from z3 import*
from numpy import*

X=[[BitVec("x_%s_%s"%(i+1,j+1),16) for j in range(3)] for i in range(3)];
s=Solver();
s.add(X[0][1]==0);s.add(X[0][2]==0);s.add(X[1][2]==0);
a=BitVecVal(1,16);b=BitVecVal(0,16);
r_1=[[b,b,a],[b,b,a],[b,b,b]]
r_2=[[b,b,b],[b,b,b],[a,a,b]]
r_3=[[a,b,b],[a,b,b],[b,b,b]]
import numpy as np
mr1=np.matrix(r_1)
mr2=np.matrix(r_2);mr3=np.matrix(r_3);mXx=np.matrix(X);
for p in range(0,2,1):
      for q in range(0,2,1):
          s.add(Implies((X[p]==X[q]),(((mr1[p]*mXx)==(mr1[q]*mXx))&((mr2[p]*mXx)==(mr2[q]*mXx))&((mr3[p]*mXx)==(mr3[q]*mXx)))))
s.check()

0 个答案:

没有答案