1#include "storm-config.h"
25 GTEST_SKIP() <<
"Z3 not available.";
31 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
32 std::string formulaAsString =
"P=? [F s=3 ]";
33 std::string constantsAsString =
"";
37 program = program.
preprocess(constantsAsString);
38 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
40 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
44 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
45 model = simplifier.getSimplifiedModel();
50 std::vector<storm::storage::ParameterRegion<storm::RationalFunction>> regions = {region};
59 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
61 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
69 auto order = std::get<0>(orderExtender.toOrder(region,
nullptr));
74 auto var = modelParameters.begin();
80 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
81 std::string formulaAsString =
"P=? [F s=3 ]";
82 std::string constantsAsString =
"";
86 program = program.
preprocess(constantsAsString);
87 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
89 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
93 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
94 model = simplifier.getSimplifiedModel();
99 std::vector<storm::storage::ParameterRegion<storm::RationalFunction>> regions = {region};
108 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
110 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
118 auto order = std::get<0>(orderExtender.toOrder(region,
nullptr));
123 auto var = modelParameters.begin();
130 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy1.pm";
131 std::string formulaAsString =
"P=? [F s=3 ]";
132 std::string constantsAsString =
"";
136 program = program.
preprocess(constantsAsString);
137 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
139 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
143 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
144 model = simplifier.getSimplifiedModel();
149 std::vector<storm::storage::ParameterRegion<storm::RationalFunction>> regions = {region};
158 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
160 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
168 auto res = orderExtender.extendOrder(
nullptr, region);
169 auto order = std::get<0>(res);
170 ASSERT_TRUE(order->getDoneBuilding());
176 auto var = modelParameters.begin();
177 for (uint_fast64_t i = 0; i < 3; i++) {
184 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy2.pm";
185 std::string formulaAsString =
"P=? [F s=4 ]";
186 std::string constantsAsString =
"";
190 program = program.
preprocess(constantsAsString);
191 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
193 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
197 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
198 model = simplifier.getSimplifiedModel();
203 std::vector<storm::storage::ParameterRegion<storm::RationalFunction>> regions = {region};
212 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
214 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
222 auto res = orderExtender.extendOrder(
nullptr, region);
223 auto order = std::get<0>(res);
224 order->addRelation(1, 3);
225 order->addRelation(3, 2);
231 auto var = modelParameters.begin();
232 for (uint_fast64_t i = 0; i < 3; i++) {
239 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy3.pm";
240 std::string formulaAsString =
"P=? [F s=3 ]";
241 std::string constantsAsString =
"";
245 program = program.
preprocess(constantsAsString);
246 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
248 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
252 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
253 model = simplifier.getSimplifiedModel();
258 std::vector<storm::storage::ParameterRegion<storm::RationalFunction>> regions = {region};
267 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
269 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
277 auto res = orderExtender.extendOrder(
nullptr, region);
278 auto order = std::get<0>(res);
279 ASSERT_TRUE(order->getDoneBuilding());
285 auto var = modelParameters.begin();
TEST_F(MonotonicityCheckerTest, Simple1_larger_region)
Monotonicity checkLocalMonotonicity(std::shared_ptr< Order > const &order, uint_fast64_t state, VariableType const &var, storage::ParameterRegion< ValueType > const ®ion)
Checks for local monotonicity at the given state.
virtual std::unique_ptr< CheckResult > check(Environment const &env, CheckTask< storm::logic::Formula, SolutionType > const &checkTask)
Checks the provided formula.
std::shared_ptr< ModelType > as()
Casts the model into the model type given by the template parameter.
This class represents a discrete-time Markov chain.
Program preprocess(std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions) const
Preprocesses the program by defining the given constant definitions, substituting constants and formu...
A bit vector that is internally represented as a vector of 64-bit values.
A class that holds a possibly non-square matrix in the compressed row storage format.
std::vector< storm::jani::Property > parsePropertiesForPrismProgram(std::string const &inputString, storm::prism::Program const &program, boost::optional< std::set< std::string > > const &propertyFilter)
storm::storage::ParameterRegion< ValueType > parseRegion(std::string const &inputString, std::set< typename storm::storage::ParameterRegion< ValueType >::VariableType > const &consideredVariables)
storm::prism::Program parseProgram(std::string const &filename, bool prismCompatibility, bool simplify)
std::shared_ptr< storm::models::sparse::Model< ValueType > > buildSparseModel(storm::storage::SymbolicModelDescription const &model, storm::builder::BuilderOptions const &options, typename storm::builder::ExplicitModelBuilder< ValueType >::Options const &explorationOptions=typename storm::builder::ExplicitModelBuilder< ValueType >::Options())
std::vector< std::shared_ptr< storm::logic::Formula const > > extractFormulasFromProperties(std::vector< storm::jani::Property > const &properties)
std::set< storm::RationalFunctionVariable > getProbabilityParameters(Model< storm::RationalFunction > const &model)
Get all probability parameters occurring on transitions.
std::pair< storm::storage::BitVector, storm::storage::BitVector > performProb01(storm::models::sparse::DeterministicModel< T > const &model, storm::storage::BitVector const &phiStates, storm::storage::BitVector const &psiStates)
Computes the sets of states that have probability 0 or 1, respectively, of satisfying phi until psi i...