SMT-RAT
24.02
Toolbox for Strategic and Parallel Satisfiability-Modulo-Theories Solving
|
Main datastructures. More...
Namespaces | |
detail | |
Data Structures | |
struct | TaggedIndexedRoot |
class | DelineationInterval |
An interval of a delineation. More... | |
class | Delineation |
Represents the delineation of a set of polynomials (at a sample), that is. More... | |
class | BaseDerivation |
A BaseDerivation has a level and a set of properties of this level, and an underlying derivation representing the lower levels. More... | |
class | DelineatedDerivation |
A DelineatedDerivation is a BaseDerivation with a Delineation and an underlying SampledDerivation. More... | |
class | SampledDerivation |
A SampledDerivation is a DelineatedDerivation with a sample and an DelineationInterval w.r.t. More... | |
class | DerivationRef |
A reference to a derivation, which is either. More... | |
struct | PolyRef |
Refers to a polynomial. More... | |
struct | PolyConstraint |
class | PolyPool |
A pool for polynomials. More... | |
class | Projections |
Encapsulates all computations on polynomials. More... | |
struct | property_hash |
struct | PropertiesTContent |
struct | PropertiesTContent< T, true > |
struct | PropertiesTContent< T, false > |
struct | PropertiesT |
Set of properties. More... | |
struct | PropertiesT< T, Ts... > |
struct | CellRepresentation |
Represents a cell. More... | |
struct | CoveringRepresentation |
Represents a covering over a cell. More... | |
struct | IndexedRoot |
Represents the i-th root of a multivariate polynomial at its main variable (given an appropriate sample). More... | |
struct | PiecewiseLinearInfo |
struct | CompoundMinMax |
Represents the minimum function of the contained indexed root functions. More... | |
struct | CompoundMaxMin |
Represents the maximum function of the contained indexed root functions. More... | |
class | RootFunction |
class | Bound |
Bound type of a SymbolicInterval. More... | |
class | SymbolicInterval |
A symbolic interal whose bounds are defined by indexed root expressions. More... | |
class | CoveringDescription |
Describes a covering of the real line by SymbolicIntervals (given an appropriate sample). More... | |
struct | IndexedRootRelation |
A relation between two roots. More... | |
class | IndexedRootOrdering |
Describes an ordering of IndexedRoots. More... | |
Typedefs | |
using | RootMap = boost::container::flat_map< RAN, std::vector< TaggedIndexedRoot > > |
using | RootMapPlain = boost::container::flat_map< RAN, std::vector< IndexedRoot > > |
template<typename Properties > | |
using | BaseDerivationRef = std::shared_ptr< BaseDerivation< Properties > > |
template<typename Properties > | |
using | DelineatedDerivationRef = std::shared_ptr< DelineatedDerivation< Properties > > |
template<typename Properties > | |
using | SampledDerivationRef = std::shared_ptr< SampledDerivation< Properties > > |
using | level_t = unsigned |
using | id_t = unsigned |
template<typename T > | |
using | PropertiesTSet = boost::container::flat_set< T > |
Functions | |
std::ostream & | operator<< (std::ostream &os, const TaggedIndexedRoot &data) |
bool | operator== (const TaggedIndexedRoot &lhs, const TaggedIndexedRoot &rhs) |
bool | operator< (const TaggedIndexedRoot &lhs, const TaggedIndexedRoot &rhs) |
std::ostream & | operator<< (std::ostream &os, const DelineationInterval &data) |
std::ostream & | operator<< (std::ostream &os, const Delineation &data) |
bool | lower_lt_lower (const DelineationInterval &del1, const DelineationInterval &del2) |
Compares the lower bounds of two DelineationIntervals. More... | |
bool | lower_eq_lower (const DelineationInterval &del1, const DelineationInterval &del2) |
Compares the lower bounds of two DelineationIntervals. More... | |
bool | upper_lt_upper (const DelineationInterval &del1, const DelineationInterval &del2) |
Compares the upper bounds of two DelineationIntervals. More... | |
bool | upper_lt_lower (const DelineationInterval &del1, const DelineationInterval &del2) |
Compares an upper bound with a lower bound of DelineationIntervals. More... | |
bool | upper_eq_upper (const DelineationInterval &del1, const DelineationInterval &del2) |
Compares the upper bounds of two DelineationIntervals. More... | |
template<typename P > | |
bool | operator== (const DerivationRef< P > &lhs, const DerivationRef< P > &rhs) |
template<typename P > | |
bool | operator< (const DerivationRef< P > &lhs, const DerivationRef< P > &rhs) |
template<typename Properties > | |
DerivationRef< Properties > | make_derivation (Projections &proj, const Assignment &assignment, size_t level) |
Initializes a derivation according the the given assignment and level. More... | |
template<typename Properties > | |
SampledDerivationRef< Properties > | make_sampled_derivation (DelineatedDerivationRef< Properties > delineated, const RAN &main_sample) |
Initializes a sampled derivation w.r.t. More... | |
template<typename Properties > | |
SampledDerivationRef< Properties > | make_sampled_derivation (SampledDerivationRef< Properties > underlying, const RAN &main_sample) |
Initializes a sampled derivation w.r.t. More... | |
template<typename Properties > | |
void | merge_underlying (std::vector< SampledDerivationRef< Properties >> &derivations) |
Merges the underlying derivations of a set of sampled derivations. More... | |
template<typename Properties > | |
SampledDerivationRef< Properties > | merge (std::vector< SampledDerivationRef< Properties >> &derivations) |
Merges a set of sampled derivations. More... | |
bool | operator< (const PolyRef &lhs, const PolyRef &rhs) |
bool | operator== (const PolyRef &lhs, const PolyRef &rhs) |
bool | operator!= (const PolyRef &lhs, const PolyRef &rhs) |
std::ostream & | operator<< (std::ostream &os, const PolyRef &data) |
bool | operator< (const PolyConstraint &lhs, const PolyConstraint &rhs) |
bool | operator== (const PolyConstraint &lhs, const PolyConstraint &rhs) |
bool | operator!= (const PolyConstraint &lhs, const PolyConstraint &rhs) |
std::ostream & | operator<< (std::ostream &os, const PolyConstraint &data) |
auto | base_level (Polynomial poly) |
template<class T , class... Ts> | |
void | prop_insert (PropertiesT< T, Ts... > &sets, const T &element) |
template<class S , class T , class... Ts, typename std::enable_if<!std::is_same< S, T >::value >::type > | |
void | prop_insert (PropertiesT< T, Ts... > &sets, const S &element) |
template<class T , class... Ts> | |
bool | prop_has (const PropertiesT< T, Ts... > &sets, const T &element) |
template<class S , class T , class... Ts, typename std::enable_if<!std::is_same< S, T >::value >::type > | |
bool | prop_has (const PropertiesT< T, Ts... > &sets, const S &element) |
template<class T , class... Ts> | |
const auto & | prop_get (const PropertiesT< T, Ts... > &sets) |
template<class S , class T , class... Ts, typename std::enable_if<!std::is_same< S, T >::value >::type > | |
const auto & | prop_get (const PropertiesT< T, Ts... > &sets) |
template<class T , class... Ts> | |
void | merge (PropertiesT< T, Ts... > &sets_a, const PropertiesT< T, Ts... > &sets_b) |
template<typename P > | |
std::ostream & | operator<< (std::ostream &os, const CellRepresentation< P > &data) |
template<typename P > | |
std::ostream & | operator<< (std::ostream &os, const CoveringRepresentation< P > &data) |
bool | operator== (const IndexedRoot &lhs, const IndexedRoot &rhs) |
bool | operator< (const IndexedRoot &lhs, const IndexedRoot &rhs) |
bool | operator!= (const IndexedRoot &lhs, const IndexedRoot &rhs) |
std::ostream & | operator<< (std::ostream &os, const IndexedRoot &data) |
bool | operator== (const CompoundMinMax &lhs, const CompoundMinMax &rhs) |
bool | operator< (const CompoundMinMax &lhs, const CompoundMinMax &rhs) |
bool | operator!= (const CompoundMinMax &lhs, const CompoundMinMax &rhs) |
std::ostream & | operator<< (std::ostream &os, const CompoundMinMax &data) |
bool | operator== (const CompoundMaxMin &lhs, const CompoundMaxMin &rhs) |
bool | operator< (const CompoundMaxMin &lhs, const CompoundMaxMin &rhs) |
bool | operator!= (const CompoundMaxMin &lhs, const CompoundMaxMin &rhs) |
std::ostream & | operator<< (std::ostream &os, const CompoundMaxMin &data) |
bool | operator== (const RootFunction &lhs, const RootFunction &rhs) |
bool | operator< (const RootFunction &lhs, const RootFunction &rhs) |
bool | operator!= (const RootFunction &lhs, const RootFunction &rhs) |
std::ostream & | operator<< (std::ostream &os, const RootFunction &data) |
std::ostream & | operator<< (std::ostream &os, const SymbolicInterval &data) |
std::ostream & | operator<< (std::ostream &os, const CoveringDescription &data) |
bool | operator== (const IndexedRootRelation &lhs, const IndexedRootRelation &rhs) |
bool | operator< (const IndexedRootRelation &lhs, const IndexedRootRelation &rhs) |
std::ostream & | operator<< (std::ostream &os, const IndexedRootRelation &data) |
std::ostream & | operator<< (std::ostream &os, const IndexedRootOrdering &data) |
Main datastructures.
We assume a fixed variable ordering VariableOrdering. All polynomials are pooled in PolyPool w.r.t. this ordering, that is, they are identified by a PolyRef (a pair of the polynomial's level and an ID on this level). Projection results are cached in Projections. The latter holds a reference to a PolyPool. An instance Projections will be required for all kinds of operations and passed during various function calls. Thus, we initialize these data structures as follows:
VariableOrdering vars; // a variable ordering of all variables that will occur. datastructures::PolyPool pool(vars); datastructures::Projections proj(pool);
Note that PolyPool and Projections do not do reference counting; the cache needs to be cleared explicitly, see Projections::clear_cache and Projections::clear_assignment_cache.
The basic datastructures for representing mathematical objects are datastructures::IndexedRoot, datastructures::SymbolicInterval, datastructures::CoveringDescription, and datastructures::IndexedRootOrdering.
datastructures::PropertiesT is the datastructure for storing properties on a single level.
If you work on an algorithm using this framework, you don't need to know this datastructure. If you need to implement a new property, then you find the interfaces a property needs to implement there.
datastructures::Delineation is the datastructure for storing the delineation of the indexed roots that stem from properties.
If you work on an algorithm using this framework, you don't need to know this datastructure. If you need to implement a new property or a heuristic for describing a cell (i.e. compute a representation), then you might be interested in this.
In the derivation datastructures, all data regarding the derivation is stored - that is the current sample points, the set of properties, the delineation of roots and the possible cell boundaries.
This datastructure is recursive, that is, each derivation object handles only a single level and holds a pointer to a derivation object of the next lower level (the underyling derivation). All operations are forwarded to lower levels whenever neccessary.
Furthermore, there are three types of derivations:
datastructures::DerivationRef allows to reference a derivation independent of its type.
For initializing derivations properly, use datastructures::make_derivation. To create a sampled derivation from a delineated derivation and a sample, use datastructures::make_sampled_derivation. For merging underlying derivations, use datastructures::merge_underlying.
For more information on memory management read datastructures::DerivationRef.
The derivation objects do not store heuristic decisions, they just describe the current state. At some point, a representation of this state needs to be determined that is passed to the operator. This heuristic decision is stored in datastructures::CellRepresentation or datastructures::CoveringRepresentation.
The heuristics for computing representations are in representation.
The operators work on derivations and representations.
using smtrat::cadcells::datastructures::BaseDerivationRef = typedef std::shared_ptr<BaseDerivation<Properties> > |
Definition at line 20 of file derivation.h.
using smtrat::cadcells::datastructures::DelineatedDerivationRef = typedef std::shared_ptr<DelineatedDerivation<Properties> > |
Definition at line 22 of file derivation.h.
using smtrat::cadcells::datastructures::id_t = typedef unsigned |
Definition at line 11 of file polynomials.h.
using smtrat::cadcells::datastructures::level_t = typedef unsigned |
Definition at line 10 of file polynomials.h.
using smtrat::cadcells::datastructures::PropertiesTSet = typedef boost::container::flat_set<T> |
Definition at line 19 of file properties.h.
using smtrat::cadcells::datastructures::RootMap = typedef boost::container::flat_map<RAN, std::vector<TaggedIndexedRoot> > |
Definition at line 31 of file delineation.h.
using smtrat::cadcells::datastructures::RootMapPlain = typedef boost::container::flat_map<RAN, std::vector<IndexedRoot> > |
Definition at line 32 of file delineation.h.
using smtrat::cadcells::datastructures::SampledDerivationRef = typedef std::shared_ptr<SampledDerivation<Properties> > |
Definition at line 25 of file derivation.h.
|
inline |
Definition at line 56 of file polynomials.h.
|
inline |
Compares the lower bounds of two DelineationIntervals.
It respects whether the interval is a section or sector.
Definition at line 276 of file delineation.h.
|
inline |
Compares the lower bounds of two DelineationIntervals.
It respects whether the interval is a section or sector.
Definition at line 266 of file delineation.h.
DerivationRef<Properties> smtrat::cadcells::datastructures::make_derivation | ( | Projections & | proj, |
const Assignment & | assignment, | ||
size_t | level | ||
) |
Initializes a derivation according the the given assignment and level.
Definition at line 361 of file derivation.h.
SampledDerivationRef<Properties> smtrat::cadcells::datastructures::make_sampled_derivation | ( | DelineatedDerivationRef< Properties > | delineated, |
const RAN & | main_sample | ||
) |
Initializes a sampled derivation w.r.t.
the delineated derivation and sample.
Definition at line 385 of file derivation.h.
SampledDerivationRef<Properties> smtrat::cadcells::datastructures::make_sampled_derivation | ( | SampledDerivationRef< Properties > | underlying, |
const RAN & | main_sample | ||
) |
Initializes a sampled derivation w.r.t.
the delineated derivation and sample.
Definition at line 397 of file derivation.h.
void smtrat::cadcells::datastructures::merge | ( | PropertiesT< T, Ts... > & | sets_a, |
const PropertiesT< T, Ts... > & | sets_b | ||
) |
SampledDerivationRef<Properties> smtrat::cadcells::datastructures::merge | ( | std::vector< SampledDerivationRef< Properties >> & | derivations | ) |
Merges a set of sampled derivations.
After the operation, all sampled derivations point to the same underlying derivation.
Definition at line 427 of file derivation.h.
void smtrat::cadcells::datastructures::merge_underlying | ( | std::vector< SampledDerivationRef< Properties >> & | derivations | ) |
Merges the underlying derivations of a set of sampled derivations.
After the operation, all sampled derivations point to the same underlying derivation.
Definition at line 408 of file derivation.h.
|
inline |
|
inline |
|
inline |
|
inline |
Definition at line 48 of file polynomials.h.
|
inline |
Definition at line 30 of file polynomials.h.
|
inline |
|
inline |
|
inline |
bool smtrat::cadcells::datastructures::operator< | ( | const DerivationRef< P > & | lhs, |
const DerivationRef< P > & | rhs | ||
) |
Definition at line 137 of file derivation.h.
|
inline |
|
inline |
|
inline |
Definition at line 42 of file polynomials.h.
|
inline |
Definition at line 24 of file polynomials.h.
|
inline |
|
inline |
Definition at line 27 of file delineation.h.
|
inline |
Definition at line 31 of file representation.h.
|
inline |
|
inline |
|
inline |
std::ostream& smtrat::cadcells::datastructures::operator<< | ( | std::ostream & | os, |
const CoveringRepresentation< P > & | data | ||
) |
Definition at line 94 of file representation.h.
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Definition at line 51 of file polynomials.h.
|
inline |
Definition at line 33 of file polynomials.h.
|
inline |
|
inline |
|
inline |
Definition at line 17 of file delineation.h.
|
inline |
|
inline |
bool smtrat::cadcells::datastructures::operator== | ( | const DerivationRef< P > & | lhs, |
const DerivationRef< P > & | rhs | ||
) |
Definition at line 133 of file derivation.h.
|
inline |
|
inline |
|
inline |
Definition at line 45 of file polynomials.h.
|
inline |
Definition at line 27 of file polynomials.h.
|
inline |
|
inline |
Definition at line 24 of file delineation.h.
const auto& smtrat::cadcells::datastructures::prop_get | ( | const PropertiesT< T, Ts... > & | sets | ) |
Definition at line 85 of file properties.h.
const auto& smtrat::cadcells::datastructures::prop_get | ( | const PropertiesT< T, Ts... > & | sets | ) |
Definition at line 89 of file properties.h.
bool smtrat::cadcells::datastructures::prop_has | ( | const PropertiesT< T, Ts... > & | sets, |
const S & | element | ||
) |
Definition at line 79 of file properties.h.
bool smtrat::cadcells::datastructures::prop_has | ( | const PropertiesT< T, Ts... > & | sets, |
const T & | element | ||
) |
Definition at line 70 of file properties.h.
void smtrat::cadcells::datastructures::prop_insert | ( | PropertiesT< T, Ts... > & | sets, |
const S & | element | ||
) |
Definition at line 64 of file properties.h.
void smtrat::cadcells::datastructures::prop_insert | ( | PropertiesT< T, Ts... > & | sets, |
const T & | element | ||
) |
Definition at line 56 of file properties.h.
|
inline |
Compares the upper bounds of two DelineationIntervals.
It respects whether the interval is a section or sector.
Definition at line 307 of file delineation.h.
|
inline |
Compares an upper bound with a lower bound of DelineationIntervals.
It respects whether the interval is a section or sector.
Definition at line 296 of file delineation.h.
|
inline |
Compares the upper bounds of two DelineationIntervals.
It respects whether the interval is a section or sector.
Definition at line 286 of file delineation.h.