当使用z3解决SMT2文件并应用策略时(例如“(应用qfbv)”),如何为该策略设置选项?例如,QFBV有一个选项“cache-all”,默认设置为false。如何使用SMT2文件将其设置为true?或者使用SMT2语言是不可能的?
答案 0 :(得分:2)
您可以使用组合子using-params
。组合子!
是using-params
的简写。
以下是使用策略simplify
的一个小示例(在http://rise4fun.com/Z3/JaZ处在线试用)。
(declare-const x Int)
(declare-const y Int)
(assert (= (+ x 1) (+ y 3)))
(apply simplify)
(echo ">>>> Using arith-lhs := True, and eq2ineq := True")
(apply (using-params simplify :arith-lhs true :eq2ineq true))
;; ! is a shorthand for using-params
(apply (! simplify :arith-lhs true :eq2ineq true))
答案 1 :(得分:2)
您可以使用using-params组合子。在Z3 SMT online中输入(help-tactic)
会给我这个片段:
- (using-params <tactic> <attribute>*)
使用给定的属性执行给定的策略,其中<attribute> ::= <keyword> <value>.
!是一个 using-params的语法糖。
这是一个经过类型检查的例子(不确定它是否有意义):
(declare-const x (_ BitVec 16))
(declare-const y (_ BitVec 16))
(assert (= (bvor x y) (_ bv13 16)))
(assert (bvslt x y))
(apply (using-params qfbv :cache-all true))