19template<
typename FormulaType,
typename ValueType>
24template<
typename ValueType>
43struct PolynomialCache : std::unordered_map<RationalFunctionVariable, std::pair<std::map<UniPoly, uint64_t, UniPolyCompare>, std::vector<UniPoly>>> {
63template<
typename Container>
66 return boost::hash_range(c.begin(), c.end());
70class Annotation :
public std::unordered_map<std::vector<uint64_t>, RationalFunctionCoefficient, container_hash<std::vector<uint64_t>>> {
86 void operator*=(RationalFunctionCoefficient n);
131 std::vector<UniPoly>
getTerms()
const;
133 template<
typename ConstantType>
136 for (
auto const& [info, constant] : *
this) {
138 for (uint64_t i = 0; i < info.size(); i++) {
139 auto polynomial = this->polynomialCache->at(parameter).second[i];
141 auto coefficients = polynomial.coefficients();
143 for (uint64_t exponent = 0; exponent < coefficients.size(); exponent++) {
172 const std::shared_ptr<PolynomialCache> polynomialCache;
173 std::shared_ptr<Annotation> derivativeOfThis;
176std::ostream&
operator<<(std::ostream& os,
const Annotation& annotation);
221 std::pair<std::map<uint64_t, Annotation>, std::pair<std::vector<uint64_t>, std::map<uint64_t, std::set<uint64_t>>>> bigStepBFS(
225 const boost::optional<std::vector<RationalFunction>>& stateRewardVector,
const UniPolyAnnotationMap& storedAnnotations);
239 std::vector<std::pair<uint64_t, Annotation>> findBigStep(
const std::map<uint64_t, Annotation> bigStepAnnotations,
const RationalFunctionVariable& parameter,
244 uint64_t originalNumStates);
255 UniPolyAnnotationMap replaceWithNewTransitions(uint64_t state,
const std::vector<std::pair<uint64_t, Annotation>> transitions,
268 void updateUnreachableStates(
storage::BitVector& reachableStates, std::vector<uint64_t>
const& statesMaybeUnreachable,
302 uint64_t stateWithLabels,
const std::set<std::string>& labelsInFormula);
309 std::vector<storm::storage::MatrixEntry<uint64_t, RationalFunction>> joinDuplicateTransitions(
312 std::shared_ptr<RawPolynomialCache> rawPolynomialCache;
314 const std::shared_ptr<PolynomialCache> polynomialCache;
This class represents a discrete-time Markov chain.
This class manages the labeling of the state space with a number of (atomic) labels.
A bit vector that is internally represented as a vector of 64-bit values.
The flexible sparse matrix is used during state elimination.
ValueType pow(ValueType const &value, int_fast64_t exponent)
TargetType convertNumber(SourceType const &number)
carl::Interval< double > Interval
Interval type.
carl::UnivariatePolynomial< RationalFunctionCoefficient > RawUnivariatePolynomial
carl::Variable RationalFunctionVariable
carl::RationalFunction< Polynomial, true > RationalFunction