For a project I'm starting I will need to use a SAT solver. I've used some of them before but mainly for experimenting, while here the main constraint for the project is good performance. I'm trying to look for alternatives, and trying to understand how each alternative is positioned regarding my specific requirements. In particular:
I'll need to extract the satisfying assignments, not only checking for satisfiability, and the solver should allow me to repeatedly solve the same formula looking for different possible satisfying assignments, eventually iterating over all of them, in an efficient way (e.g. without me having to add a clause and start all over again).
The project should be still actively maintained and fairly production-quality, not some competition-winning research project abandoned since the publication (see
picosat
).Moreover, since I'm using C++, the solver should provide an efficient and (possibly) good written C++ interface.
The first candidate I considered was Z3, but I'm confused by the docs and cannot understand if point 1. above is supported, and if it might be overkill given that I only need SAT and not SMT. The C++ interface also seems very easy to use but I can't stand the fact that I have to name the variables with plain strings (this pairs very badly with my surrounding algorithm. Isn't it avoidable?).
So can you give me some suggestion on which SAT solver to use, or shed some light on by doubts regarding Z3?