SMT-RAT  24.02
Toolbox for Strategic and Parallel Satisfiability-Modulo-Theories Solving
smtrat::mcsat::onecellcad::recursive::RecursiveCAD Class Reference

#include <OneCellCAD.h>

Inheritance diagram for smtrat::mcsat::onecellcad::recursive::RecursiveCAD:
Collaboration diagram for smtrat::mcsat::onecellcad::recursive::RecursiveCAD:

Public Member Functions

bool isAlreadyProcessed (const TagPoly &poly)
 
void shrinkSingleComponent (const std::size_t polyLevel, const Poly &poly, CADCell &cell)
 Shrink the component of the 'cell' at the 'boundCandidate's level around the given point if the 'boundCandidate' is a tighter bound. More...
 
std::vector< PolypartialDerivativesLayerWithSomeNonEarlyVanishingPoly (const TagPoly &mainPoly)
 Find the smallest index m such that in the set S of all m-th partial derivatives of the given poly, such that there is a derivative that does not vanish early [brown15]. More...
 
ShrinkResult refineNull (const TagPoly &boundCandidate, CADCell &cell)
 
ShrinkResult shrinkCellWithEarlyVanishingPoly (const TagPoly &boundCandidate, CADCell &cell)
 
ShrinkResult shrinkCellWithIrreducibleFactorsOfPoly (const TagPoly &poly, CADCell &cell)
 
ShrinkResult refineNonNull (const TagPoly &boundCandidate, CADCell &cell)
 
ShrinkResult shrinkCellWithPolyHavingPointAsRoot (const TagPoly &boundCandidate, CADCell &cell)
 
bool hasPolyLastVariableRootWithinBounds (const RAN &low, const RAN &high, const Poly &poly, const std::size_t polyLevel)
 Check if there is a root of the given polynomial—that becomes univariate after pluggin in all but the last variable wrt. More...
 
ShrinkResult shrinkCellWithNonRootPoint (const TagPoly &boundCandidate, CADCell &cell)
 
ShrinkResult shrinkCell (const TagPoly &boundCandidate, CADCell &cell)
 Merge the given open OpenCADCell 'cell' that contains the given 'point' (called "alpha" in [brown15]) with a polynomial 'poly'. More...
 
std::optional< CADCellpointEnclosingCADCell (const std::vector< std::vector< onecellcad::TagPoly >> &polys)
 Construct a single CADCell that contains the given 'point' and is sign-invariant for the given polynomials in 'polys'. More...
 
 OneCellCAD (const std::vector< carl::Variable > &variableOrder, const RealAlgebraicPoint< Rational > &point)
 
std::map< carl::Variable, RANprefixPointToStdMap (const std::size_t componentCount)
 Create a mapping from the first variables (with index 0 to 'componentCount') in the 'variableOrder' to the first components of the given 'point'. More...
 
std::vector< RANisolateLastVariableRoots (const std::size_t polyLevel, const Poly &poly)
 src/lib/datastructures/mcsat/onecellcad/OneCellCAD.h Given a poly p(x1,..,xn), return all roots of the univariate poly p(a1,..,an-1, xn), where a1,..an-1 are the first algebraic real components from 'point' (SORTED!). More...
 
bool vanishesEarly (const std::size_t polyLevel, const Poly &poly)
 Check if an n-variate 'poly' p(x1,..,xn) with n>=1 already becomes the zero poly after plugging in p(a1,..,an-1, xn), where a1,..an-1 are the first n-1 algebraic real components from 'point'. More...
 
bool isPointRootOfPoly (const std::size_t polyLevel, const Poly &poly)
 
bool isPointRootOfPoly (const TagPoly &poly)
 
std::optional< PolycoeffNonNull (const TagPoly &boundCandidate)
 
bool isMainPointInsideCell (const CADCell &cell)
 

Data Fields

const std::vector< carl::Variable > & variableOrder
 Variables can also be indexed by level. More...
 
const RealAlgebraicPoint< Rational > & point
 

Private Attributes

std::vector< std::vector< TagPoly > > projFactorSet
 Projection factor set divided into levels. More...
 
std::vector< TagPolydelineators
 Only delinating polys. More...
 

Detailed Description

Definition at line 45 of file OneCellCAD.h.

Member Function Documentation

◆ coeffNonNull()

std::optional<Poly> smtrat::mcsat::onecellcad::OneCellCAD::coeffNonNull ( const TagPoly boundCandidate)
inlineinherited

Definition at line 529 of file utils.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ hasPolyLastVariableRootWithinBounds()

bool smtrat::mcsat::onecellcad::recursive::RecursiveCAD::hasPolyLastVariableRootWithinBounds ( const RAN low,
const RAN high,
const Poly poly,
const std::size_t  polyLevel 
)
inline

Check if there is a root of the given polynomial—that becomes univariate after pluggin in all but the last variable wrt.

the given variableOrder—, that lies between the given 'low' and 'high' bounds.

Definition at line 440 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ isAlreadyProcessed()

bool smtrat::mcsat::onecellcad::recursive::RecursiveCAD::isAlreadyProcessed ( const TagPoly poly)
inline

Definition at line 59 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ isMainPointInsideCell()

bool smtrat::mcsat::onecellcad::OneCellCAD::isMainPointInsideCell ( const CADCell cell)
inlineinherited

Definition at line 574 of file utils.h.

Here is the caller graph for this function:

◆ isolateLastVariableRoots()

std::vector<RAN> smtrat::mcsat::onecellcad::OneCellCAD::isolateLastVariableRoots ( const std::size_t  polyLevel,
const Poly poly 
)
inlineinherited

src/lib/datastructures/mcsat/onecellcad/OneCellCAD.h Given a poly p(x1,..,xn), return all roots of the univariate poly p(a1,..,an-1, xn), where a1,..an-1 are the first algebraic real components from 'point' (SORTED!).

Definition at line 484 of file utils.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ isPointRootOfPoly() [1/2]

bool smtrat::mcsat::onecellcad::OneCellCAD::isPointRootOfPoly ( const std::size_t  polyLevel,
const Poly poly 
)
inlineinherited

Definition at line 511 of file utils.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ isPointRootOfPoly() [2/2]

bool smtrat::mcsat::onecellcad::OneCellCAD::isPointRootOfPoly ( const TagPoly poly)
inlineinherited

Definition at line 524 of file utils.h.

Here is the call graph for this function:

◆ OneCellCAD()

smtrat::mcsat::onecellcad::OneCellCAD::OneCellCAD
inline

Definition at line 459 of file utils.h.

◆ partialDerivativesLayerWithSomeNonEarlyVanishingPoly()

std::vector<Poly> smtrat::mcsat::onecellcad::recursive::RecursiveCAD::partialDerivativesLayerWithSomeNonEarlyVanishingPoly ( const TagPoly mainPoly)
inline

Find the smallest index m such that in the set S of all m-th partial derivatives of the given poly, such that there is a derivative that does not vanish early [brown15].

Note that m > 0 i.e, this function never just returns the given poly, which is the 0th partial derivative of itself.

Parameters
polymust not be a const-poly like 2, otherwise this function does not terminate.
Returns
Actually only returns the set S

Definition at line 179 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pointEnclosingCADCell()

std::optional<CADCell> smtrat::mcsat::onecellcad::recursive::RecursiveCAD::pointEnclosingCADCell ( const std::vector< std::vector< onecellcad::TagPoly >> &  polys)
inline

Construct a single CADCell that contains the given 'point' and is sign-invariant for the given polynomials in 'polys'.

The construction fails if 'polys' are not well-oriented [mccallum84]. Note that this cell is cylindrical only with respect to the given 'variableOrder'.

Parameters
variableOrdermust contain unique variables and at least one, because constant polynomials (without a variable) are prohibited.
pointpoint.size() >= variables.size().
polysmust contain only non-constant, irreducible polynomials that mention only variables that appear in 'variableOrder'.

Definition at line 595 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ prefixPointToStdMap()

std::map<carl::Variable, RAN> smtrat::mcsat::onecellcad::OneCellCAD::prefixPointToStdMap ( const std::size_t  componentCount)
inlineinherited

Create a mapping from the first variables (with index 0 to 'componentCount') in the 'variableOrder' to the first components of the given 'point'.

Definition at line 471 of file utils.h.

Here is the caller graph for this function:

◆ refineNonNull()

ShrinkResult smtrat::mcsat::onecellcad::recursive::RecursiveCAD::refineNonNull ( const TagPoly boundCandidate,
CADCell cell 
)
inline

Definition at line 311 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ refineNull()

ShrinkResult smtrat::mcsat::onecellcad::recursive::RecursiveCAD::refineNull ( const TagPoly boundCandidate,
CADCell cell 
)
inline

Definition at line 211 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shrinkCell()

ShrinkResult smtrat::mcsat::onecellcad::recursive::RecursiveCAD::shrinkCell ( const TagPoly boundCandidate,
CADCell cell 
)
inline

Merge the given open OpenCADCell 'cell' that contains the given 'point' (called "alpha" in [brown15]) with a polynomial 'poly'.

Before the merge 'cell' represents a region that is sign-invariant on other (previously merged) polynomials (all signs are non-zero). The returned cell represents a region that is additionally sign-invariant on 'poly' (also with non-zero sign).

Returns
either an OpenCADCell or nothing (representing a failed construction)

Definition at line 533 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shrinkCellWithEarlyVanishingPoly()

ShrinkResult smtrat::mcsat::onecellcad::recursive::RecursiveCAD::shrinkCellWithEarlyVanishingPoly ( const TagPoly boundCandidate,
CADCell cell 
)
inline

Definition at line 249 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shrinkCellWithIrreducibleFactorsOfPoly()

ShrinkResult smtrat::mcsat::onecellcad::recursive::RecursiveCAD::shrinkCellWithIrreducibleFactorsOfPoly ( const TagPoly poly,
CADCell cell 
)
inline

Definition at line 294 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shrinkCellWithNonRootPoint()

ShrinkResult smtrat::mcsat::onecellcad::recursive::RecursiveCAD::shrinkCellWithNonRootPoint ( const TagPoly boundCandidate,
CADCell cell 
)
inline

Definition at line 453 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shrinkCellWithPolyHavingPointAsRoot()

ShrinkResult smtrat::mcsat::onecellcad::recursive::RecursiveCAD::shrinkCellWithPolyHavingPointAsRoot ( const TagPoly boundCandidate,
CADCell cell 
)
inline

Definition at line 358 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shrinkSingleComponent()

void smtrat::mcsat::onecellcad::recursive::RecursiveCAD::shrinkSingleComponent ( const std::size_t  polyLevel,
const Poly poly,
CADCell cell 
)
inline

Shrink the component of the 'cell' at the 'boundCandidate's level around the given point if the 'boundCandidate' is a tighter bound.

Don't recursively shrink lower level components of the cell. Note that a cell's sector may collapse into a section, which is why we need to pass in a cell and not only its sector. Note that this shrink function is always "successful", even if the cell was not shrunk.

Parameters
boundCandidateMust be a non-const irreducible polynomial that does not vanish early.

Definition at line 83 of file OneCellCAD.h.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ vanishesEarly()

bool smtrat::mcsat::onecellcad::OneCellCAD::vanishesEarly ( const std::size_t  polyLevel,
const Poly poly 
)
inlineinherited

Check if an n-variate 'poly' p(x1,..,xn) with n>=1 already becomes the zero poly after plugging in p(a1,..,an-1, xn), where a1,..an-1 are the first n-1 algebraic real components from 'point'.

Definition at line 498 of file utils.h.

Here is the call graph for this function:
Here is the caller graph for this function:

Field Documentation

◆ delineators

std::vector<TagPoly> smtrat::mcsat::onecellcad::recursive::RecursiveCAD::delineators
private

Only delinating polys.

This collection is called "P_dln" in [brown15]

Definition at line 54 of file OneCellCAD.h.

◆ point

const RealAlgebraicPoint<Rational>& smtrat::mcsat::onecellcad::OneCellCAD::point
inherited

Definition at line 456 of file utils.h.

◆ projFactorSet

std::vector<std::vector<TagPoly> > smtrat::mcsat::onecellcad::recursive::RecursiveCAD::projFactorSet
private

Projection factor set divided into levels.

Polys with mathematical level 1 are at projFactorSet[0] This collection is called "P_prj" in [brown15]

Definition at line 51 of file OneCellCAD.h.

◆ variableOrder

const std::vector<carl::Variable>& smtrat::mcsat::onecellcad::OneCellCAD::variableOrder
inherited

Variables can also be indexed by level.

Polys with mathematical level 1 contain the variable in variableOrder[0]

Definition at line 455 of file utils.h.


The documentation for this class was generated from the following file: