inline dimacs_problem parse_dimacs_from_file(std::string const& path) { std::fstream in(path.c_str()); std::istream stream(in.rdbuf()); return parse_dimacs(stream); }
void solve_cnf(const char * file) { clock_t start_time = clock(); simple_sat_solver solver(g_front_end_params); std::ifstream in(file); parse_dimacs(in, solver); lbool r = solver.check(); clock_t end_time = clock(); switch(r) { case l_false: std::cout << "unsat\n"; break; case l_undef: std::cout << "unknown\n"; break; case l_true: std::cout << "sat\n"; if (g_front_end_params.m_build_model) { solver.display_model(std::cout); } break; } if (g_display_statistics) { solver.display_statistics(std::cerr); memory::display_max_usage(std::cerr); std::cerr << "time: " << ((static_cast<double>(end_time) - static_cast<double>(start_time)) / CLOCKS_PER_SEC) << "\n"; } }
unsigned read_dimacs(char const * file_name) { g_start_time = clock(); register_on_timeout_proc(on_timeout); signal(SIGINT, on_ctrl_c); params_ref p = gparams::get_module("sat"); p.set_bool("produce_models", true); reslimit limit; sat::solver solver(p, limit, 0); g_solver = &solver; if (file_name) { std::ifstream in(file_name); if (in.bad() || in.fail()) { std::cerr << "(error \"failed to open file '" << file_name << "'\")" << std::endl; exit(ERR_OPEN_FILE); } parse_dimacs(in, solver); } else { parse_dimacs(std::cin, solver); } IF_VERBOSE(20, solver.display_status(verbose_stream()););
static void solver_from_dimacs_stream(Z3_context c, Z3_solver s, std::istream& is) { init_solver(c, s); ast_manager& m = to_solver_ref(s)->get_manager(); std::stringstream err; sat::solver solver(to_solver_ref(s)->get_params(), m.limit()); if (!parse_dimacs(is, err, solver)) { SET_ERROR_CODE(Z3_PARSER_ERROR, err.str().c_str()); return; } sat2goal s2g; ref<sat2goal::mc> mc; atom2bool_var a2b(m); for (unsigned v = 0; v < solver.num_vars(); ++v) { a2b.insert(m.mk_const(symbol(v), m.mk_bool_sort()), v); } goal g(m); s2g(solver, a2b, to_solver_ref(s)->get_params(), g, mc); for (unsigned i = 0; i < g.size(); ++i) { to_solver_ref(s)->assert_expr(g.form(i)); } }