Sto provando a codificare un QBF nella sintassi smt-lib 2 per z3. Esecuzione risultati Z3 in un avvertimentoQuantifiers and patterns (formula QBF)
ATTENZIONE: non è riuscito a trovare un modello per quantificatore (quantificatore id: k 14)
e il risultato soddisfacibilità è "sconosciuto".
Il codice è il seguente:
(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)
mi sono liberato del warning riscrivendo il codice per
(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)
Il risultato del-query satellitare, tuttavia, resta "sconosciuto".
Immagino di dover ottenere gli schemi giusti? Come posso specificarli per quantificatori annidati? Tuttavia, gli esempi più semplici con quantificatori sembrano funzionare senza annotazioni di modello.
La risposta a What is the reason behind the warning message in Z3: "failed to find a pattern for quantifier (quantifier id: k!18) " e la guida z3 non mi hanno aiutato troppo, purtroppo.