Z3 python对待x ** 2与x * x不同?

时间:2012-11-19 02:42:36

标签: z3 z3py

似乎Z3 Python接口不喜欢**运算符,它可以处理x * x而不是x ** 2,如下例所示

>>> x,y = x,y=Reals('x y')
>>> z3.prove(Implies(x -6 == 0,x**2 -36 == 0))
failed to prove
[x = 6]
>>> z3.prove(Implies(x -6 == 0,x*x -36 == 0))
proved

1 个答案:

答案 0 :(得分:1)

您可能在Linux或OSX上使用的是4.3.0版。版本4.3.0在这些平台上存在配置问题。如果是这种情况,我建议您下载版本4.3.1。版本4.3.1将证明Linux和OSX上的查询。在版本4.3.0中,默认情况下,Linux和OSX上未启用自动配置。因此,Z3将始终使用非完整的非通用算法的通用求解器,也不支持幂运算符。启用自动配置后,Z3会检测到这两个问题是否存在于非线性实数算术片段中,并切换到nlsat solver

顺便说一句,要在4.3.0版本上手动启用自动配置,您可以使用命令z3.set_option(auto_config=True)