【问题标题】:z3/python realsz3/python 实数
【发布时间】:2012-04-15 17:04:09
【问题描述】:

如果我问的话,使用 z3/python 网络界面:

x = Real ('x')
solve(x * x == 2, show=True)

我很高兴:

Problem:
[x·x = 2]
Solution:
[x = -1.4142135623?]

我认为以下 smt-lib2 脚本会有相同的解决方案:

(set-option :produce-models true)
(declare-fun s0 () Real)
(assert (= 2.0 (* s0 s0)))
(check-sat)

唉,我用 z3 (v3.2) 得到了unknown

我怀疑问题出在非线性术语(* s0 s0) 上,python 接口在某种程度上不会受到影响。有没有办法在 smt-lib2 中编写相同的代码来获取模型?

【问题讨论】:

    标签: python z3


    【解决方案1】:

    用 Z3 网页界面尝试your example,我得到sat 的结果。

    Z3 web 界面和 Z3Py 基于 Z3 v4.0,所以我认为这个问题在即将发布的版本中得到解决。

    【讨论】:

    • 完全正确!这就是它为 s0 的值返回的内容: ((s0 (root-obj (+ (^ x 2) (- 2)) 1))) 我很好奇“root-obj”函数是如何解释的;以及其他查询 Z3 的工具如何从中获取实数。
    • Z3 4.0 使用 root-obj 来表示代数无理数。它由一个单变量多项式和一个索引组成。上面的root-obj表示x^2 - 2的第一个根,即-1.41...我们可以通过使用'(set-option :pp-decimal true)让SMT 2.0以十进制显示结果'。我在 z3py 中默认使用小数,因为目标是覆盖不习惯于约束求解和代数数论的人群。
    • 更多关于 z3 4.0 中新的非线性算术过程的信息可以在这里找到research.microsoft.com/apps/pubs/default.aspx?id=159549
    • 谢谢莱昂纳多。整数系数的混合和匹配是否有一些限制?我注意到以下工作:rise4fun.com/Z3Py/xCU,但整数系数版本没有:rise4fun.com/Z3Py/TDA
    • @LeonardodeMoura:重复前面的评论,以防它错过了您的注意:整数系数的混合和匹配是否有一些限制?我注意到以下工作:rise4fun.com/Z3Py/xCU,但整数系数版本没有:rise4fun.com/Z3Py/TDA
    猜你喜欢
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    相关资源
    最近更新 更多