1#ifndef CEGAR_ABSTRACT_STATE_H
2#define CEGAR_ABSTRACT_STATE_H
4#include "downward/cartesian_abstractions/cartesian_set.h"
5#include "downward/cartesian_abstractions/types.h"
14namespace cartesian_abstractions {
27 CartesianSet cartesian_set;
30 AbstractState(
int state_id, NodeID node_id, CartesianSet&& cartesian_set);
32 AbstractState(
const AbstractState&) =
delete;
34 bool domain_subsets_intersect(
const AbstractState& other,
int var)
const;
37 int count(
int var)
const;
39 bool contains(
int var,
int value)
const;
42 CartesianSet regress(
const OperatorProxy& op)
const;
48 std::pair<CartesianSet, CartesianSet>
49 split_domain(
int var,
const std::vector<int>& wanted)
const;
51 bool includes(
const AbstractState& other)
const;
52 bool includes(
const State& concrete_state)
const;
53 bool includes(
const std::vector<FactPair>& facts)
const;
58 NodeID get_node_id()
const;
61 operator<<(std::ostream& os,
const AbstractState& state)
63 return os <<
"#" << state.get_id() << state.cartesian_set;
67 static std::unique_ptr<AbstractState>
68 get_trivial_abstract_state(
const std::vector<int>& domain_sizes);