3 #include <carl-arith/core/Variables.h>
4 #include <carl-formula/formula/FormulaContent.h>
8 #include <carl-formula/formula/functions/PNF.h>
16 #ifdef SMTRAT_DEVOPTION_Statistics
20 auto [
prefix, matrix] = carl::to_pnf(input);
27 for (
const auto& q :
prefix) {
31 auto var_order = covering_ng::variables::get_variable_ordering<Settings::variable_ordering_heuristic>(
prefix, matrix);
34 #ifdef SMTRAT_DEVOPTION_Statistics
35 QeCoveringsStatistics::get_instance().set_variable_ordering(var_order);
40 cadcells::Polynomial::ContextType context(var_order);
46 f.set_formula(matrix);
47 f.extend_valuation(assignment);
50 return FormulaT(carl::FormulaType::FALSE);
53 return FormulaT(carl::FormulaType::TRUE);
56 auto [res, tree] = recurse_qe<typename Settings::op, typename Settings::formula_evaluation::Type, Settings::covering_heuristic, Settings::sampling_algorithm, Settings::cell_heuristic>(proj, f, assignment, variableQuantification);
57 if (res.is_failed() || res.is_failed_projection()) {
64 SMTRAT_LOG_DEBUG(
"smtrat.qe.coverings",
"Got simplified tree " << std::endl << tree);
71 return output_formula;
#define SMTRAT_VALIDATION_ADD(channel, name, formula, consistent)
Encapsulates all computations on polynomials.
void set_var_type(const carl::Variable &var, carl::Quantifier type)
carl::Assignment< RAN > Assignment
void simplify(ParameterTree &tree)
std::vector< T > prefix(const std::vector< T > vars, std::size_t prefixSize)
FormulaT to_formula_alternate(const cadcells::datastructures::PolyPool &pool, const covering_ng::ParameterTree &tree, bool positive)
FormulaT to_formula_true_only(const cadcells::datastructures::PolyPool &pool, const covering_ng::ParameterTree &tree)
std::optional< FormulaT > qe(const FormulaT &input)
carl::Formula< Poly > FormulaT
#define SMTRAT_LOG_FATAL(channel, msg)
#define SMTRAT_LOG_DEBUG(channel, msg)
#define SMTRAT_STATISTICS_CALL(function)
static constexpr covering_ng::variables::VariableOrderingHeuristics variable_ordering_heuristic