z3のsmt-lib2構文でQBFをエンコードしようとしています。z3を実行すると、警告が表示されます
警告:数量詞のパターンが見つかりませんでした(数量詞ID:k!14)
充足可能性の結果は「不明」です。
コードは次のとおりです。
(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)
コードを次のように書き直すことで警告を取り除きました
(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)
ただし、sat-queryの結果は「不明」のままです。
パターンを正しくする必要があると思いますか?ネストされた数量詞にそれらを指定するにはどうすればよいですか?ただし、数量詞を使用した単純な例は、パターン注釈がなくても機能するようです。
Z3の警告メッセージの背後にある理由は何ですか:「数量詞(数量詞id:k!18)のパターンを見つけることができませんでした」とz3ガイドは残念ながらあまり役に立ちませんでした。