Z3;使用if-then-else进行简化

时间:2020-07-29 09:05:13

标签: z3

是否可以将以下表达式简化为“ 6

(declare-fun var () Int)
(simplify
    (exists ((bx Int))
        (and
        (exists ((byX Int))
          (ite (> bx 5) (= byX 0) (&& (> bx 2) (= byX (+ byX 4)))))
        (= bx (+ var 1))
        (> var 6)
        )
      )
  :push_ite_arith true
  :pull_cheap_ite true
  :ite_extra_rules true
)
      
(assert
    (not
      (iff 
        (exists ((bx Int))
            (and
            (exists ((by Int))
              (ite (> bx 5) (= by 0) (&& (> bx 2) (= by (+ by 4)))))
            (= bx (+ var 1))
            (> var 6)
            )
          )
        (< 6 var)
      )
    )
)
(check-sat)

1 个答案:

答案 0 :(得分:0)

一般而言,不是。

Z3的简化与您认为的“简单”通常是不一样的,它或多或少地像一个黑匣子。它不会产生像从符号数学包中获得的输出一样:简化的目的是使输入“更简单”以进行进一步求解。不是为了“将其呈现给用户”。

您可以在堆栈溢出中找到许多类似的问题,请参见:https://stackoverflow.com/search?q=%5Bz3%5D+simplify,尤其是Leo的答案:simplification in Z3

相关问题