I use the Z3 SMT solver to solve the problem that I expressed in the QF_BV logic using the SMTLIB 2 language.
The model is unsatisfactory, and I'm trying to get the solver to create unsat-core.
My model consists of several mandatory restrictions that I specify using assert
.
The statements that I want to consider for generating unsaturated kernels have been defined using the construct (assert (! (EXPR) :named NAME))
.
Z3 gives me unsat
, as expected. However, Z3 always seems to discard the “trivial” unsat-core, consisting of ALL of these statements.
I know that there is a subset of my named statements, which is unsat-core. I found this kernel using the Yices SMT solver, which often gives me relatively small unsat-core. The Yices model is the same as the Z3 model (basically line by line feed from SMT2 to Yices input language).
Does it produce "good" solver-dependent unsat-core functions, or are there any general suggestions / changes I could make to help Z3 give me a better kernel?
source share