Ich versuche, ein QBF in Smt-Lib 2-Syntax für z3 zu kodieren. Laufende z3 führt zu einer WarnungQuantifizierer und Muster (QBF-Formel)
WARNUNG: failed ein Muster für quantifier finden (quantifier ID: k 14)
und die Erfüllbarkeit Ergebnis "unbekannt".
Der Code ist wie folgt:
(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)
ich die Warnung losgeworden durch den Code
Umschreiben(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)
Das Ergebnis für die Sat-Abfrage bleibt jedoch „unbekannt“.
Ich vermute, dass ich die Muster richtig bekommen muss? Wie gebe ich sie für verschachtelte Quantifizierer an? Einfachere Beispiele mit Quantifizierern scheinen jedoch ohne Musterannotation zu funktionieren.
Die Antwort auf What is the reason behind the warning message in Z3: "failed to find a pattern for quantifier (quantifier id: k!18) " und die z3 Anleitung hat mir leider nicht viel geholfen.