1#include "storm-config.h"
29 GTEST_SKIP() <<
"Z3 not available.";
35 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
36 std::string formulaAsString =
"P=? [F s=4 & i=N ]";
37 std::string constantsAsString =
"";
41 program = program.
preprocess(constantsAsString);
42 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
44 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
47 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
48 model = simplifier.getSimplifiedModel();
53 ASSERT_EQ(99ul, model->getNumberOfStates());
54 ASSERT_EQ(195ul, model->getNumberOfTransitions());
61 auto criticalTuple = extender.toOrder(
64 EXPECT_EQ(model->getNumberOfStates(), std::get<1>(criticalTuple));
65 EXPECT_EQ(model->getNumberOfStates(), std::get<2>(criticalTuple));
67 auto order = std::get<0>(criticalTuple);
68 for (uint_fast64_t i = 0; i < model->getNumberOfStates(); ++i) {
69 EXPECT_TRUE((order->contains(i)));
81 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
82 std::string formulaAsString =
"P=? [F s=4 & i=N ]";
83 std::string constantsAsString =
"";
87 program = program.
preprocess(constantsAsString);
88 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
90 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
93 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
94 model = simplifier.getSimplifiedModel();
96 ASSERT_EQ(193ul, model->getNumberOfStates());
97 ASSERT_EQ(383ul, model->getNumberOfTransitions());
104 auto criticalTuple = extender.toOrder(
107 EXPECT_EQ(183ul, std::get<1>(criticalTuple));
108 EXPECT_EQ(186ul, std::get<2>(criticalTuple));
112 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
113 std::string formulaAsString =
"P=? [F s=4 & i=N ]";
114 std::string constantsAsString =
"";
118 program = program.
preprocess(constantsAsString);
119 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
121 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
124 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
125 model = simplifier.getSimplifiedModel();
130 ASSERT_EQ(99ul, model->getNumberOfStates());
131 ASSERT_EQ(195ul, model->getNumberOfTransitions());
141 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
143 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
149 auto res = extender.extendOrder(
nullptr, region);
150 auto order = std::get<0>(res);
151 EXPECT_EQ(order->getNumberOfAddedStates(), model->getNumberOfStates());
152 EXPECT_TRUE(order->getDoneBuilding());
163 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
164 std::string formulaAsString =
"P=? [F s=4 & i=N ]";
165 std::string constantsAsString =
"";
169 program = program.
preprocess(constantsAsString);
170 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
172 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
175 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
176 model = simplifier.getSimplifiedModel();
178 ASSERT_EQ(193ul, model->getNumberOfStates());
179 ASSERT_EQ(383ul, model->getNumberOfTransitions());
189 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
191 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
197 auto res = extender.extendOrder(
nullptr, region);
198 auto order = std::get<0>(res);
199 EXPECT_FALSE(order->getDoneBuilding());
203 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
204 std::string formulaAsString =
"P=? [F s=3 ]";
205 std::string constantsAsString =
"";
209 program = program.
preprocess(constantsAsString);
210 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
212 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
215 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
216 model = simplifier.getSimplifiedModel();
223 auto order = std::get<0>(extender.toOrder(region));
224 EXPECT_EQ(5ul, order->getNumberOfAddedStates());
225 EXPECT_TRUE(order->getDoneBuilding());
241 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
242 std::string formulaAsString =
"P=? [F s=3 ]";
243 std::string constantsAsString =
"";
247 program = program.
preprocess(constantsAsString);
248 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
250 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
253 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
254 model = simplifier.getSimplifiedModel();
267 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
269 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
276 auto res = extender.extendOrder(
nullptr, region);
277 auto order = std::get<0>(res);
278 EXPECT_EQ(order->getNumberOfAddedStates(), model->getNumberOfStates());
279 EXPECT_TRUE(order->getDoneBuilding());
295 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
296 std::string formulaAsString =
"P=? [F s=3 ]";
297 std::string constantsAsString =
"";
301 program = program.
preprocess(constantsAsString);
302 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
304 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
307 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
308 model = simplifier.getSimplifiedModel();
315 auto order = std::get<0>(extender.toOrder(region));
317 EXPECT_EQ(5ul, order->getNumberOfAddedStates());
318 EXPECT_TRUE(order->getDoneBuilding());
333 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy1.pm";
334 std::string formulaAsString =
"P=? [F s=3 ]";
335 std::string constantsAsString =
"";
339 program = program.
preprocess(constantsAsString);
340 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
342 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
345 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
346 model = simplifier.getSimplifiedModel();
359 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
361 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
368 auto res = extender.extendOrder(
nullptr, region);
369 auto order = std::get<0>(res);
370 EXPECT_EQ(order->getNumberOfAddedStates(), model->getNumberOfStates());
371 EXPECT_TRUE(order->getDoneBuilding());
387 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy2.pm";
388 std::string formulaAsString =
"P=? [F s=4 ]";
389 std::string constantsAsString =
"";
393 program = program.
preprocess(constantsAsString);
394 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
396 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
399 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
400 model = simplifier.getSimplifiedModel();
413 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
415 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
422 auto res = extender.extendOrder(
nullptr, region);
423 EXPECT_TRUE(std::get<0>(res)->getDoneBuilding());
TEST_F(OrderExtenderTest, Brp_with_bisimulation_on_model)
utility::parametric::VariableType< ValueType >::type VariableType
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.
storm::storage::ParameterRegion< ValueType > parseRegion(std::string const &inputString, std::set< typename storm::storage::ParameterRegion< ValueType >::VariableType > const &consideredVariables)
std::vector< storm::jani::Property > parsePropertiesForPrismProgram(std::string const &inputString, storm::prism::Program const &program, boost::optional< std::set< std::string > > const &propertyFilter)
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::shared_ptr< storm::models::sparse::Model< ValueType > > performBisimulationMinimization(std::shared_ptr< storm::models::sparse::Model< ValueType > > const &model, std::vector< std::shared_ptr< storm::logic::Formula const > > const &formulas={}, storm::bisimulation::Options const &options={})
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...