From d581dc1db454df47fcd5d2579455a439a6a8754f Mon Sep 17 00:00:00 2001 From: Nikolaj Bjorner Date: Sat, 26 Apr 2025 11:22:16 -0700 Subject: [PATCH] #7630 propagate parameters on lazy tactics --- src/tactic/portfolio/default_tactic.cpp | 20 ++++++++++---------- src/tactic/tactic.cpp | 5 ++++- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/tactic/portfolio/default_tactic.cpp b/src/tactic/portfolio/default_tactic.cpp index fc69b45ae..883cacdab 100644 --- a/src/tactic/portfolio/default_tactic.cpp +++ b/src/tactic/portfolio/default_tactic.cpp @@ -34,22 +34,22 @@ Notes: #include "tactic/smtlogics/smt_tactic.h" tactic * mk_default_tactic(ast_manager & m, params_ref const & p) { - tactic * st = using_params(and_then(mk_simplify_tactic(m), + tactic * st = using_params(and_then(mk_simplify_tactic(m, p), cond(mk_and(mk_is_propositional_probe(), mk_not(mk_produce_proofs_probe())), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_fd_tactic(m, p); }), - cond(mk_is_qfbv_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qfbv_tactic(m); }), - cond(mk_is_qfaufbv_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qfaufbv_tactic(m); }), - cond(mk_is_qflia_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qflia_tactic(m); }), - cond(mk_is_qfauflia_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qfauflia_tactic(m); }), - cond(mk_is_qflra_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qflra_tactic(m); }), - cond(mk_is_qfnra_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qfnra_tactic(m); }), - cond(mk_is_qfnia_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qfnia_tactic(m); }), + cond(mk_is_qfbv_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qfbv_tactic(m, p); }), + cond(mk_is_qfaufbv_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qfaufbv_tactic(m, p); }), + cond(mk_is_qflia_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qflia_tactic(m, p); }), + cond(mk_is_qfauflia_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qfauflia_tactic(m, p); }), + cond(mk_is_qflra_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qflra_tactic(m, p); }), + cond(mk_is_qfnra_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qfnra_tactic(m, p); }), + cond(mk_is_qfnia_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qfnia_tactic(m, p); }), cond(mk_is_lira_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_lira_tactic(m, p); }), - cond(mk_is_nra_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_nra_tactic(m); }), + cond(mk_is_nra_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_nra_tactic(m, p); }), cond(mk_is_qffp_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qffp_tactic(m, p); }), cond(mk_is_qffplra_probe(), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_qffplra_tactic(m, p); }), //cond(mk_is_qfufnra_probe(), mk_qfufnra_tactic(m, p), - and_then(mk_preamble_tactic(m), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_smt_tactic(m);}))))))))))))))), + and_then(mk_preamble_tactic(m), mk_lazy_tactic(m, p, [&](auto& m, auto const& p) { return mk_smt_tactic(m, p);}))))))))))))))), p); return st; } diff --git a/src/tactic/tactic.cpp b/src/tactic/tactic.cpp index ad296c985..0e0d93e90 100644 --- a/src/tactic/tactic.cpp +++ b/src/tactic/tactic.cpp @@ -74,7 +74,6 @@ void report_tactic_progress(char const * id, unsigned val) { IF_VERBOSE(TACTIC_VERBOSITY_LVL, verbose_stream() << "(" << id << " " << val << ")\n"); } } - statistics_report::~statistics_report() { statistics st; if (m_tactic) @@ -108,6 +107,10 @@ public: ensure_tactic(); (*m_tactic)(in, result); } + void updt_params(params_ref const& p) override { + this->p.append(p); + if (m_tactic) m_tactic->updt_params(p); + } void cleanup() override { if (m_tactic) m_tactic->cleanup(); } char const* name() const override { return "lazy tactic"; } void collect_statistics(statistics& st) const override { if (m_tactic) m_tactic->collect_statistics(st); }