#include #include "storm/utility/parametric.h" #include "storm/utility/constants.h" #include "storm/utility/macros.h" #include "storm/settings/SettingsManager.h" #include "storm/exceptions/IllegalArgumentException.h" #include "storm/exceptions/NotImplementedException.h" #ifdef STORM_HAVE_CARL #include #include #endif namespace storm { namespace utility{ namespace parametric { #ifdef STORM_HAVE_CARL template<> typename CoefficientType::type evaluate(storm::RationalFunction const& function, Valuation const& valuation){ return function.evaluate(valuation); } template<> void gatherOccurringVariables(storm::RationalFunction const& function, std::set::type>& variableSet){ function.gatherVariables(variableSet); } template<> bool isLinear(storm::RationalFunction const& function) { return storm::utility::isConstant(function.denominator()) && function.nominator().isLinear(); } template<> bool isMultiLinearPolynomial(storm::RationalFunction const& function) { if (!storm::utility::isConstant(function.denominator())) { return false; } auto varInfos = function.nominator().getVarInfo(); for (auto const& varInfo : varInfos) { if (varInfo.second.maxDegree() > 1) { return false; } } return true; } #endif } } }