11                                                                                           std::shared_ptr<storm::logic::Formula const> 
const& formula) {
 
 
   18                                                                                             std::shared_ptr<storm::logic::Formula const> 
const& formula) {
 
 
   24                                                                                           std::shared_ptr<storm::logic::Formula const> 
const& formula,
 
   27    STORM_LOG_THROW(formula->isProbabilityOperatorFormula(), storm::exceptions::InvalidPropertyException,
 
   28                    "Counterexample generation does not support this kind of formula. Expecting a probability operator as the outermost formula element.");
 
   30    STORM_LOG_THROW(probabilityOperator.
hasBound(), storm::exceptions::InvalidPropertyException, 
"Counterexample generation only supports bounded formulas.");
 
   32                    "Counterexample generation only supports upper bounds.");
 
   35    STORM_LOG_THROW(subformula.isEventuallyFormula(), storm::exceptions::InvalidPropertyException,
 
   36                    "Path formula is required to be of the form 'F psi' for counterexample generation.");
 
   38    STORM_LOG_THROW(model->getInitialStates().getNumberOfSetBits() == 1, storm::exceptions::NotSupportedException,
 
   39                    "k-shortest paths is only supported for models with a unique initial state.");
 
   40    size_t initialState = *(model->getInitialStates().begin());
 
   47    std::unique_ptr<storm::modelchecker::CheckResult> subResult = modelchecker.
check(env, eventuallyFormula.
getSubformula());
 
   53        env, 
false, model->getTransitionMatrix(), model->getBackwardTransitions(), phiStates, subQualitativeResult.
getTruthValuesVector(), 
true);
 
   54    double reachProb = results.at(initialState);
 
   55    STORM_LOG_THROW((reachProb > threshold) || (strictBound && reachProb >= threshold), storm::exceptions::InvalidArgumentException,
 
   56                    "Given probability threshold " << threshold << 
" cannot be " << (strictBound ? 
"achieved" : 
"exceeded")
 
   57                                                   << 
" in model with maximal reachability probability of " << reachProb << 
".");
 
   61    double probability = 0;
 
   62    bool thresholdExceeded = 
false;
 
   63    for (
size_t k = 1; k <= maxK; ++k) {
 
   64        cex.
addPath(generator.getPathAsList(k), k);
 
   65        probability += generator.getDistance(k);
 
   67        if ((probability > threshold) || (strictBound && probability >= threshold && strictBound)) {
 
   68            thresholdExceeded = 
true;
 
   72    STORM_LOG_WARN_COND(thresholdExceeded, 
"Aborted computation because maximal number of paths was reached. Probability threshold is not yet exceeded.");
 
   74    return std::make_shared<storm::counterexamples::PathCounterexample<double>>(cex);
 
 
static std::shared_ptr< HighLevelCounterexample > computeCounterexample(Environment const &env, storm::storage::SymbolicModelDescription const &symbolicModel, storm::models::sparse::Mdp< T > const &mdp, std::shared_ptr< storm::logic::Formula const > const &formula)
Computes a (minimal) counterexample with respect to the number of prism commands for the given model ...
 
void addPath(std::vector< storage::sparse::state_type > path, size_t k)
 
static std::shared_ptr< HighLevelCounterexample > computeCounterexample(Environment const &env, storm::storage::SymbolicModelDescription const &symbolicModel, storm::models::sparse::Model< T > const &model, std::shared_ptr< storm::logic::Formula const > const &formula)
 
virtual std::unique_ptr< CheckResult > check(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
Checks the provided formula.
 
ExplicitQualitativeCheckResult & asExplicitQualitativeCheckResult()
 
vector_type const & getTruthValuesVector() const
 
static std::vector< ValueType > computeUntilProbabilities(Environment const &env, storm::solver::SolveGoal< ValueType > &&goal, storm::storage::SparseMatrix< ValueType > const &transitionMatrix, storm::storage::SparseMatrix< ValueType > const &backwardTransitions, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates, bool qualitative, ModelCheckerHint const &hint=ModelCheckerHint())
 
This class represents a (discrete-time) Markov decision process.
 
Base class for all sparse models.
 
A bit vector that is internally represented as a vector of 64-bit values.
 
#define STORM_LOG_WARN_COND(cond, message)
 
#define STORM_LOG_THROW(cond, exception, message)
 
std::shared_ptr< storm::counterexamples::Counterexample > computeHighLevelCounterexampleMilp(storm::storage::SymbolicModelDescription const &symbolicModel, std::shared_ptr< storm::models::sparse::Mdp< double > > mdp, std::shared_ptr< storm::logic::Formula const > const &formula)
 
std::shared_ptr< storm::counterexamples::Counterexample > computeHighLevelCounterexampleMaxSmt(storm::storage::SymbolicModelDescription const &symbolicModel, std::shared_ptr< storm::models::sparse::Model< double > > model, std::shared_ptr< storm::logic::Formula const > const &formula)
 
std::shared_ptr< storm::counterexamples::Counterexample > computeKShortestPathCounterexample(std::shared_ptr< storm::models::sparse::Model< double > > model, std::shared_ptr< storm::logic::Formula const > const &formula, size_t maxK)
 
bool isLowerBound(ComparisonType t)