46 bool _output_xml_in_refinement)
49 message_handler(_message_handler),
50 output_xml_in_refinement(_output_xml_in_refinement)
55 : decision_procedure_ptr(std::move(p))
60 std::unique_ptr<decision_proceduret> p1,
61 std::unique_ptr<propt> p2)
62 : prop_ptr(std::move(p2)), decision_procedure_ptr(std::move(p1))
67 std::unique_ptr<decision_proceduret> p1,
68 std::unique_ptr<std::ofstream> p2)
69 : ofstream_ptr(std::move(p2)), decision_procedure_ptr(std::move(p1))
76 return *decision_procedure_ptr;
98 const int timeout_seconds =
101 if(timeout_seconds > 0)
108 log.
warning() <<
"cannot set solver time limit on "
114 solver->set_time_limit_seconds(timeout_seconds);
119 std::unique_ptr<decision_proceduret> p)
121 decision_procedure_ptr = std::move(p);
126 prop_ptr = std::move(p);
131 ofstream_ptr = std::move(p);
148 const auto incremental_smt2_solver =
150 if(!incremental_smt2_solver.empty())
186 template <
typename SatcheckT>
187 static std::unique_ptr<SatcheckT>
196 std::unique_ptr<solver_hardnesst> solver_hardness =
197 util_make_unique<solver_hardnesst>();
199 hardness_collector->solver_hardness = std::move(solver_hardness);
205 <<
"Configured solver does not support --write-solver-stats-to. "
214 auto solver = util_make_unique<solvert>();
228 bool get_array_constraints =
230 auto bv_pointers = util_make_unique<bv_pointerst>(
239 solver->set_decision_procedure(std::move(bv_pointers));
256 return util_make_unique<solvert>(std::move(bv_dimacs), std::move(prop));
270 return util_make_unique<solvert>(std::move(bv_pointers), std::move(prop));
275 std::unique_ptr<propt> prop = [
this]() -> std::unique_ptr<propt> {
282 return make_satcheck_prop<satcheck_no_simplifiert>(
288 info.
prop = prop.get();
300 auto decision_procedure = util_make_unique<bv_refinementt>(info);
302 return util_make_unique<solvert>(
303 std::move(decision_procedure), std::move(prop));
309 std::unique_ptr<solver_factoryt::solvert>
316 info.
prop = prop.get();
326 auto decision_procedure = util_make_unique<string_refinementt>(info);
328 return util_make_unique<solvert>(
329 std::move(decision_procedure), std::move(prop));
332 std::unique_ptr<solver_factoryt::solvert>
336 auto solver_process = util_make_unique<smt_piped_solver_processt>(
339 return util_make_unique<solvert>(
340 util_make_unique<smt2_incremental_decision_proceduret>(
344 std::unique_ptr<solver_factoryt::solvert>
356 "required filename not provided",
358 "provide a filename with --outfile");
361 auto smt2_dec = util_make_unique<smt2_dect>(
370 smt2_dec->use_FPA_theory =
true;
373 return util_make_unique<solvert>(std::move(smt2_dec));
375 else if(filename ==
"-")
377 auto smt2_conv = util_make_unique<smt2_convt>(
386 smt2_conv->use_FPA_theory =
true;
389 return util_make_unique<solvert>(std::move(smt2_conv));
394 auto out = util_make_unique<std::ofstream>(
widen(filename));
396 auto out = util_make_unique<std::ofstream>(filename);
402 "failed to open file: " + filename,
"--outfile");
405 auto smt2_conv = util_make_unique<smt2_convt>(
414 smt2_conv->use_FPA_theory =
true;
417 return util_make_unique<solvert>(std::move(smt2_conv), std::move(out));
426 "the chosen solver does not support beautification",
"--beautify");
434 const bool incremental_loop =
options.
is_set(
"incremental-loop");
439 "the chosen solver does not support incremental solving",
445 "the chosen solver does not support incremental solving",
"--cover");
447 else if(incremental_loop)
450 "the chosen solver does not support incremental solving",
451 "--incremental-loop");
457 if(cmdline.
isset(
"external-sat-solver"))
460 "external-sat-solver", cmdline.
get_value(
"external-sat-solver"));
465 if(cmdline.
isset(
"dimacs"))
471 if(cmdline.
isset(
"smt2"))
474 if(cmdline.
isset(
"fpa"))
477 bool solver_set =
false;
479 if(cmdline.
isset(
"boolector"))
485 if(cmdline.
isset(
"cprover-smt2"))
491 if(cmdline.
isset(
"mathsat"))
497 if(cmdline.
isset(
"cvc4"))
503 if(cmdline.
isset(
"incremental-smt2-solver"))
506 "incremental-smt2-solver", cmdline.
get_value(
"incremental-smt2-solver")),
510 if(cmdline.
isset(
"yices"))
516 if(cmdline.
isset(
"z3"))
522 if(cmdline.
isset(
"smt2") && !solver_set)
524 if(cmdline.
isset(
"outfile"))
542 if(cmdline.
isset(
"outfile"))
545 if(cmdline.
isset(
"write-solver-stats-to"))
548 "write-solver-stats-to", cmdline.
get_value(
"write-solver-stats-to"));
551 if(cmdline.
isset(
"beautify"))
554 if(cmdline.
isset(
"refine-arrays"))
560 if(cmdline.
isset(
"refine-arithmetic"))
566 if(cmdline.
isset(
"refine"))
573 if(cmdline.
isset(
"max-node-refinement"))
576 "max-node-refinement", cmdline.
get_value(
"max-node-refinement"));