mirror of
https://github.com/Z3Prover/z3
synced 2025-05-03 05:47:01 +00:00
Add the ability to customize incremental pre-processing simplification for the SMTLIB2 front-end. The main new capability is to use pre-processing tactics in incremental mode that were previously not available. The main new capabilities are - solve-eqs - reduce-args - elim-unconstrained There are several more. Documentation and exposed simplifiers are populated incrementally. The current set of supported simplifiers can be inspected by using z3 with the --simplifiers flag or referring to https://microsoft.github.io/z3guide/docs/strategies/simplifiers Some pending features are: - add the ability to update parameters to simplifiers similar to how tactics can be controlled using parameters. - expose simplification solvers over the binary API.
77 lines
1.8 KiB
C++
77 lines
1.8 KiB
C++
/*++
|
|
Copyright (c) 2012 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
tactic_manager.cpp
|
|
|
|
Abstract:
|
|
|
|
Collection of tactics, simplifiers & probes
|
|
|
|
Author:
|
|
|
|
Leonardo (leonardo) 2012-03-06
|
|
|
|
Notes:
|
|
|
|
--*/
|
|
#include "cmd_context/tactic_manager.h"
|
|
|
|
tactic_manager::~tactic_manager() {
|
|
finalize_tactic_manager();
|
|
}
|
|
|
|
void tactic_manager::finalize_tactic_manager() {
|
|
std::for_each(m_tactics.begin(), m_tactics.end(), delete_proc<tactic_cmd>());
|
|
m_tactics.reset();
|
|
m_name2tactic.reset();
|
|
|
|
std::for_each(m_simplifiers.begin(), m_simplifiers.end(), delete_proc<simplifier_cmd>());
|
|
m_simplifiers.reset();
|
|
m_name2simplifier.reset();
|
|
|
|
std::for_each(m_probes.begin(), m_probes.end(), delete_proc<probe_info>());
|
|
m_probes.reset();
|
|
m_name2probe.reset();
|
|
}
|
|
|
|
void tactic_manager::insert(tactic_cmd * c) {
|
|
symbol const & s = c->get_name();
|
|
SASSERT(!m_name2tactic.contains(s));
|
|
m_name2tactic.insert(s, c);
|
|
m_tactics.push_back(c);
|
|
}
|
|
|
|
void tactic_manager::insert(simplifier_cmd * c) {
|
|
symbol const & s = c->get_name();
|
|
SASSERT(!m_name2simplifier.contains(s));
|
|
m_name2simplifier.insert(s, c);
|
|
m_simplifiers.push_back(c);
|
|
}
|
|
|
|
void tactic_manager::insert(probe_info * p) {
|
|
symbol const & s = p->get_name();
|
|
SASSERT(!m_name2probe.contains(s));
|
|
m_name2probe.insert(s, p);
|
|
m_probes.push_back(p);
|
|
}
|
|
|
|
tactic_cmd * tactic_manager::find_tactic_cmd(symbol const & s) const {
|
|
tactic_cmd * c = nullptr;
|
|
m_name2tactic.find(s, c);
|
|
return c;
|
|
}
|
|
|
|
simplifier_cmd * tactic_manager::find_simplifier_cmd(symbol const & s) const {
|
|
simplifier_cmd * c = nullptr;
|
|
m_name2simplifier.find(s, c);
|
|
return c;
|
|
}
|
|
|
|
probe_info * tactic_manager::find_probe(symbol const & s) const {
|
|
probe_info * p = nullptr;
|
|
m_name2probe.find(s, p);
|
|
return p;
|
|
}
|
|
|