Matrix Z3:执行矩阵运算 我的处境

Matrix Z3:执行矩阵运算 我的处境,matrix,z3,theorem-proving,Matrix,Z3,Theorem Proving,我正在从事一个项目,该项目需要: 证明矩阵运算公式的正确性 找到具有未知矩阵项值的模型 我的问题 那么,用矩阵运算来表达公式的最好方法是什么呢 它们可以通过z3解决吗?(在中使用的方式不是 非常优雅,似乎不适合更复杂的矩阵 操作。) 谢谢如果有什么不清楚的地方,请留下问题注释。Z3不支持这样的矩阵,所以最好的编码方法是对它们表示的公式进行编码。这与数独示例的编码方式大致相同。下面是一个使用2x2实矩阵(Z3py链接:)的简单示例: 为了让Z3求解未知矩阵实体,请取消注释第二行(使用a_1

我正在从事一个项目,该项目需要:

  • 证明矩阵运算公式的正确性
  • 找到具有未知矩阵项值的模型
我的问题
  • 那么,用矩阵运算来表达公式的最好方法是什么呢 它们可以通过
    z3
    解决吗?(在中使用的方式不是 非常优雅,似乎不适合更复杂的矩阵 操作。)

谢谢如果有什么不清楚的地方,请留下问题注释。

Z3不支持这样的矩阵,所以最好的编码方法是对它们表示的公式进行编码。这与数独示例的编码方式大致相同。下面是一个使用2x2实矩阵(Z3py链接:)的简单示例:

为了让Z3求解未知矩阵实体,请取消注释第二行(使用a_11、a_12等的符号名称),在第五行注释x_1、x_2的其他符号定义,并注释a_11=1的特定赋值,等等。然后,通过找到这些变量的满意赋值,您将得到Z3来解决任何未知问题,但请注意,出于您的目的,您可能需要启用模型完成(例如,如果您需要所有未知矩阵参数或x_i变量的赋值,请参见,例如:)

但是,基于您共享的链接,您感兴趣的是使用正弦(旋转)执行操作,这是一般的超越,此时Z3不支持超越(一般指数等)。这对您来说将是一个挑战性的部分,例如,要证明任何旋转角度的选择操作都是有效的,甚至只是对旋转进行编码。缩放和转换不应该太难编码

此外,关于如何对线性微分方程进行编码,请参见以下答案,这些方程的形式为x'=Ax,其中A是n*n矩阵,x是n维向量:

# nonlinear version, constants a_ij, b_i are variables
# x_1, x_2, a_11, a_12, a_21, a_22, b_1, b_2 = Reals('x_1 x_2 a_11 a_12 a_21 a_22 b_1 b_2')

# linear version (all numbers are defined values)
x_1, x_2 = Reals('x_1 x_2')

# A matrix
a_11 = 1
a_12 = 2
a_21 = 3
a_22 = 5

# b-vector
b_1 = 7
b_2 = 11

newx_1 = a_11 * x_1 + a_12 * x_2 + b_1
newx_2 = a_21 * x_1 + a_22 * x_2 + b_2

print newx_1
print newx_2

# solve using model generation
s = Solver()
s.add(newx_1 == 0) # pointers to equations
s.add(newx_2 == 5)
print s.check()
print s.model()

# solve using "solve"
solve(And(newx_1 == 0, newx_2 == 5))