STORM_LOG_THROW(lowerBound>=0&&upperBound>=0,storm::exceptions::InvalidArgumentException,"Bounded until formula requires non-negative time bounds.");
STORM_LOG_THROW(lowerBound<=upperBound,storm::exceptions::InvalidArgumentException,"Lower bound of bounded until formula is required to be smaller than the upper bound.");
STORM_LOG_THROW(!pathFormula.isStepBounded(),storm::exceptions::NotImplementedException,"Currently step-bounded properties on CTMCs are not supported.");
STORM_LOG_THROW(!pathFormula.isStepBounded(),storm::exceptions::NotImplementedException,"Currently step-bounded properties on CTMCs are not supported.");
STORM_LOG_THROW(this->getModel().isClosed(),storm::exceptions::InvalidPropertyException,"Unable to compute time-bounded reachability probabilities in non-closed Markov automaton.");
STORM_LOG_THROW(!pathFormula.isStepBounded(),storm::exceptions::NotImplementedException,"Currently step-bounded properties on MAs are not supported.");
STORM_LOG_THROW(!result.originalModel.isOfType(storm::models::ModelType::MarkovAutomaton)||!formula.isStepBounded(),storm::exceptions::InvalidPropertyException,"Multi-objective model checking currently does not support step-bounded properties for Markov automata.");
STORM_LOG_THROW(formula.getIntervalBounds().first==std::round(formula.getIntervalBounds().first),storm::exceptions::InvalidPropertyException,"Expected a boundedUntilFormula with discrete lower time bound but got "<<formula<<".");
STORM_LOG_THROW(formula.getIntervalBounds().second==std::round(formula.getIntervalBounds().second),storm::exceptions::InvalidPropertyException,"Expected a boundedUntilFormula with discrete upper time bound but got "<<formula<<".");
}else{
STORM_LOG_THROW(result.originalModel.isOfType(storm::models::ModelType::MarkovAutomaton),storm::exceptions::InvalidPropertyException,"Got a boundedUntilFormula which can not be checked for the current model type.");
STORM_LOG_THROW(formula.getIntervalBounds().second>formula.getIntervalBounds().first,storm::exceptions::InvalidPropertyException,"Neither empty nor point intervalls are allowed but got "<<formula<<".");
STORM_LOG_THROW(currentObjective.lowerTimeBound<currentObjective.upperTimeBound,storm::exceptions::InvalidPropertyException,"Empty or point time intervals are currently not supported by multi-objective model checking.");
STORM_LOG_THROW(pathFormula.hasDiscreteTimeBound(),storm::exceptions::InvalidArgumentException,"Formula needs to have a discrete time bound.");
STORM_LOG_THROW(!pathFormula.hasLowerBound()&&pathFormula.hasUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have single upper time bound.");
STORM_LOG_THROW(pathFormula.hasIntegerUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have discrete upper 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(pathFormula.hasDiscreteTimeBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have a discrete time bound.");
STORM_LOG_THROW(!pathFormula.hasLowerBound()&&pathFormula.hasUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have single upper time bound.");
STORM_LOG_THROW(pathFormula.hasIntegerUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have discrete upper time bound.");
STORM_LOG_THROW(pathFormula.hasDiscreteTimeBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have a discrete time bound.");
STORM_LOG_THROW(!pathFormula.hasLowerBound()&&pathFormula.hasUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have single upper time bound.");
STORM_LOG_THROW(pathFormula.hasIntegerUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have discrete upper time bound.");
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(!pathFormula.hasLowerBound()&&pathFormula.hasUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have single upper time bound.");
STORM_LOG_THROW(pathFormula.hasIntegerUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have discrete upper time bound.");
STORM_LOG_THROW(pathFormula.hasDiscreteTimeBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have a discrete time bound.");
STORM_LOG_THROW(!pathFormula.hasLowerBound()&&pathFormula.hasUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have single upper time bound.");
STORM_LOG_THROW(pathFormula.hasIntegerUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have discrete upper time bound.");
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(pathFormula.hasDiscreteTimeBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have a discrete time bound.");
STORM_LOG_THROW(!pathFormula.hasLowerBound()&&pathFormula.hasUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have single upper time bound.");
STORM_LOG_THROW(pathFormula.hasIntegerUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have discrete upper time bound.");
STORM_LOG_THROW(!pathFormula.hasLowerBound()&&pathFormula.hasUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have single upper time bound.");
STORM_LOG_THROW(pathFormula.hasIntegerUpperBound(),storm::exceptions::InvalidPropertyException,"Formula needs to have discrete upper time bound.");
// Retrieve the appropriate bitvectors by model checking the subformulas.