4#include "downward/cartesian_abstractions/abstract_search.h"
5#include "downward/cartesian_abstractions/split_selector.h"
7#include "downward/task_proxy.h"
9#include "downward/utils/countdown_timer.h"
14class RandomNumberGenerator;
18namespace cartesian_abstractions {
31 const TaskProxy task_proxy;
32 const std::vector<int> domain_sizes;
34 const int max_non_looping_transitions;
35 const SplitSelector split_selector;
37 std::unique_ptr<Abstraction> abstraction;
38 AbstractSearch abstract_search;
41 utils::CountdownTimer timer;
45 bool may_keep_refining()
const;
55 void separate_facts_unreachable_before_goal();
59 std::unique_ptr<Flaw> find_flaw(
const Solution& solution);
62 void refinement_loop(utils::RandomNumberGenerator& rng);
64 void print_statistics();
68 const std::shared_ptr<AbstractTask>& task,
70 int max_non_looping_transitions,
73 utils::RandomNumberGenerator& rng,
74 utils::LogProxy& log);
77 CEGAR(
const CEGAR&) =
delete;
79 std::unique_ptr<Abstraction> extract_abstraction();