Esempio n. 1
0
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);
}
Esempio n. 2
0
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";
    }
}
Esempio n. 3
0
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()););
Esempio n. 4
0
 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));
     }
 }