Z3:表达线性代数性质
Z3: express linear algebra properties
我想证明涉及矩阵和向量的表达式的性质(可能很大,但大小是固定的)。
比如我想证明一个表达式的结果是对角矩阵或者三角矩阵,或者是正定的,...
为此,我想对线性代数中众所周知的属性和恒等式进行编码,例如:
||x + y|| <= ||x|| + ||y||
(A * B) * C = A * (B * C)
det(A+B) = det(A) + det(B)
Tr(zA) = z * Tr(A)
(I + AB) ^ (-1) = I - A(I + BA) ^ (-1) * B
...
我试图在 Z3 中实现它。但即使对于简单的属性,它 returns 未知或超时。我试过数组理论和量词。
我想知道这个问题是否可以用 SMT 求解器解决,还是它不适合这类问题?能举个小例子给个提示吗?
你当然可以使用 Z3 来做到这一点。
我构造了一个小例子here,定义了单位矩阵和什么是对角矩阵,然后证明单位矩阵是对角的
所以,在Z3中做这样的工作是绝对可以的。尽管您可能会发现使用基于 Z3 构建的具有更多交互式证明功能的工具(例如 Dafny 或 F*)会更好。
我想证明涉及矩阵和向量的表达式的性质(可能很大,但大小是固定的)。
比如我想证明一个表达式的结果是对角矩阵或者三角矩阵,或者是正定的,...
为此,我想对线性代数中众所周知的属性和恒等式进行编码,例如:
||x + y|| <= ||x|| + ||y||
(A * B) * C = A * (B * C)
det(A+B) = det(A) + det(B)
Tr(zA) = z * Tr(A)
(I + AB) ^ (-1) = I - A(I + BA) ^ (-1) * B
...
我试图在 Z3 中实现它。但即使对于简单的属性,它 returns 未知或超时。我试过数组理论和量词。
我想知道这个问题是否可以用 SMT 求解器解决,还是它不适合这类问题?能举个小例子给个提示吗?
你当然可以使用 Z3 来做到这一点。
我构造了一个小例子here,定义了单位矩阵和什么是对角矩阵,然后证明单位矩阵是对角的
所以,在Z3中做这样的工作是绝对可以的。尽管您可能会发现使用基于 Z3 构建的具有更多交互式证明功能的工具(例如 Dafny 或 F*)会更好。