Esempio n. 1
0
static void check_random_ineqs(random_gen& r, ast_manager& m, unsigned num_vars, unsigned max_value, unsigned num_ineqs, unsigned max_vars, unsigned max_coeff) {
    opt::model_based_opt mbo;
    expr_ref_vector fmls(m);

    svector<int> values;
    for (unsigned i = 0; i < num_vars; ++i) {
        values.push_back(r(max_value + 1));
        mbo.add_var(rational(values.back()));
    }
    for (unsigned i = 0; i < num_ineqs; ++i) {
        add_random_ineq(fmls, mbo, r, values, max_vars, max_coeff);
    }

    vector<var_t> vars;
    vars.reset();
    vars.push_back(var_t(0, rational(2)));
    vars.push_back(var_t(1, rational(-2)));
    mbo.set_objective(vars, rational(0));
       

    mbo.display(std::cout);
    app_ref t(m);
    mk_term(vars, rational(0), t);
    
    test_maximize(mbo, m, num_vars, fmls, t);
    
    for (unsigned i = 0; i < values.size(); ++i) {
        std::cout << i << ": " << values[i] << " -> " << mbo.get_value(i) << "\n";
    }
}
Esempio n. 2
0
    void context::display_lemma_as_smt_problem(std::ostream & out, unsigned num_antecedents, literal const * antecedents,
                                               unsigned num_eq_antecedents, enode_pair const * eq_antecedents,
                                               literal consequent, symbol const& logic) const {
        ast_pp_util visitor(m_manager);
        expr_ref_vector fmls(m_manager);
        visitor.collect(fmls);
        expr_ref n(m_manager);
        for (unsigned i = 0; i < num_antecedents; i++) {
            literal l = antecedents[i];
            literal2expr(l, n);
            fmls.push_back(n);
        }
        for (unsigned i = 0; i < num_eq_antecedents; i++) {
            enode_pair const & p = eq_antecedents[i];
            n = m_manager.mk_eq(p.first->get_owner(), p.second->get_owner());
            fmls.push_back(n);
        }
        if (consequent != false_literal) {
            literal2expr(~consequent, n);
            fmls.push_back(n);
        }

        if (logic != symbol::null) out << "(set-logic " << logic << ")\n";
        visitor.collect(fmls);
        visitor.display_decls(out);
        visitor.display_asserts(out, fmls, true);
        out << "(check-sat)\n";
    }
Esempio n. 3
0
std::ostream& solver::display(std::ostream & out) const {
    expr_ref_vector fmls(get_manager());
    get_assertions(fmls);
    ast_pp_util visitor(get_manager());
    visitor.collect(fmls);
    visitor.display_decls(out);
    visitor.display_asserts(out, fmls, true);
    return out;
}
Esempio n. 4
0
 void flush_assertions() const {
     proof_ref proof(m);
     expr_ref fml(m);
     expr_ref_vector fmls(m);
     for (unsigned i = 0; i < m_assertions.size(); ++i) {
         m_rewriter(m_assertions[i].get(), fml, proof);
         m_solver->assert_expr(fml);
     }
     m_rewriter.flush_side_constraints(fmls);
     m_solver->assert_expr(fmls);
     m_assertions.reset();
 }
Esempio n. 5
0
 void rule_manager::mk_rule_core(expr* fml, proof* p, rule_set& rules, symbol const& name) {
     expr_ref_vector fmls(m);
     proof_ref_vector prs(m);
     m_hnf.reset();
     m_hnf.set_name(name);
     
     m_hnf(fml, p, fmls, prs);
     for (unsigned i = 0; i < m_hnf.get_fresh_predicates().size(); ++i) {
         m_ctx.register_predicate(m_hnf.get_fresh_predicates()[i], false);
     }
     for (unsigned i = 0; i < fmls.size(); ++i) {
         mk_horn_rule(fmls[i].get(), prs[i].get(), rules, name);
     }
 }
Esempio n. 6
0
 void flush_assertions() const {
     if (m_assertions.empty()) return;
     m_rewriter.updt_params(get_params());
     proof_ref proof(m);
     expr_ref fml1(m), fml(m);
     expr_ref_vector fmls(m);
     for (expr* a : m_assertions) {
         m_th_rewriter(a, fml1, proof);
         m_rewriter(false, fml1, fml, proof);
         m_solver->assert_expr(fml);
     }
     m_rewriter.flush_side_constraints(fmls);
     m_solver->assert_expr(fmls);
     m_assertions.reset();
 }
Esempio n. 7
0
 void maxsmt_solver_base::commit_assignment() {
     expr_ref tmp(m);
     expr_ref_vector fmls(m);
     rational k(0), cost(0);
     vector<rational> weights;
     for (soft const& s : m_soft) {
         if (s.is_true()) {
             k += s.weight;
         }
         else {
             cost += s.weight;
         }
         weights.push_back(s.weight);
         fmls.push_back(s.s);
     }       
     pb_util pb(m);
     tmp = pb.mk_ge(weights.size(), weights.c_ptr(), fmls.c_ptr(), k);
     TRACE("opt", tout << "cost: " << cost << "\n" << tmp << "\n";);