Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
6359119
add assertions in a bug hunt
sjunges May 24, 2024
5223187
Merge branch 'master' of https://github.com/moves-rwth/storm
sjunges Jun 1, 2024
976bd76
Merge branch 'master' of https://github.com/moves-rwth/storm
sjunges Jun 4, 2024
bdbc3cb
Merge branch 'master' of https://github.com/moves-rwth/storm
sjunges Aug 20, 2024
120be47
Merge branch 'master' of https://github.com/moves-rwth/storm
sjunges Aug 28, 2024
0508d75
Merge branch 'master' of https://github.com/moves-rwth/storm
sjunges Sep 4, 2024
fbec5e3
Merge branch 'master' of https://github.com/moves-rwth/storm
sjunges Sep 25, 2024
da5e977
Verimon product in storm
lukovdm Oct 24, 2024
3f77cdc
Merge branch 'master' of https://github.com/moves-rwth/storm
sjunges Nov 9, 2024
3a8df49
update the observation trace unfolder towards generic support to comp…
sjunges Nov 11, 2024
561ca9f
format
sjunges Nov 11, 2024
bbb63a7
Add verimon storm code
lukovdm Nov 12, 2024
e816173
Add instantiation of observation trace unfolder for intervals
lukovdm Nov 14, 2024
58e7cee
Re-implementation of restart method for conditional probabilities for…
tquatmann Nov 17, 2024
ba6ff95
Working verimon generator
lukovdm Nov 18, 2024
8dd8252
Time measurements for conditional probability computation
tquatmann Nov 20, 2024
d98f302
Optimize verimon by removing superfluos actions
lukovdm Nov 21, 2024
87654d4
First version of binary approach
tquatmann Nov 27, 2024
bf9ee5b
Fix last bugs
lukovdm Nov 28, 2024
e104a0a
Merge branch 'moves-rwth:master' into verimon
lukovdm Nov 28, 2024
2205a13
Merge remote-tracking branch 'origin/master' into imcobservationtrace…
lukovdm Dec 10, 2024
aed5001
format
sjunges Nov 11, 2024
f41b337
Update src/storm-pomdp/transformer/ObservationTraceUnfolder.cpp
sjunges Jan 14, 2025
5221712
updates
lukovdm Jan 16, 2025
21363af
Re-implementation of restart method for conditional probabilities for…
tquatmann Nov 17, 2024
cf58ea9
Time measurements for conditional probability computation
tquatmann Nov 20, 2024
0625550
First version of binary approach
tquatmann Nov 27, 2024
5a2bff1
Merge remote-tracking branch 'tq-private/conditional' into conditional
tquatmann Jan 26, 2025
d1629b2
bisection approach (simple and advanced version)
tquatmann Jan 26, 2025
8bf8b7c
policy iteration
tquatmann Jan 27, 2025
bc2d82d
fix bug in unfolder
lukovdm Apr 25, 2025
b466b34
Merge branch 'master' into imcobservationtraceunfolder
lukovdm Apr 25, 2025
b329f22
Merge remote-tracking branch 'linus/robustpla-storm' into imcobservat…
lukovdm May 20, 2025
1dcf991
wip
lukovdm May 20, 2025
f950cd7
fix one linking error
lukovdm May 21, 2025
eafe06d
Parse rational interval models and fix bug
lukovdm May 21, 2025
81be1ac
small fixes
lukovdm May 22, 2025
1610eba
fix value iteration
lukovdm May 22, 2025
9306409
Merge remote-tracking branch 'origin/master' into conditional
tquatmann May 30, 2025
d301d8b
fixes for rational interval on gcc
lukovdm Jun 16, 2025
401a873
Merge remote-tracking branch 'origin/master' into conditional
tquatmann Jul 4, 2025
65251a5
polish conditional implementation
tquatmann Jul 4, 2025
5b248b0
Further polishing conditional probabilities
tquatmann Jul 5, 2025
43741f0
added a test case for conditional probabilities in mdps
tquatmann Jul 5, 2025
fd2af7c
fix formatting
tquatmann Jul 5, 2025
0b1bce3
Fix issue in restart method
tquatmann Jul 6, 2025
e2427ab
Implemented suggestion by sjunges
tquatmann Jul 8, 2025
da862da
added `bool BitVector::hasUniqueSetBit() const`
tquatmann Jul 8, 2025
c3fd405
wip interval multiplier
lukovdm Jul 9, 2025
39cb7df
Merge branch 'master' into imcobservationtraceunfolder
lukovdm Jul 9, 2025
6ef845b
added bounded until model checking for iMDPs
lukovdm Jul 9, 2025
0d0269f
fix test of bounded until model checking
lukovdm Jul 10, 2025
efabc1e
fix initialization of submatrix and b
lukovdm Jul 10, 2025
0bba8f6
remove prints
lukovdm Jul 10, 2025
b3f6b90
Make interval optimization direction opposite of non-det opt. dir.
lukovdm Jul 23, 2025
e4efd67
Merge branch 'conditional' into use-cond-alg-obs-trace-unfolder
lukovdm Sep 1, 2025
4b25c79
Merge branch 'master' into use-cond-alg-obs-trace-unfolder
lukovdm Sep 1, 2025
d9d351f
merge fix
lukovdm Sep 1, 2025
33887a8
Fix conditional model checking bugs
lukovdm Sep 16, 2025
1eaebdf
Fix conditional model checking bugs
lukovdm Sep 16, 2025
c4564d4
add warning to gmp log10
lukovdm Sep 16, 2025
2cd0c93
improve warning
lukovdm Sep 16, 2025
c3ecc83
fix formatting
lukovdm Sep 16, 2025
27020c9
create numDigits function
lukovdm Sep 17, 2025
fe180cc
remove accidental imports
lukovdm Sep 17, 2025
0b107e9
Merge branch 'cond-fix' into use-cond-alg-obs-trace-unfolder
lukovdm Oct 13, 2025
54b175f
Merge branch 'master' into verimon
lukovdm Oct 24, 2025
3f543ee
Added support for exporting scheduler for conditional properties
TheGreatfpmK Nov 5, 2025
ad52fec
Merge remote-tracking branch 'origin/master' into conditional-scheduler
TheGreatfpmK Nov 5, 2025
e29564a
make risk default in tover
lukovdm Nov 10, 2025
aac75b3
fix rejection state tover
lukovdm Nov 10, 2025
247a3bd
cleaning up unused code
TheGreatfpmK Nov 14, 2025
c55c6a4
Change trace message bisection
lukovdm Nov 17, 2025
349cbbc
fixing the conditional scheduler export
TheGreatfpmK Nov 19, 2025
33e22ce
add conditional threshold
lukovdm Nov 19, 2025
523b9f6
fixing the conditional scheduler export
TheGreatfpmK Nov 19, 2025
d491da4
fix bug in bitvector and bisection schedulers
lukovdm Nov 20, 2025
9da957b
Merge branch 'conditional-scheduler' into conditional-threshold
lukovdm Nov 20, 2025
58f9e92
Merge branch 'conditional-scheduler' into conditional-threshold
lukovdm Nov 20, 2025
c1d843b
fix scheduler of bisection conditional
lukovdm Nov 20, 2025
8f2ef01
formatting
lukovdm Nov 21, 2025
78b191c
Merge remote-tracking branch 'luko/conditional-threshold' into verimon
lukovdm Nov 24, 2025
c19f2db
Add condition label to monitor verifier
lukovdm Nov 26, 2025
2cc627d
Add ValueType to ExplicitQualitativeCheckResult
lukovdm Nov 26, 2025
11f0449
Add ValueType to ExplicitQualitativeCheckResult
lukovdm Nov 26, 2025
2bad8c6
Remember scheduler from quantitative scheduler when applying bounds
lukovdm Nov 26, 2025
e4ae96d
Export schedulers for qualitative models in the cli
lukovdm Nov 26, 2025
d342ac8
run format
lukovdm Nov 26, 2025
ede7c7b
Revert "Add ValueType to ExplicitQualitativeCheckResult"
lukovdm Nov 26, 2025
9f5111c
Merge branch 'conditional-threshold' into verimon
lukovdm Nov 26, 2025
8d74335
wip
lukovdm Nov 28, 2025
7b58f55
More
lukovdm Dec 1, 2025
96b5989
don't make scheduler when not requested
lukovdm Dec 2, 2025
83d4b50
Add ValueType to ExplicitQualitativeCheckResult
lukovdm Nov 26, 2025
ee9f051
Remember scheduler from quantitative scheduler when applying bounds
lukovdm Nov 26, 2025
1868e44
Export schedulers for qualitative models in the cli
lukovdm Nov 26, 2025
0da7fd8
Fix test
lukovdm Dec 3, 2025
798d3e4
Format
lukovdm Dec 3, 2025
73e73d8
remove weird git thing
lukovdm Dec 3, 2025
f3f81e1
fix one ValueType
lukovdm Dec 3, 2025
047d392
stuff for the benchmarking
lukovdm Dec 16, 2025
7e7ddd4
remove unused variable which used a lot of memory
lukovdm Dec 22, 2025
ced1961
Improvements for conditional bisection method
tquatmann Dec 24, 2025
e547ac9
Fix not (re-)setting the solver optimization direction
tquatmann Dec 24, 2025
018dc97
Add missing brackets
tquatmann Dec 24, 2025
e6425c3
Merge remote-tracking branch 'tim/feature/conditionals' into verimon
lukovdm Dec 30, 2025
c244648
fix compile problems
lukovdm Jan 2, 2026
ee84da5
conditional bisection: Integrated policy tracking approach
tquatmann Jan 10, 2026
35da3b6
Merge branch 'feature/conditionals' into verimon
tquatmann Jan 14, 2026
45ea7ed
cleaner scheduler computation
tquatmann Jan 15, 2026
5c74e7d
Optimizations for thresholded properties
tquatmann Jan 15, 2026
9a6a87a
Fix issue with policy tracking and policy export
tquatmann Jan 22, 2026
27100ac
add setting for experiments
sjunges Jan 23, 2026
efc6c03
refined add uncertainty to avoid adding uncertainty to states with ma…
sjunges Jan 23, 2026
4ebe940
Merge branch 'feature/conditionals-luko' of https://github.com/tquatm…
sjunges Jan 23, 2026
bbd6283
Fixed case where all initial component states are good
tquatmann Jan 23, 2026
a98db59
Merge branch 'feature/conditionals-luko' of https://github.com/tquatm…
sjunges Jan 23, 2026
e608801
print iterations and fix tolerance
sjunges Jan 23, 2026
4e5b17b
a bit extra output
sjunges Jan 23, 2026
db266b7
disabled backwards edge to initial when collapsing initial component.
tquatmann Jan 25, 2026
542c1b9
Fix numerical issues with small bisection values and thresholded opti…
tquatmann Jan 25, 2026
47a5881
Merge branch 'feature/conditionals-luko' of https://github.com/tquatm…
sjunges Jan 25, 2026
2bf52e2
Merge branch 'master' into AddSchedulerToExplicitQualitativeCheckResult
lukovdm Mar 4, 2026
02350c2
Refactor ExplicitQualitativeCheckResult constructor to use std::optio…
lukovdm Mar 4, 2026
a82759a
fix some new location and swich to std::optional
lukovdm Mar 5, 2026
f07309c
format
lukovdm Mar 5, 2026
4be794c
Update ExplicitQualitativeCheckResult usage to use SolutionType and i…
lukovdm Mar 6, 2026
7e57f56
Fix other qualitative check result value types
lukovdm Mar 6, 2026
94cb864
format
lukovdm Mar 6, 2026
f1d7d3d
Merge branch 'AddSchedulerToExplicitQualitativeCheckResult' into verimon
lukovdm Mar 6, 2026
1da2b80
Merge remote-tracking branch 'luko/imcobservationtraceunfolder' into …
lukovdm Mar 6, 2026
5acfab7
Fix almost all build problems
lukovdm Mar 6, 2026
d0cf6f0
Add support for interval value types in model processing and verifica…
lukovdm Mar 10, 2026
45910bc
formatting
lukovdm Mar 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions resources/3rdparty/l3pp
Submodule l3pp added at e4f8d7
89 changes: 65 additions & 24 deletions src/storm-cli-utilities/model-handling.h
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ struct ModelProcessingInformation {
bool transformToJani;

// Which data type is to be used for numbers ...
enum class ValueType { FinitePrecision, Exact, Parametric };
enum class ValueType { FinitePrecision, Exact, Parametric, FinitePrecisionInterval, ExactInterval };
ValueType buildValueType; // ... during model building
ValueType verificationValueType; // ... during model verification

Expand Down Expand Up @@ -222,9 +222,17 @@ inline ModelProcessingInformation getModelProcessingInformation(SymbolicInput co
if (generalSettings.isParametricSet()) {
mpi.verificationValueType = ModelProcessingInformation::ValueType::Parametric;
} else if (generalSettings.isExactSet()) {
mpi.verificationValueType = ModelProcessingInformation::ValueType::Exact;
if (generalSettings.isIntervalSet()) {
mpi.verificationValueType = ModelProcessingInformation::ValueType::ExactInterval;
} else {
mpi.verificationValueType = ModelProcessingInformation::ValueType::Exact;
}
} else {
mpi.verificationValueType = ModelProcessingInformation::ValueType::FinitePrecision;
if (generalSettings.isIntervalSet()) {
mpi.verificationValueType = ModelProcessingInformation::ValueType::FinitePrecisionInterval;
} else {
mpi.verificationValueType = ModelProcessingInformation::ValueType::FinitePrecision;
}
}
auto originalVerificationValueType = mpi.verificationValueType;

Expand Down Expand Up @@ -270,6 +278,12 @@ inline ModelProcessingInformation getModelProcessingInformation(SymbolicInput co
case ModelProcessingInformation::ValueType::FinitePrecision:
return storm::utility::canHandle<double>(
mpi.engine, input.preprocessedProperties.is_initialized() ? input.preprocessedProperties.get() : input.properties, input.model.get());
case ModelProcessingInformation::ValueType::FinitePrecisionInterval:
return storm::utility::canHandle<storm::Interval>(
mpi.engine, input.preprocessedProperties.is_initialized() ? input.preprocessedProperties.get() : input.properties, input.model.get());
case ModelProcessingInformation::ValueType::ExactInterval:
return storm::utility::canHandle<storm::RationalInterval>(
mpi.engine, input.preprocessedProperties.is_initialized() ? input.preprocessedProperties.get() : input.properties, input.model.get());
}
return false;
};
Expand Down Expand Up @@ -381,6 +395,10 @@ auto applyValueType(ModelProcessingInformation::ValueType vt, auto const& callba
return callback.template operator()<storm::RationalNumber>();
case Parametric:
return callback.template operator()<storm::RationalFunction>();
case FinitePrecisionInterval:
return callback.template operator()<storm::Interval>();
case ExactInterval:
return callback.template operator()<storm::RationalInterval>();
}
STORM_LOG_THROW(false, storm::exceptions::UnexpectedException, "Unexpected value type.");
}
Expand All @@ -400,6 +418,10 @@ auto applyDdLibValueType(storm::dd::DdType dd, ModelProcessingInformation::Value
return callback.template operator()<Sylvan, storm::RationalNumber>();
case Parametric:
return callback.template operator()<Sylvan, storm::RationalFunction>();
case FinitePrecisionInterval:
return callback.template operator()<Sylvan, storm::Interval>();
case ExactInterval:
return callback.template operator()<Sylvan, storm::RationalInterval>();
}
}
STORM_LOG_THROW(false, storm::exceptions::UnexpectedException, "Unexpected DDType or value type.");
Expand Down Expand Up @@ -591,8 +613,12 @@ std::shared_ptr<storm::models::ModelBase> buildModelExplicit(storm::settings::mo
storm::parser::DirectEncodingValueType valueType{Default};
if constexpr (std::is_same_v<ValueType, double>) {
valueType = Double;
} else if constexpr (std::is_same_v<ValueType, storm::Interval>) {
valueType = DoubleInterval;
} else if constexpr (std::is_same_v<ValueType, storm::RationalNumber>) {
valueType = Rational;
} else if constexpr (std::is_same_v<ValueType, storm::RationalInterval>) {
valueType = RationalInterval;
} else {
static_assert(std::is_same_v<ValueType, storm::RationalFunction>, "Unexpected value type.");
valueType = Parametric;
Expand Down Expand Up @@ -1285,30 +1311,38 @@ inline std::vector<std::vector<storm::expressions::Expression>> parseInjectedRef

template<storm::dd::DdType DdType, typename ValueType>
void verifyWithAbstractionRefinementEngine(SymbolicInput const& input, ModelProcessingInformation const& mpi) {
STORM_LOG_ASSERT(input.model, "Expected symbolic model description.");
storm::settings::modules::AbstractionSettings const& abstractionSettings = storm::settings::getModule<storm::settings::modules::AbstractionSettings>();
storm::gbar::api::AbstractionRefinementOptions options(
parseConstraints(input.model->getManager(), abstractionSettings.getConstraintString()),
parseInjectedRefinementPredicates(input.model->getManager(), abstractionSettings.getInjectedRefinementPredicates()));

verifyProperties<ValueType>(input, [&input, &options, &mpi](std::shared_ptr<storm::logic::Formula const> const& formula,
std::shared_ptr<storm::logic::Formula const> const& states) {
STORM_LOG_THROW(states->isInitialFormula(), storm::exceptions::NotSupportedException, "Abstraction-refinement can only filter initial states.");
return storm::gbar::api::verifyWithAbstractionRefinementEngine<DdType, ValueType>(mpi.env, input.model.get(),
storm::api::createTask<ValueType>(formula, true), options);
});
if constexpr (storm::IsIntervalType<ValueType>) {
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Abstraction-refinement engine does not support interval value types.");
} else {
STORM_LOG_ASSERT(input.model, "Expected symbolic model description.");
storm::settings::modules::AbstractionSettings const& abstractionSettings = storm::settings::getModule<storm::settings::modules::AbstractionSettings>();
storm::gbar::api::AbstractionRefinementOptions options(
parseConstraints(input.model->getManager(), abstractionSettings.getConstraintString()),
parseInjectedRefinementPredicates(input.model->getManager(), abstractionSettings.getInjectedRefinementPredicates()));

verifyProperties<ValueType>(input, [&input, &options, &mpi](std::shared_ptr<storm::logic::Formula const> const& formula,
std::shared_ptr<storm::logic::Formula const> const& states) {
STORM_LOG_THROW(states->isInitialFormula(), storm::exceptions::NotSupportedException, "Abstraction-refinement can only filter initial states.");
return storm::gbar::api::verifyWithAbstractionRefinementEngine<DdType, ValueType>(mpi.env, input.model.get(),
storm::api::createTask<ValueType>(formula, true), options);
});
}
}

template<typename ValueType>
void verifyWithExplorationEngine(SymbolicInput const& input, ModelProcessingInformation const& mpi) {
STORM_LOG_ASSERT(input.model, "Expected symbolic model description.");
STORM_LOG_THROW((std::is_same<ValueType, double>::value), storm::exceptions::NotSupportedException,
"Exploration does not support other data-types than floating points.");
verifyProperties<ValueType>(
input, [&input, &mpi](std::shared_ptr<storm::logic::Formula const> const& formula, std::shared_ptr<storm::logic::Formula const> const& states) {
STORM_LOG_THROW(states->isInitialFormula(), storm::exceptions::NotSupportedException, "Exploration can only filter initial states.");
return storm::api::verifyWithExplorationEngine<ValueType>(mpi.env, input.model.get(), storm::api::createTask<ValueType>(formula, true));
});
if constexpr (storm::IsIntervalType<ValueType>) {
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Exploration engine does not support interval value types.");
} else {
STORM_LOG_ASSERT(input.model, "Expected symbolic model description.");
STORM_LOG_THROW((std::is_same<ValueType, double>::value), storm::exceptions::NotSupportedException,
"Exploration does not support other data-types than floating points.");
verifyProperties<ValueType>(
input, [&input, &mpi](std::shared_ptr<storm::logic::Formula const> const& formula, std::shared_ptr<storm::logic::Formula const> const& states) {
STORM_LOG_THROW(states->isInitialFormula(), storm::exceptions::NotSupportedException, "Exploration can only filter initial states.");
return storm::api::verifyWithExplorationEngine<ValueType>(mpi.env, input.model.get(), storm::api::createTask<ValueType>(formula, true));
});
}
}

template<typename ValueType>
Expand Down Expand Up @@ -1336,7 +1370,7 @@ void verifyModel(std::shared_ptr<storm::models::sparse::Model<ValueType>> const&

std::unique_ptr<storm::modelchecker::CheckResult> filter;
if (filterForInitialStates) {
filter = std::make_unique<storm::modelchecker::ExplicitQualitativeCheckResult>(sparseModel->getInitialStates());
filter = std::make_unique<storm::modelchecker::ExplicitQualitativeCheckResult<ValueType>>(sparseModel->getInitialStates());
} else if (!states->isTrueFormula()) { // No need to apply filter if it is the formula 'true'
filter = storm::api::verifyWithSparseEngine<ValueType>(mpi.env, sparseModel, createTask(states, false));
}
Expand Down Expand Up @@ -1382,6 +1416,13 @@ void verifyModel(std::shared_ptr<storm::models::sparse::Model<ValueType>> const&
auto const& paretoRes = result->template asExplicitParetoCurveCheckResult<ValueType>();
storm::api::exportParetoScheduler(sparseModel, paretoRes.getPoints(), paretoRes.getSchedulers(), schedulerExportPath.string());
}
} else if (result->isExplicitQualitativeCheckResult()) {
if constexpr (storm::IsIntervalType<ValueType>) {
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Scheduler export for interval models is not supported.");
} else {
storm::api::exportScheduler(sparseModel, result->template asExplicitQualitativeCheckResult<ValueType>().getScheduler(),
schedulerExportPath.string());
}
} else {
STORM_LOG_THROW(false, storm::exceptions::NotSupportedException, "Scheduler export not supported for this value type.");
}
Expand Down
2 changes: 1 addition & 1 deletion src/storm-counterexamples/api/counterexamples.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ std::shared_ptr<storm::counterexamples::Counterexample> computeKShortestPathCoun

storm::logic::EventuallyFormula const& eventuallyFormula = subformula.asEventuallyFormula();
std::unique_ptr<storm::modelchecker::CheckResult> subResult = modelchecker.check(env, eventuallyFormula.getSubformula());
storm::modelchecker::ExplicitQualitativeCheckResult const& subQualitativeResult = subResult->asExplicitQualitativeCheckResult();
storm::modelchecker::ExplicitQualitativeCheckResult<double> const& subQualitativeResult = subResult->template asExplicitQualitativeCheckResult<double>();

// Check if counterexample is even possible
storm::storage::BitVector phiStates(model->getNumberOfStates(), true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1022,8 +1022,8 @@ class MILPMinimalLabelSetGenerator {
std::unique_ptr<storm::modelchecker::CheckResult> leftResult = modelchecker.check(env, untilFormula.getLeftSubformula());
std::unique_ptr<storm::modelchecker::CheckResult> rightResult = modelchecker.check(env, untilFormula.getRightSubformula());

storm::modelchecker::ExplicitQualitativeCheckResult const& leftQualitativeResult = leftResult->asExplicitQualitativeCheckResult();
storm::modelchecker::ExplicitQualitativeCheckResult const& rightQualitativeResult = rightResult->asExplicitQualitativeCheckResult();
storm::modelchecker::ExplicitQualitativeCheckResult<T> const& leftQualitativeResult = leftResult->template asExplicitQualitativeCheckResult<T>();
storm::modelchecker::ExplicitQualitativeCheckResult<T> const& rightQualitativeResult = rightResult->template asExplicitQualitativeCheckResult<T>();

phiStates = leftQualitativeResult.getTruthValuesVector();
psiStates = rightQualitativeResult.getTruthValuesVector();
Expand All @@ -1032,7 +1032,7 @@ class MILPMinimalLabelSetGenerator {

std::unique_ptr<storm::modelchecker::CheckResult> subResult = modelchecker.check(env, eventuallyFormula.getSubformula());

storm::modelchecker::ExplicitQualitativeCheckResult const& subQualitativeResult = subResult->asExplicitQualitativeCheckResult();
storm::modelchecker::ExplicitQualitativeCheckResult<T> const& subQualitativeResult = subResult->template asExplicitQualitativeCheckResult<T>();

phiStates = storm::storage::BitVector(mdp.getNumberOfStates(), true);
psiStates = subQualitativeResult.getTruthValuesVector();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2157,8 +2157,8 @@ class SMTMinimalLabelSetGenerator {
std::unique_ptr<storm::modelchecker::CheckResult> leftResult = modelchecker.check(env, untilFormula.getLeftSubformula());
std::unique_ptr<storm::modelchecker::CheckResult> rightResult = modelchecker.check(env, untilFormula.getRightSubformula());

storm::modelchecker::ExplicitQualitativeCheckResult const& leftQualitativeResult = leftResult->asExplicitQualitativeCheckResult();
storm::modelchecker::ExplicitQualitativeCheckResult const& rightQualitativeResult = rightResult->asExplicitQualitativeCheckResult();
storm::modelchecker::ExplicitQualitativeCheckResult<T> const& leftQualitativeResult = leftResult->template asExplicitQualitativeCheckResult<T>();
storm::modelchecker::ExplicitQualitativeCheckResult<T> const& rightQualitativeResult = rightResult->template asExplicitQualitativeCheckResult<T>();

result.phiStates = leftQualitativeResult.getTruthValuesVector();
result.psiStates = rightQualitativeResult.getTruthValuesVector();
Expand All @@ -2167,7 +2167,7 @@ class SMTMinimalLabelSetGenerator {

std::unique_ptr<storm::modelchecker::CheckResult> subResult = modelchecker.check(env, eventuallyFormula.getSubformula());

storm::modelchecker::ExplicitQualitativeCheckResult const& subQualitativeResult = subResult->asExplicitQualitativeCheckResult();
storm::modelchecker::ExplicitQualitativeCheckResult<T> const& subQualitativeResult = subResult->template asExplicitQualitativeCheckResult<T>();

result.phiStates = storm::storage::BitVector(model.getNumberOfStates(), true);
result.psiStates = subQualitativeResult.getTruthValuesVector();
Expand Down
2 changes: 1 addition & 1 deletion src/storm-dft/modelchecker/DFTModelChecker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ std::vector<ValueType> DFTModelChecker<ValueType>::checkModel(std::shared_ptr<st
storm::api::verifyWithSparseEngine<ValueType>(model, storm::api::createTask<ValueType>(property, true)));

if (result) {
result->filter(storm::modelchecker::ExplicitQualitativeCheckResult(model->getInitialStates()));
result->filter(storm::modelchecker::ExplicitQualitativeCheckResult<ValueType>(model->getInitialStates()));
ValueType resultValue = result->asExplicitQuantitativeCheckResult<ValueType>().getValueMap().begin()->second;
results.push_back(resultValue);
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/storm-pars-cli/sampling.h
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void verifyPropertiesAtSamplePoints(ModelType const& model, cli::SymbolicInput c
valuationWatch.stop();

if (result) {
result->filter(storm::modelchecker::ExplicitQualitativeCheckResult(model.getInitialStates()));
result->filter(storm::modelchecker::ExplicitQualitativeCheckResult<SolveValueType>(model.getInitialStates()));
}
printInitialStatesResult<ValueType>(result, &valuationWatch, &valuation);

Expand Down
2 changes: 1 addition & 1 deletion src/storm-pars-cli/solutionFunctions.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ void computeSolutionFunctionsWithSparseEngine(std::shared_ptr<storm::models::spa
std::unique_ptr<storm::modelchecker::CheckResult> result =
storm::api::verifyWithSparseEngine<ValueType>(model, storm::api::createTask<ValueType>(formula, true));
if (result) {
result->filter(storm::modelchecker::ExplicitQualitativeCheckResult(model->getInitialStates()));
result->filter(storm::modelchecker::ExplicitQualitativeCheckResult<ValueType>(model->getInitialStates()));
}
return result;
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,20 +143,20 @@ void SparseDerivativeInstantiationModelChecker<FunctionType, ConstantType>::spec
if (this->currentFormula->isRewardOperatorFormula()) {
auto subformula = modelchecker::CheckTask<storm::logic::Formula, FunctionType>(
this->currentFormula->asRewardOperatorFormula().getSubformula().asEventuallyFormula().getSubformula());
target = propositionalChecker.check(subformula)->asExplicitQualitativeCheckResult().getTruthValuesVector();
target = propositionalChecker.check(subformula)->template asExplicitQualitativeCheckResult<FunctionType>().getTruthValuesVector();
} else {
if (this->currentFormula->asProbabilityOperatorFormula().getSubformula().isUntilFormula()) {
auto rightSubformula = modelchecker::CheckTask<storm::logic::Formula, FunctionType>(
this->currentFormula->asProbabilityOperatorFormula().getSubformula().asUntilFormula().getRightSubformula());
auto leftSubformula = modelchecker::CheckTask<storm::logic::Formula, FunctionType>(
this->currentFormula->asProbabilityOperatorFormula().getSubformula().asUntilFormula().getLeftSubformula());
target = propositionalChecker.check(rightSubformula)->asExplicitQualitativeCheckResult().getTruthValuesVector();
avoid = propositionalChecker.check(leftSubformula)->asExplicitQualitativeCheckResult().getTruthValuesVector();
target = propositionalChecker.check(rightSubformula)->template asExplicitQualitativeCheckResult<FunctionType>().getTruthValuesVector();
avoid = propositionalChecker.check(leftSubformula)->template asExplicitQualitativeCheckResult<FunctionType>().getTruthValuesVector();
avoid.complement();
} else {
auto subformula = modelchecker::CheckTask<storm::logic::Formula, FunctionType>(
this->currentFormula->asProbabilityOperatorFormula().getSubformula().asEventuallyFormula().getSubformula());
target = propositionalChecker.check(subformula)->asExplicitQualitativeCheckResult().getTruthValuesVector();
target = propositionalChecker.check(subformula)->template asExplicitQualitativeCheckResult<FunctionType>().getTruthValuesVector();
}
}
initialStateModel = model.getStates("init").getNextSetIndex(0);
Expand Down
Loading
Loading