#pragma once #include #include "storm-pars/transformer/SparseParametricDtmcSimplifier.h" #include "storm-pars/transformer/SparseParametricMdpSimplifier.h" #include "storm/models/sparse/Model.h" #include "storm/logic/Formula.h" #include "storm/utility/macros.h" namespace storm { namespace api { template bool simplifyParametricModel(std::shared_ptr const& inputModel, std::shared_ptr const& inputFormula, std::shared_ptr& outputModel, std::shared_ptr& outputFormula) { if (inputModel->isOfType(storm::models::ModelType::Dtmc)) { auto const& dtmc = *inputModel->template as>(); auto simplifier = storm::transformer::SparseParametricDtmcSimplifier>(dtmc); if (simplifier.simplify(*inputFormula)) { outputModel = simplifier.getSimplifiedModel(); outputFormula = simplifier.getSimplifiedFormula(); return true; } } else if (inputModel->isOfType(storm::models::ModelType::Mdp)) { auto const& mdp = *inputModel->template as>(); auto simplifier = storm::transformer::SparseParametricMdpSimplifier>(mdp); if (simplifier.simplify(*inputFormula)) { outputModel = simplifier.getSimplifiedModel(); outputFormula = simplifier.getSimplifiedFormula(); return true; } } else { STORM_LOG_ERROR("Unable to simplify model with the given type."); } // Reaching this point means that simplification was not successful. outputModel = nullptr; outputFormula = nullptr; return false; } } }