在z3中设置策略选项

时间:2012-11-05 17:20:21

标签: z3

当使用z3解决SMT2文件并应用策略时(例如“(应用qfbv)”),如何为该策略设置选项?例如,QFBV有一个选项“cache-all”,默认设置为false。如何使用SMT2文件将其设置为true?或者使用SMT2语言是不可能的?

2 个答案:

答案 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))