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.