#include "storm-dft/api/storm-dft.h" namespace storm { namespace api { template<> void exportDFTToJsonFile(storm::storage::DFT const& dft, std::string const& file) { storm::storage::DftJsonExporter::toFile(dft, file); } template<> void exportDFTToJsonFile(storm::storage::DFT const& dft, std::string const& file) { STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Export to JSON not supported for this data type."); } template<> std::string exportDFTToJsonString(storm::storage::DFT const& dft) { std::stringstream stream; storm::storage::DftJsonExporter::toStream(dft, stream); return stream.str(); } template<> std::string exportDFTToJsonString(storm::storage::DFT const& dft) { STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Export to JSON not supported for this data type."); } template<> void exportDFTToSMT(storm::storage::DFT const& dft, std::string const& file) { storm::modelchecker::DFTASFChecker asfChecker(dft); asfChecker.convert(); asfChecker.toFile(file); } template<> void exportDFTToSMT(storm::storage::DFT const& dft, std::string const& file) { STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Export to SMT does not support this data type."); } template<> void transformToGSPN(storm::storage::DFT const& dft) { // Transform to GSPN storm::transformations::dft::DftToGspnTransformator gspnTransformator(dft); bool smart = true; gspnTransformator.transform(smart); storm::gspn::GSPN* gspn = gspnTransformator.obtainGSPN(); uint64_t toplevelFailedPlace = gspnTransformator.toplevelFailedPlaceId(); storm::api::handleGSPNExportSettings(*gspn, [&](storm::builder::JaniGSPNBuilder const& builder) { std::shared_ptr const& exprManager = gspn->getExpressionManager(); storm::jani::Variable const& topfailedVar = builder.getPlaceVariable(toplevelFailedPlace); storm::expressions::Expression targetExpression = exprManager->integer(1) == topfailedVar.getExpressionVariable().getExpression(); auto evtlFormula = std::make_shared(targetExpression); auto tbFormula = std::make_shared(std::make_shared(true), evtlFormula, storm::logic::TimeBound(false, exprManager->integer(0)), storm::logic::TimeBound(false, exprManager->integer(10)), storm::logic::TimeBoundReference(storm::logic::TimeBoundType::Time)); auto tbUntil = std::make_shared(tbFormula); auto evFormula = std::make_shared(evtlFormula, storm::logic::FormulaContext::Time); auto rewFormula = std::make_shared(evFormula, storm::logic::OperatorInformation(), storm::logic::RewardMeasureType::Expectation); std::vector res({storm::jani::Property("time-bounded", tbUntil, {}), storm::jani::Property("mttf", rewFormula, {})}); return res; } ); delete gspn; } template<> void transformToGSPN(storm::storage::DFT const& dft) { STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Transformation to GSPN not supported for this data type."); } } }