4 #include "../datastructures/derivation.h"
13 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"-> del(" << poly <<
") <= proj_del(" << poly <<
") && sgn_inv(ldcf(" << poly <<
") [" << deriv.
proj().
ldcf(poly) <<
"])");
16 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"-> del(" << poly <<
") <= proj_del(" << poly <<
")");
23 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"proj_del(" << poly <<
")");
24 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"-> proj_del(" << poly <<
") <= non_null(" << poly <<
") && ord_inv(disc(" << poly <<
") [" << deriv.
proj().
disc(poly) <<
"]) && cell_connected(" << (poly.
base_level) <<
")");
33 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"ord_inv(" << poly <<
"), " << poly <<
" irreducible");
35 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"-> ord_inv(" << poly <<
") <= " << poly <<
" const");
38 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"-> ord_inv(" << poly <<
") <= proj_del(" << poly <<
") && sgn_inv(" << poly <<
") && cell_connected(" << poly.
level <<
")");
42 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"-> ord_inv(" << poly <<
") <= " << poly <<
"(" << deriv.
sample() <<
") != 0 && sgn_inv(" << poly <<
")");
50 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"ord_inv(" << poly <<
")");
52 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"-> ord_inv(" << poly <<
") <= " << poly <<
" const");
55 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"-> ord_inv(" << poly <<
") <= ord_inv(factors(" << poly <<
")) <=> ord_inv(" << factors <<
")");
56 for (
const auto& factor : factors) {
64 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"ir_ord(" << ordering <<
", " << deriv.
sample() <<
")");
67 for (
const auto& rel : ordering.
data()) {
68 assert(rel.first.is_root() && rel.second.is_root());
69 auto& first = rel.first.root();
70 auto& second = rel.second.root();
71 if (first.poly != second.poly) {
82 SMTRAT_LOG_TRACE(
"smtrat.cadcells.operators.rules",
"sgn_inv(" << poly <<
"), " << poly <<
" irreducible");
83 if (ordering_non_projective_polys.find(poly) != ordering_non_projective_polys.end()) {
85 }
else if (cell.
lower().is_infty() || cell.
upper().is_infty()) {
Describes an ordering of IndexedRoots.
const auto & data() const
bool is_projective() const
const std::vector< PolyRef > & factors_nonconst(PolyRef p)
bool is_ldcf_zero(const Assignment &sample, PolyRef p)
size_t num_roots(const Assignment &sample, PolyRef p)
bool is_zero(const Assignment &sample, PolyRef p)
A SampledDerivation is a DelineatedDerivation with a sample and an DelineationInterval w....
const Assignment & sample() const
bool contains(const P &property) const
A symbolic interal whose bounds are defined by indexed root expressions.
const auto & lower() const
Return the lower bound.
const auto & upper() const
Returns the upper bound.
Implementation of derivation rules.
void root_ordering_holds_pdel(datastructures::SampledDerivation< P > &deriv, const datastructures::IndexedRootOrdering &ordering)
void poly_ord_inv_pdel(datastructures::SampledDerivation< P > &deriv, datastructures::PolyRef poly)
void poly_irreducible_sgn_inv_pdel(datastructures::SampledDerivation< P > &deriv, const datastructures::SymbolicInterval &cell, const datastructures::IndexedRootOrdering &, const boost::container::flat_set< datastructures::PolyRef > &ordering_non_projective_polys, datastructures::PolyRef poly)
bool poly_del_pdel(datastructures::SampledDerivation< P > &deriv, datastructures::PolyRef poly)
bool poly_non_null(datastructures::SampledDerivation< P > &deriv, datastructures::PolyRef poly)
void poly_irreducible_ord_inv_pdel(datastructures::SampledDerivation< P > &deriv, datastructures::PolyRef poly)
bool poly_proj_del(datastructures::SampledDerivation< P > &deriv, datastructures::PolyRef poly)
#define SMTRAT_LOG_TRACE(channel, msg)
level_t level
The level of the polynomial.
level_t base_level
The base level of the polynomial.