z3 - 哪些技术用于处理 z3 中的非线性整数实数问题?

标签 z3 smt

这是 problem 的 z3 统计数据在 Non-Linear Integer Real Fragment 中(我的很多问题都与此类似):

 (:add-rows            11062574
  :added-eqs           34
  :arith-conflicts     37293
  :assert-lower        837747
  :assert-upper        1909779
  :binary-propagations 13807730
  :bound-prop          32666
  :conflicts           47631
  :decisions           157457
  :del-clause          32828
  :final-checks        39307
  :gcd-tests           329820
  :gomory-cuts         927
  :ineq-splits         19490
  :memory              39.52
  :minimized-lits      93912
  :mk-clause           73468
  :pivots              768193
  :propagations        15992318
  :pseudo-nonlinear    254856
  :restarts            41
  :time                151.65
  :total-time          151.68)

由于问题是非线性的,我相信单纯形技术并没有直接用于解决这个问题(尽管我在输出中看到了一些类似单纯形的统计数据)。基于 earlier回应,我理解存在整数的非线性实数技术是基于 Grobner 基的,相关函数在 theory_arith* 中。是否有论文/一些文档可以找到关于在 z3 中为此片段实现的技术的具体信息?

此外,虽然问题本身是非线性的,但非线性的唯一出现涉及两个变量的乘法(并且有一些这样的表达式),并且其中一个变量只能取幂的值两个并由一些简单的约束约束/定义:

(const1 <=  |a| < const2) => (var-a = const1)

其中 const1 和 const2 是两个连续的正幂。因此,var-a 表示小于或等于 |a| 的两个最大幂。这些变量被声明为 Real 类型。 特别好奇,因为我在统计输出中看到一个术语 pseudo-nonlinear。约束是否以某种方式在内部线性化?另外,是否有更好的方法来编码这些约束,以便 z3 在此类问题上做得更好?

最佳答案

关于z3 - 哪些技术用于处理 z3 中的非线性整数实数问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21247410/

相关文章:

z3 - SAT/SMT 求解器中的变量消除

z3 - 如何解释统计数据 Z3

python - Z3py:Float32() 和 BitVecSort(32) 之间的强制和值提取

java - Z3 的 Java 插值 API 似乎返回错误的插值

floating-point - FMA : proof performance

z3 - SMT 中的混合理论

z3 - 如何在 Z3 中表示符号求和?

verification - SMT求解器的局限性

java - 线程中出现异常 "main"java.lang.UnsatisfiedLinkError : no libz3java in java. library.path

z3 - 通过假设时的 check-sat 错误