STORM_LOG_THROW(propertyStructure.count("exp")==1,storm::exceptions::InvalidJaniException,"Expecting operand for operator "<<opstring<<" in "<<scope.description);
return{parseFormula(propertyStructure.at("exp"),formulaContext,scope.refine("Operand of operator "+opstring))};
return{parseFormula(model,propertyStructure.at("exp"),formulaContext,scope.refine("Operand of operator "+opstring))};
STORM_LOG_THROW(propertyStructure.count("left")==1,storm::exceptions::InvalidJaniException,"Expecting left operand for operator "<<opstring<<" in "<<scope.description);
STORM_LOG_THROW(propertyStructure.count("right")==1,storm::exceptions::InvalidJaniException,"Expecting right operand for operator "<<opstring<<" in "<<scope.description);
return{parseFormula(propertyStructure.at("left"),formulaContext,scope.refine("Operand of operator "+opstring)),parseFormula(propertyStructure.at("right"),formulaContext,scope.refine("Operand of operator "+opstring))};
return{parseFormula(model,propertyStructure.at("left"),formulaContext,scope.refine("Operand of operator "+opstring)),parseFormula(model,propertyStructure.at("right"),formulaContext,scope.refine("Operand of operator "+opstring))};
STORM_LOG_THROW(false,storm::exceptions::NotImplementedException,"Forall and Exists are currently not supported");
STORM_LOG_THROW(false,storm::exceptions::NotImplementedException,"Forall and Exists are currently not supported in "<<scope.description);
}elseif(opString=="Emin"||opString=="Emax"){
STORM_LOG_WARN_COND(model.getJaniVersion()==1,"Model not compliant: Contains Emin/Emax property in "<<scope.description<<".");
STORM_LOG_THROW(propertyStructure.count("exp")==1,storm::exceptions::InvalidJaniException,"Expecting reward-expression for operator "<<opString<<" in "<<scope.description);
STORM_LOG_THROW(rewExpr.hasNumericalType(),storm::exceptions::InvalidJaniException,"Reward expression '"<<rewExpr<<"' does not have numerical type in "<<scope.description);
STORM_LOG_THROW(propertyStructure.count("reward-instants")==0,storm::exceptions::NotSupportedException,"Storm does not support to have a time-instant and a reward-instant in "+scope.description);
storm::expressions::ExpressionrewInstRewardModelExpression=parseExpression(rewInst.at("exp"),scope.refine("Reward expression at reward instant"));
STORM_LOG_THROW(rewInstRewardModelExpression.hasNumericalType(),storm::exceptions::InvalidJaniException,"Reward expression '"<<rewInstRewardModelExpression<<"' does not have numerical type in "<<scope.description);
subformula=std::make_shared<storm::logic::EventuallyFormula>(parseFormula(propertyStructure.at("reach"),formulaContext,scope.refine("Reach-expression of operator "+opString)),formulaContext,rewardAccumulation);
subformula=std::make_shared<storm::logic::EventuallyFormula>(parseFormula(model,propertyStructure.at("reach"),formulaContext,scope.refine("Reach-expression of operator "+opString)),formulaContext,rewardAccumulation);
STORM_LOG_THROW(propertyStructure.count("exp")>0,storm::exceptions::InvalidJaniException,"Expected an expression at steady state property at "<<scope.description);
STORM_LOG_THROW(!rewardAccumulation.is_initialized(),storm::exceptions::InvalidJaniException,"Long-run average probabilities are not allowed to have a reward accumulation at"<<scope.description);
STORM_LOG_THROW(rewExpr.hasNumericalType(),storm::exceptions::InvalidJaniException,"Reward expression '"<<rewExpr<<"' does not have numerical type in "<<scope.description);
STORM_LOG_THROW(exp.hasNumericalType(),storm::exceptions::InvalidJaniException,"Reward expression '"<<exp<<"' does not have numerical type in "<<scope.description);
STORM_LOG_THROW(rbStructure.count("exp")==1,storm::exceptions::InvalidJaniException,"Expecting reward-expression for operator "<<opString<<" in "<<scope.description);
storm::expressions::ExpressionrewInstRewardModelExpression=parseExpression(rbStructure.at("exp"),scope.refine("Reward expression at reward-bounds"));
STORM_LOG_THROW(rewInstRewardModelExpression.hasNumericalType(),storm::exceptions::InvalidJaniException,"Reward expression '"<<rewInstRewardModelExpression<<"' does not have numerical type in "<<scope.description);
std::vector<std::shared_ptr<storm::logic::Formulaconst>>args=parseUnaryFormulaArgument(propertyStructure,formulaContext,opString,scope.refine("Subformula of globally operator "));
std::vector<std::shared_ptr<storm::logic::Formulaconst>>args=parseUnaryFormulaArgument(model,propertyStructure,formulaContext,opString,scope.refine("Subformula of globally operator "));
if(propertyStructure.count("step-bounds")>0){
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"Globally and step-bounds are not supported currently");
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"Globally and step-bounds are not supported.");
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"Comparison operators '=' or '≠' in property specifications are currently not supported.");
STORM_LOG_THROW(false,storm::exceptions::NotSupportedException,"Comparison operators '=' or '≠' in property specifications are currently not supported in "<<scope.description<<".");
STORM_LOG_THROW(model.getGlobalVariables().hasVariable(expressionOrLabelAndBool.first.getLabel()),storm::exceptions::InvalidSettingsException,"Terminal states refer to illegal label '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
STORM_LOG_THROW(this->model.getGlobalVariables().hasVariable(expressionOrLabelAndBool.first.getLabel()),storm::exceptions::InvalidSettingsException,"Terminal states refer to illegal label '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
STORM_LOG_THROW(variable.isBooleanVariable(),storm::exceptions::InvalidSettingsException,"Terminal states refer to non-boolean variable '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
STORM_LOG_THROW(variable.isTransient(),storm::exceptions::InvalidSettingsException,"Terminal states refer to non-transient variable '"<<expressionOrLabelAndBool.first.getLabel()<<"'.");
STORM_LOG_THROW(rewardPathFormula.getTimeBoundReference().isTimeBound(),storm::exceptions::NotImplementedException,"Currently step-bounded and reward-bounded properties on CTMCs are not supported.");
STORM_LOG_THROW(rewardPathFormula.getTimeBoundReference().isTimeBound(),storm::exceptions::NotImplementedException,"Currently step-bounded and reward-bounded properties on CTMCs are not supported.");
// Check whether we consider a multi-objective formula
@ -105,8 +106,9 @@ namespace storm {
STORM_LOG_THROW(this->getModel().isClosed(),storm::exceptions::InvalidPropertyException,"Unable to compute reachability rewards in non-closed Markov automaton.");
STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_THROW(this->getModel().isClosed(),storm::exceptions::InvalidPropertyException,"Unable to compute reachability rewards in non-closed Markov automaton.");
STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_THROW(this->getModel().isClosed(),storm::exceptions::InvalidPropertyException,"Unable to compute long run average rewards in non-closed Markov automaton.");
STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_THROW(rewardPathFormula.hasIntegerBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have a discrete time bound.");
STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_THROW(checkTask.isOnlyInitialStatesRelevantSet(),storm::exceptions::InvalidOperationException,"Checking non-trivial bounded until probabilities can only be computed for the initial states of the model.");
STORM_LOG_THROW(!checkTask.getFormula().hasRewardAccumulation(),storm::exceptions::InvalidOperationException,"Checking reward bounded cumulative reward formulas is not supported if reward accumulations are given.");
// Check whether we consider a multi-objective formula
@ -140,6 +141,7 @@ namespace storm {
STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_THROW(checkTask.isOnlyInitialStatesRelevantSet(),storm::exceptions::InvalidOperationException,"Checking reward bounded cumulative reward formulas can only be done for the initial states of the model.");
STORM_LOG_THROW(!checkTask.getFormula().hasRewardAccumulation(),storm::exceptions::InvalidOperationException,"Checking reward bounded cumulative reward formulas is not supported if reward accumulations are given.");
STORM_LOG_WARN_COND(!checkTask.isQualitativeSet(),"Checking reward bounded until formulas is not optimized w.r.t. qualitative queries");
STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidArgumentException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_THROW(rewardPathFormula.hasIntegerBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have a discrete time bound.");
STORM_LOG_THROW(checkTask.isOptimizationDirectionSet(),storm::exceptions::InvalidPropertyException,"Formula needs to specify whether minimal or maximal values are to be computed on nondeterministic model.");
STORM_LOG_WARN_COND(storm::settings::getModule<storm::settings::modules::CoreSettings>().getEquationSolver()==storm::solver::EquationSolverType::Native||!optionSet,"Native is not selected as the preferred equation solver, so setting options for native might have no effect.");
throwstorm::exceptions::InvalidStateException()<<"The useGpu Flag of a SCC was set, but this version of storm does not support CUDA acceleration. Internal Error!";
STORM_LOG_THROW(sccDecomposition.size()>0,storm::exceptions::IllegalArgumentException,"Can not solve given equation system as the SCC decomposition returned no SCCs.");
STORM_LOG_THROW(sccDepths.is_initialized(),storm::exceptions::InvalidOperationException,"Tried to get the SCC depth but SCC depths were not computed upon construction.");
STORM_LOG_ASSERT(sccIndex<sccDepths->size(),"SCC index "<<sccIndex<<" is out of range ("<<sccDepths->size()<<")");
STORM_LOG_THROW(sccDepths.is_initialized(),storm::exceptions::InvalidOperationException,"Tried to get the maximum SCC depth but SCC depths were not computed upon construction.");
STORM_LOG_THROW(!sccDepths->empty(),storm::exceptions::InvalidOperationException,"Tried to get the maximum SCC depth but this SCC decomposition seems to be empty.");
STORM_LOG_WARN_COND(!f.getSubformula().asCumulativeRewardFormula().getTimeBoundReference().isRewardBound(),"Export for cumulative reward formulas with reward instant currently unsupported.");
STORM_LOG_WARN_COND(!f.getSubformula().asCumulativeRewardFormula().getTimeBoundReference().isRewardBound(),"Export for reward bounded cumulative reward formulas currently unsupported.");
STORM_LOG_WARN_COND(!f.getSubformula().asCumulativeRewardFormula().getTimeBoundReference().isRewardBound(),"Export for reward bounded cumulative reward formulas currently unsupported.");
STORM_LOG_THROW(model.isDiscreteTimeModel()||!acc.isExitSet()||!baseRewardModel.hasStateRewards(),storm::exceptions::NotSupportedException,"Exit rewards for continuous time models are not supported.");