1#ifndef CEGAR_ABSTRACTION_H
2#define CEGAR_ABSTRACTION_H
4#include "downward/cartesian_abstractions/types.h"
6#include "downward/task_proxy.h"
8#include "downward/utils/collections.h"
17namespace cartesian_abstractions {
19class RefinementHierarchy;
20class TransitionSystem;
29 const std::unique_ptr<TransitionSystem> transition_system;
30 const State concrete_initial_state;
31 const std::vector<FactPair> goal_facts;
34 AbstractStates states;
42 std::unique_ptr<RefinementHierarchy> refinement_hierarchy;
46 void initialize_trivial_abstraction(
const std::vector<int>& domain_sizes);
50 const std::shared_ptr<AbstractTask>& task,
51 utils::LogProxy& log);
54 Abstraction(
const Abstraction&) =
delete;
56 int get_num_states()
const;
57 const AbstractState& get_initial_state()
const;
58 const Goals& get_goals()
const;
59 const AbstractState& get_state(
int state_id)
const;
60 const TransitionSystem& get_transition_system()
const;
61 std::unique_ptr<RefinementHierarchy> extract_refinement_hierarchy();
64 void mark_all_states_as_goals();
68 refine(
const AbstractState& state,
int var,
const std::vector<int>& wanted);
70 void print_statistics()
const;