3#include <unordered_map>
99 this->modulus =
ff_sort.getFiniteFieldSize();
101 if (
config.produce_models) {
102 solver.setOption(
"produce-models",
"true");
108 solver.setOption(
"verbosity",
"5");
109 solver.setOption(
"stats",
"true");
112 solver.setOption(
"lang",
"smt2");
113 solver.setOption(
"output",
"inst");
114 solver.setOption(
"output",
"learned-lits");
115 solver.setOption(
"output",
"subs");
116 solver.setOption(
"output",
"post-asserts");
117 solver.setOption(
"output",
"trusted-proof-steps");
118 solver.setOption(
"output",
"deep-restart");
119 solver.setOption(
"output",
"timeout-core-benchmark");
120 solver.setOption(
"output",
"unsat-core-benchmark");
121 solver.setOption(
"stats-all",
"true");
122 solver.setOption(
"stats-internal",
"true");
129 if (!
config.ff_elim_disjunctive_bit) {
130 solver.setOption(
"ff-elim-disjunctive-bit",
"false");
137 if (!
config.ff_solver.empty()) {
141 if (
config.lookup_enabled) {
142 this->solver.setLogic(
"ALL");
143 this->solver.setOption(
"finite-model-find",
"true");
144 this->solver.setOption(
"sets-exp",
"true");
145 this->solver.setOption(
"arrays-exp",
"true");
146 this->solver.setOption(
"arrays-optimize-linear",
"true");
147 this->lookup_enabled =
true;
150 solver.setOption(
"output",
"incomplete");
158 void assertFormula(
const cvc5::Term& term)
const { this->solver.assertFormula(term); }
165 return "No result, yet";
167 return res ?
"SAT" :
"UNSAT";
172 std::string
get(
const cvc5::Term& term)
const;
173 std::string
operator[](
const cvc5::Term& term)
const {
return this->
get(term); };
std::pair< std::string, size_t > print_set_trace(const cvc5::Term &term, bool is_head=true)
print the trace of SET insertions up to previously printed ones
cvc5::Term get_symbolic_value(const cvc5::Term &term) const
void assertFormula(const cvc5::Term &term) const
const char * getResult() const
Solver(Solver &&other)=delete
std::pair< std::string, size_t > print_array_trace(const cvc5::Term &term, bool is_head=true)
print the trace of array assigments up to previously printed ones
std::string get(const cvc5::Term &term) const
Returns.
std::unordered_map< std::string, std::string > model(std::unordered_map< std::string, cvc5::Term > &terms) const
std::string get_array_name(const cvc5::Term &term)
recover the array name from the nested assigments
Solver(const std::string &modulus, const SolverConfiguration &config=default_solver_config, uint32_t base=16, uint32_t bvsize=254)
std::unordered_map< std::string, size_t > cached_array_traces
Solver(const Solver &other)=delete
std::unordered_map< std::string, size_t > cached_set_traces
cvc5::TermManager term_manager
Solver & operator=(const Solver &other)=delete
std::string get_set_name(const cvc5::Term &term)
recover the set name from the nested assigments
std::string operator[](const cvc5::Term &term) const
Solver & operator=(Solver &&other)=delete
std::string stringify_term(const cvc5::Term &term, bool parenthesis=false)
const SolverConfiguration default_solver_config
const SolverConfiguration split_gb_solver_config
const SolverConfiguration debug_solver_config
const SolverConfiguration ultra_solver_config
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::string to_string(bb::avm2::ValueTag tag)
bool ff_elim_disjunctive_bit