17 template<
typename Rational,
typename Poly>
19 template<
typename Rational,
typename Poly>
20 class ModelSubstitution;
21 template<
typename Rational,
typename Poly>
22 class ModelMVRootSubstitution;
23 template<
typename Rational,
typename Poly>
25 template<
typename Rational,
typename Poly,
typename Substitution,
typename... Args>
27 template<
typename Rational,
typename Poly,
typename Substitution,
typename... Args>
29 template<
typename Rational,
typename Poly>
43 return os << (iv.
positive ?
"+" :
"-") <<
"oo";
46 template<
typename Poly>
48 std::optional<MultivariateRoot<Poly>>
lower = std::nullopt;
50 std::optional<MultivariateRoot<Poly>>
upper = std::nullopt;
54 template<
typename Poly>
66 template<
typename Poly>
77 template<
typename RAN>
83 template<
typename RAN>
89 template<
typename RAN>
102 template<
typename Rational,
typename Poly>
104 template<
typename R,
typename P>
106 template<
typename R,
typename P>
108 template<
typename R,
typename P>
111 using RAN =
typename Poly::RootType;
131 template<
typename Variant>
138 [](
const auto& t) {
return Super(t); }
156 template<typename T, typename T2 = typename std::enable_if<convertible_to_variant<T, Super>::value, T>::type>
159 template<typename T, typename T2 = typename std::enable_if<convertible_to_variant<T, Super>::value, T>::type>
162 template<
typename ...Args>
185 template<
typename ...Args>
192 mData = createSubstitution<Rational,Poly>(mr).asSubstitution();
201 bool isBool()
const {
return std::holds_alternative<bool>(
mData); }
203 bool isSqrtEx()
const {
return std::holds_alternative<SqrtEx<Poly>>(
mData); }
204 bool isRAN()
const {
return std::holds_alternative<RAN>(
mData); }
208 bool isSubstitution()
const {
return std::holds_alternative<ModelSubstitutionPtr<Rational,Poly>>(
mData); }
210 return std::holds_alternative<InfinityValue>(
mData) && std::get<InfinityValue>(
mData).positive;
213 return std::holds_alternative<InfinityValue>(
mData) && !std::get<InfinityValue>(
mData).positive;
244 template<
typename Rational,
typename Poly>
249 template<
typename Rational,
typename Poly>
254 template<
typename R,
typename P>
267 return os << mv.
mData;
Represent a dynamic root, also known as a "root expression".
Represent a real algebraic number (RAN) in one of several ways:
carl is the main namespace for the library.
bool operator<(const BasicConstraint< P > &lhs, const BasicConstraint< P > &rhs)
ModelValue< Rational, Poly > createSubstitution(Args &&... args)
std::ostream & operator<<(std::ostream &os, const BasicConstraint< Poly > &c)
Prints the given constraint on the given stream.
void visit(const Formula< Pol > &formula, Visitor func)
Recursively calls func on every subformula.
bool operator==(const BasicConstraint< P > &lhs, const BasicConstraint< P > &rhs)
ModelSubstitutionPtr< Rational, Poly > createSubstitutionPtr(Args &&... args)
std::unique_ptr< ModelSubstitution< Rational, Poly > > ModelSubstitutionPtr
Represent a sum type/variant over the different kinds of values that can be assigned to the different...
const InfinityValue & asInfinity() const
bool isPlusInfinity() const
ModelValue & operator=(ModelValue &&mv)=default
ModelValue & operator=(const MultivariateRoot< Poly > &mr)
const RAN & asRAN() const
Super clone(const Variant &v) const
ModelValue & operator=(const std::variant< Args... > &variant)
ModelValue(const std::variant< Args... > &variant)
const SqrtEx< Poly > & asSqrtEx() const
const ModelSubstitutionPtr< Rational, Poly > & asSubstitution() const
const BVValue & asBVValue() const
bool isSymbolicInterval() const
friend std::ostream & operator<<(std::ostream &os, const ModelValue< R, P > &mv)
bool isMinusInfinity() const
ModelValue(const ModelValue &mv)
const Infinitesimal< RAN > & asInfinitesimal() const
const Rational & asRational() const
ModelValue()=default
Default constructor.
ModelValue & operator=(const ModelValue &mv)
const SortValue & asSortValue() const
ModelValue(ModelValue &&mv)=default
ModelSubstitutionPtr< Rational, Poly > & asSubstitution()
friend bool operator==(const ModelValue< R, P > &lhs, const ModelValue< R, P > &rhs)
bool isSubstitution() const
ModelValue(const MultivariateRoot< Poly > &mr)
bool isInfinitesimal() const
const SymbolicInterval< Poly > & asSymbolicInterval() const
const UFModel & asUFModel() const
ModelValue & operator=(const T &t)
Assign some value to the underlying variant.
typename Poly::RootType RAN
friend bool operator<(const ModelValue< R, P > &lhs, const ModelValue< R, P > &rhs)
std::variant< bool, Rational, SqrtEx< Poly >, RAN, BVValue, SortValue, UFModel, InfinityValue, ModelSubstitutionPtr< Rational, Poly >, SymbolicInterval< Poly >, Infinitesimal< RAN > > Super
Base type we are deriving from.
ModelValue(const T &_t)
Initialize the Assignment from some valid type of the underlying variant.
This class represents infinity or minus infinity, depending on its flag positive.
std::optional< MultivariateRoot< Poly > > lower
std::optional< MultivariateRoot< Poly > > upper
Implements a sort value, being a value of the uninterpreted domain specified by this sort.
Implements a sort value, being a value of the uninterpreted domain specified by this sort.