私はz3のsmt-lib 2構文でQBFをエンコードしようとしています。警告数量子とパターン(QBF式)
WARNINGでZ3結果を実行:
:(!14 k個の数量詞のID)と充足結果が "不明" である数量詞のためのパターンを見つけることができませんでした。私は座って、クエリの
(set-option :auto-config false)
(set-option :mbqi false)
(declare-fun R (Bool Bool Bool Bool) Bool)
(declare-fun x1() Bool)
(declare-fun x2() Bool)
(declare-fun x3() Bool)
(declare-fun y() Bool)
(assert
(forall ((x2 Bool) (x3 Bool))
(!
(exists ((y Bool))
(!
(forall ((x1 Bool))
(!
(R x1 x2 x3 y)
:pattern((R x1 x2 x3 y)))
)
:pattern((R x1 x2 x3 y)))
)
:pattern((R x1 x2 x3 y)))
)
)
(check-sat)
結果にコードを書き換えることで警告を処分した
(declare-fun R (Bool Bool Bool Bool) Bool)
(assert
(forall ((x2 Bool) (x3 Bool))
(exists ((y Bool))
(forall ((x1 Bool))
(R x1 x2 x3 y)
)
)
)
)
(check-sat)
、しかし、「未知」のままで次のように
コードがあります。
パターンを正しく取得する必要があると思いますか?どのようにネストされた量指定子に指定するのですか?ただし、パターンの注釈を付けなくても、量子を使った簡単な例が動作するようです。
What is the reason behind the warning message in Z3: "failed to find a pattern for quantifier (quantifier id: k!18) "とz3ガイドへの回答があまりにも助かりませんでしたが、残念です。