Z3Py:从方程组生成抽象公式

时间:2013-02-28 20:38:36

标签: math constraints z3 proof theorem-proving

我的例子:方程组

伪代码约束基础
  a = b+c
∧ e = a*c

∧ a = +2     ; some replaceable concrete values
∧ c = +18
解决方案
  b = -16
∧ e = -32

我想要的信息

在一个方程组中,我希望得到以下知识:

抽象公式我可以用来从给定值(在约束基础中)计算变量值(解决方案)。

(就像在高中时,老师不仅希望看到结果,而且还有这样一个转化后的抽象公式。)

公式赞......
  b = a-c     ; is an equivalent transformation from `a = b+c`
∧ e = (a-c)*c ; is an term replacement `b → a-c` of `e = a*c`

我的问题

如何使用 Z3Py 从Z3约束方程组中检索此信息?

感谢。 - 如果有什么不清楚的地方,请评论一下是什么问题。

1 个答案:

答案 0 :(得分:5)

Z3不是提取此类信息的理想工具。 在内部,它具有可用于针对特定情况实现此类功能的模块(例如,高斯消除,Groebner Basis),但它们未在Z3 API中公开。 The Z3 source code is available online.

您描述的问题很有趣,但它也非常重要。通常,输入不仅仅是一组方程。而且,即使我们只有方程,但它们是非线性的,那么可能无法获得像你问题中描述的那样的“解决”形式。在非线性情况下,我们可以将方程式设为三角形,但就是这样。另一个问题是,即使解决方案的数量是有限的,它也不像线性情况那样独特。 而且,通常,非线性方程组的解不能使用自由基来表示。在内部,Z3使用real algebraic numbers来表示解决方案。