z3を使用してSMT2ファイルを解決し、戦術を適用する場合(たとえば、「(apply qfbv)」)、その戦術のオプションを設定するにはどうすればよいですか?たとえば、QFBVには、デフォルトでfalseに設定されているオプション「cache-all」があります。SMT2ファイルを使用してtrueに設定するにはどうすればよいですか?または、SMT2言語を使用してこれを行うことはできませんか?
質問する
569 次
2 に答える
3
コンビネータを使用できますusing-params
。コンビネータ!
はの省略形ですusing-params
。これは、戦術を使用した小さな例です( http://rise4fun.com/Z3/JaZsimplify
でオンラインで試してください)。
(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))
于 2012-11-05T17:46:36.323 に答える
2
using-paramsコンビネータを使用できます。オンライン(help-tactic)
でZ3SMTと入力すると、 次のフラグメントが表示されます。
- (using-params <tactic> <attribute>*)
指定された属性を使用して指定された戦術を実行します。ここで<attribute> ::= <keyword> <value>.
!-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))
于 2012-11-05T17:51:40.227 に答える