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();
56 ASSERT_EQ(99ul, model->getNumberOfStates());
57 ASSERT_EQ(195ul, model->getNumberOfTransitions());
64 auto criticalTuple = extender.toOrder(
67 EXPECT_EQ(model->getNumberOfStates(), std::get<1>(criticalTuple));
68 EXPECT_EQ(model->getNumberOfStates(), std::get<2>(criticalTuple));
70 auto order = std::get<0>(criticalTuple);
71 for (uint_fast64_t i = 0; i < model->getNumberOfStates(); ++i) {
72 EXPECT_TRUE((order->contains(i)));
84 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
85 std::string formulaAsString =
"P=? [F s=4 & i=N ]";
86 std::string constantsAsString =
"";
90 program = program.
preprocess(constantsAsString);
91 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
93 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
96 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
97 model = simplifier.getSimplifiedModel();
99 ASSERT_EQ(193ul, model->getNumberOfStates());
100 ASSERT_EQ(383ul, model->getNumberOfTransitions());
107 auto criticalTuple = extender.toOrder(
110 EXPECT_EQ(183ul, std::get<1>(criticalTuple));
111 EXPECT_EQ(186ul, std::get<2>(criticalTuple));
115 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
116 std::string formulaAsString =
"P=? [F s=4 & i=N ]";
117 std::string constantsAsString =
"";
121 program = program.
preprocess(constantsAsString);
122 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
124 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
127 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
128 model = simplifier.getSimplifiedModel();
136 ASSERT_EQ(99ul, model->getNumberOfStates());
137 ASSERT_EQ(195ul, model->getNumberOfTransitions());
147 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
149 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
155 auto res = extender.extendOrder(
nullptr, region);
156 auto order = std::get<0>(res);
157 EXPECT_EQ(order->getNumberOfAddedStates(), model->getNumberOfStates());
158 EXPECT_TRUE(order->getDoneBuilding());
169 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
170 std::string formulaAsString =
"P=? [F s=4 & i=N ]";
171 std::string constantsAsString =
"";
175 program = program.
preprocess(constantsAsString);
176 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
178 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
181 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
182 model = simplifier.getSimplifiedModel();
184 ASSERT_EQ(193ul, model->getNumberOfStates());
185 ASSERT_EQ(383ul, model->getNumberOfTransitions());
195 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
197 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
203 auto res = extender.extendOrder(
nullptr, region);
204 auto order = std::get<0>(res);
205 EXPECT_FALSE(order->getDoneBuilding());
209 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
210 std::string formulaAsString =
"P=? [F s=3 ]";
211 std::string constantsAsString =
"";
215 program = program.
preprocess(constantsAsString);
216 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
218 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
221 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
222 model = simplifier.getSimplifiedModel();
229 auto order = std::get<0>(extender.toOrder(region));
230 EXPECT_EQ(5ul, order->getNumberOfAddedStates());
231 EXPECT_TRUE(order->getDoneBuilding());
247 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
248 std::string formulaAsString =
"P=? [F s=3 ]";
249 std::string constantsAsString =
"";
253 program = program.
preprocess(constantsAsString);
254 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
256 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
259 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
260 model = simplifier.getSimplifiedModel();
273 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
275 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
282 auto res = extender.extendOrder(
nullptr, region);
283 auto order = std::get<0>(res);
284 EXPECT_EQ(order->getNumberOfAddedStates(), model->getNumberOfStates());
285 EXPECT_TRUE(order->getDoneBuilding());
301 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
302 std::string formulaAsString =
"P=? [F s=3 ]";
303 std::string constantsAsString =
"";
307 program = program.
preprocess(constantsAsString);
308 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
310 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
313 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
314 model = simplifier.getSimplifiedModel();
321 auto order = std::get<0>(extender.toOrder(region));
323 EXPECT_EQ(5ul, order->getNumberOfAddedStates());
324 EXPECT_TRUE(order->getDoneBuilding());
339 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy1.pm";
340 std::string formulaAsString =
"P=? [F s=3 ]";
341 std::string constantsAsString =
"";
345 program = program.
preprocess(constantsAsString);
346 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
348 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
351 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
352 model = simplifier.getSimplifiedModel();
365 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
367 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
374 auto res = extender.extendOrder(
nullptr, region);
375 auto order = std::get<0>(res);
376 EXPECT_EQ(order->getNumberOfAddedStates(), model->getNumberOfStates());
377 EXPECT_TRUE(order->getDoneBuilding());
393 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy2.pm";
394 std::string formulaAsString =
"P=? [F s=4 ]";
395 std::string constantsAsString =
"";
399 program = program.
preprocess(constantsAsString);
400 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
402 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
405 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
406 model = simplifier.getSimplifiedModel();
419 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
421 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
428 auto res = extender.extendOrder(
nullptr, region);
429 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.
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.
std::vector< storm::jani::Property > parsePropertiesForPrismProgram(std::string const &inputString, storm::prism::Program const &program, boost::optional< std::set< std::string > > const &propertyFilter)
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::storage::BisimulationType type=storm::storage::BisimulationType::Strong, bool graphPreserving=true, std::optional< double > const &tolerance=std::nullopt)
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...