8namespace modelchecker {
 
   10namespace rewardbounded {
 
   16    return value == std::numeric_limits<uint64_t>::max();
 
 
   31    return value < other.value;
 
 
   35    return value == other.value;
 
 
   39    return CostLimit(std::numeric_limits<uint64_t>::max());
 
 
   44    for (uint64_t i = 0; i < lhs.size(); ++i) {
 
   45        if (lhs[i] < rhs[i]) {
 
   47        } 
else if (rhs[i] < lhs[i]) {
 
 
   61    std::vector<CostLimits> pointsToErase;
 
   62    for (
auto const& b : generator) {
 
   66            STORM_LOG_ASSERT(pointsToErase.empty(), 
"Inconsistent generator of CostLimitClosure.");
 
   72            pointsToErase.push_back(b);
 
   75    for (
auto const& b : pointsToErase) {
 
   78    generator.insert(std::move(costLimits));
 
 
   85    for (
auto const& b : generator) {
 
 
   95    for (
auto dim : downwardDimensions) {
 
 
  102    return generator.empty();
 
 
  107    for (
auto dim : downwardDimensions) {
 
 
  114    for (uint64_t i = 0; i < lhs.size(); ++i) {
 
  115        if (downwardDimensions.
get(i)) {
 
  116            if (lhs[i] < rhs[i]) {
 
  120            if (rhs[i] < lhs[i]) {
 
 
  129    std::vector<CostLimits> result;
 
  130    for (
auto const& b : generator) {
 
 
  143    return downwardDimensions.
size();
 
 
  149    auto manager = std::make_shared<storm::expressions::ExpressionManager>();
 
  152    std::vector<storm::expressions::Expression> point;
 
  154    for (uint64_t i = 0; i < 
dimension; ++i) {
 
  155        point.push_back(manager->declareIntegerVariable(
"x" + std::to_string(i)).getExpression());
 
  156        solver->add(point.back() >= zero);
 
  158    for (
auto const& cl : {first, second}) {
 
  159        for (
auto const& q : cl.getGenerator()) {
 
  161            for (uint64_t i = 0; i < point.size(); ++i) {
 
  162                if (!cl.downwardDimensions.get(i) || !q[i].isInfinity()) {
 
  163                    assert(!q[i].isInfinity());
 
  167                        pointNotDominated = pointNotDominated || piNotDominated;
 
  169                        pointNotDominated = piNotDominated;
 
  174                solver->add(pointNotDominated);
 
  176                solver->add(manager->boolean(
false));
 
 
 
bool isInitialized() const
Checks whether the object encapsulates a base-expression.
static bool unionFull(CostLimitClosure const &first, CostLimitClosure const &second)
Returns true if the union of the two closures is full, i.e., contains every point.
std::vector< CostLimits > getDominatingCostLimits(CostLimits const &costLimits) const
uint64_t dimension() const
CostLimitClosure(storm::storage::BitVector const &downwardDimensions)
bool dominates(CostLimits const &lhs, CostLimits const &rhs) const
GeneratorType const & getGenerator() const
bool contains(CostLimits const &costLimits) const
std::set< CostLimits, CostLimitsCompare > GeneratorType
bool insert(CostLimits const &costLimits)
bool containsUpwardClosure(CostLimits const &costLimits) const
CostLimit(uint64_t const &costLimit)
bool operator<(CostLimit const &other) const
bool operator==(CostLimit const &other) const
static CostLimit infinity()
uint64_t const & get() const
A bit vector that is internally represented as a vector of 64-bit values.
size_t size() const
Retrieves the number of bits this bit vector can store.
bool get(uint64_t index) const
Retrieves the truth value of the bit at the given index and performs a bound check.
#define STORM_LOG_ASSERT(cond, message)
std::vector< CostLimit > CostLimits
std::unique_ptr< storm::solver::SmtSolver > getSmtSolver(storm::expressions::ExpressionManager &manager)
bool operator()(CostLimits const &lhs, CostLimits const &rhs) const