是否可以将以下表达式简化为“ 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)
答案 0 :(得分:0)
一般而言,不是。
Z3的简化与您认为的“简单”通常是不一样的,它或多或少地像一个黑匣子。它不会产生像从符号数学包中获得的输出一样:简化的目的是使输入“更简单”以进行进一步求解。不是为了“将其呈现给用户”。
您可以在堆栈溢出中找到许多类似的问题,请参见:https://stackoverflow.com/search?q=%5Bz3%5D+simplify,尤其是Leo的答案:simplification in Z3