1#include "storm-config.h"
24 GTEST_SKIP() <<
"Z3 not available.";
30 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
31 std::string formulaAsString =
"P=? [F s=4 & i=N ]";
32 std::string constantsAsString =
"";
37 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
39 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
42 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
43 model = simplifier.getSimplifiedModel();
54 ASSERT_EQ(99ul, model->getNumberOfStates());
55 ASSERT_EQ(195ul, model->getNumberOfTransitions());
62 auto criticalTuple = extender.toOrder(
65 EXPECT_EQ(model->getNumberOfStates(), std::get<1>(criticalTuple));
66 EXPECT_EQ(model->getNumberOfStates(), std::get<2>(criticalTuple));
68 auto order = std::get<0>(criticalTuple);
69 for (uint_fast64_t i = 0; i < model->getNumberOfStates(); ++i) {
70 EXPECT_TRUE((order->contains(i)));
82 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
83 std::string formulaAsString =
"P=? [F s=4 & i=N ]";
84 std::string constantsAsString =
"";
89 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
91 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
94 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
95 model = simplifier.getSimplifiedModel();
97 ASSERT_EQ(193ul, model->getNumberOfStates());
98 ASSERT_EQ(383ul, model->getNumberOfTransitions());
105 auto criticalTuple = extender.toOrder(
108 EXPECT_EQ(183ul, std::get<1>(criticalTuple));
109 EXPECT_EQ(186ul, std::get<2>(criticalTuple));
113 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
114 std::string formulaAsString =
"P=? [F s=4 & i=N ]";
115 std::string constantsAsString =
"";
120 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
122 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
125 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
126 model = simplifier.getSimplifiedModel();
137 ASSERT_EQ(99ul, model->getNumberOfStates());
138 ASSERT_EQ(195ul, model->getNumberOfTransitions());
148 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
150 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
156 auto res = extender.extendOrder(
nullptr, region);
157 auto order = std::get<0>(res);
158 EXPECT_EQ(order->getNumberOfAddedStates(), model->getNumberOfStates());
159 EXPECT_TRUE(order->getDoneBuilding());
170 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/brp16_2.pm";
171 std::string formulaAsString =
"P=? [F s=4 & i=N ]";
172 std::string constantsAsString =
"";
177 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
179 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
182 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
183 model = simplifier.getSimplifiedModel();
185 ASSERT_EQ(193ul, model->getNumberOfStates());
186 ASSERT_EQ(383ul, model->getNumberOfTransitions());
196 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
198 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
204 auto res = extender.extendOrder(
nullptr, region);
205 auto order = std::get<0>(res);
206 EXPECT_FALSE(order->getDoneBuilding());
210 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
211 std::string formulaAsString =
"P=? [F s=3 ]";
212 std::string constantsAsString =
"";
217 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
219 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
222 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
223 model = simplifier.getSimplifiedModel();
230 auto order = std::get<0>(extender.toOrder(region));
231 EXPECT_EQ(5ul, order->getNumberOfAddedStates());
232 EXPECT_TRUE(order->getDoneBuilding());
248 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
249 std::string formulaAsString =
"P=? [F s=3 ]";
250 std::string constantsAsString =
"";
255 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
257 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
260 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
261 model = simplifier.getSimplifiedModel();
274 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
276 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
283 auto res = extender.extendOrder(
nullptr, region);
284 auto order = std::get<0>(res);
285 EXPECT_EQ(order->getNumberOfAddedStates(), model->getNumberOfStates());
286 EXPECT_TRUE(order->getDoneBuilding());
302 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/simple1.pm";
303 std::string formulaAsString =
"P=? [F s=3 ]";
304 std::string constantsAsString =
"";
309 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
311 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
314 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
315 model = simplifier.getSimplifiedModel();
322 auto order = std::get<0>(extender.toOrder(region));
324 EXPECT_EQ(5ul, order->getNumberOfAddedStates());
325 EXPECT_TRUE(order->getDoneBuilding());
340 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy1.pm";
341 std::string formulaAsString =
"P=? [F s=3 ]";
342 std::string constantsAsString =
"";
347 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
349 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
352 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
353 model = simplifier.getSimplifiedModel();
366 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
368 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
375 auto res = extender.extendOrder(
nullptr, region);
376 auto order = std::get<0>(res);
377 EXPECT_EQ(order->getNumberOfAddedStates(), model->getNumberOfStates());
378 EXPECT_TRUE(order->getDoneBuilding());
394 std::string programFile = STORM_TEST_RESOURCES_DIR
"/pdtmc/casestudy2.pm";
395 std::string formulaAsString =
"P=? [F s=4 ]";
396 std::string constantsAsString =
"";
401 std::vector<std::shared_ptr<const storm::logic::Formula>> formulas =
403 std::shared_ptr<storm::models::sparse::Dtmc<storm::RationalFunction>> model =
406 ASSERT_TRUE(simplifier.simplify(*(formulas[0])));
407 model = simplifier.getSimplifiedModel();
420 propositionalChecker.
check(formula.
getSubformula())->template asExplicitQualitativeCheckResult<storm::RationalFunction>().getTruthValuesVector();
422 std::pair<storm::storage::BitVector, storm::storage::BitVector> statesWithProbability01 =
429 auto res = extender.extendOrder(
nullptr, region);
430 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.
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 > > buildSparseModel(storm::storage::SymbolicModelDescription const &model, storm::builder::BuilderOptions const &options)
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 > > 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::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.
SettingsType const & getModule()
Get module.
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...
storm::prism::Program preprocess(storm::prism::Program const &program, std::map< storm::expressions::Variable, storm::expressions::Expression > const &constantDefinitions)