void filter_model(model_ref& mdl) { if (m_rewriter.fresh_constants().empty()) { return; } filter_model_converter filter(m); func_decl_ref_vector const& fns = m_rewriter.fresh_constants(); for (unsigned i = 0; i < fns.size(); ++i) { filter.insert(fns[i]); } filter(mdl, 0); }
model_converter* local_model_converter() const { if (m_rewriter.fresh_constants().empty()) { return nullptr; } generic_model_converter* filter = alloc(generic_model_converter, m, "pb2bv"); func_decl_ref_vector const& fns = m_rewriter.fresh_constants(); for (func_decl* f : fns) { filter->hide(f); } return filter; }
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(); }
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(); }
virtual void collect_statistics(statistics & st) const { m_rewriter.collect_statistics(st); m_solver->collect_statistics(st); }
virtual void pop_core(unsigned n) { m_assertions.reset(); m_solver->pop(n); m_rewriter.pop(n); }
virtual void push_core() { flush_assertions(); m_rewriter.push(); m_solver->push(); }
void collect_statistics(statistics & st) const override { m_rewriter.collect_statistics(st); m_solver->collect_statistics(st); }
void collect_param_descrs(param_descrs & r) override { m_solver->collect_param_descrs(r); m_rewriter.collect_param_descrs(r);}
void updt_params(params_ref const & p) override { solver::updt_params(p); m_rewriter.updt_params(p); m_solver->updt_params(p); }
void pop_core(unsigned n) override { m_assertions.reset(); m_solver->pop(n); m_rewriter.pop(n); }
void push_core() override { flush_assertions(); m_rewriter.push(); m_solver->push(); }