1#ifndef CEGAR_TRANSITION_SYSTEM_H
2#define CEGAR_TRANSITION_SYSTEM_H
4#include "downward/cartesian_abstractions/types.h"
15namespace cartesian_abstractions {
19class TransitionSystem {
20 const std::vector<std::vector<FactPair>> preconditions_by_operator;
21 const std::vector<std::vector<FactPair>> postconditions_by_operator;
24 std::vector<Transitions> incoming;
25 std::vector<Transitions> outgoing;
28 std::vector<Loops> loops;
33 void enlarge_vectors_by_one();
36 void add_loops_in_trivial_abstraction();
38 int get_precondition_value(
int op_id,
int var)
const;
39 int get_postcondition_value(
int op_id,
int var)
const;
41 void add_transition(
int src_id,
int op_id,
int target_id);
42 void add_loop(
int state_id,
int op_id);
44 void rewire_incoming_transitions(
45 const Transitions& old_incoming,
46 const AbstractStates& states,
47 const AbstractState& v1,
48 const AbstractState& v2,
50 void rewire_outgoing_transitions(
51 const Transitions& old_outgoing,
52 const AbstractStates& states,
53 const AbstractState& v1,
54 const AbstractState& v2,
57 const Loops& old_loops,
58 const AbstractState& v1,
59 const AbstractState& v2,
63 explicit TransitionSystem(
const OperatorsProxy& ops);
67 const AbstractStates& states,
69 const AbstractState& v1,
70 const AbstractState& v2,
73 const std::vector<Transitions>& get_incoming_transitions()
const;
74 const std::vector<Transitions>& get_outgoing_transitions()
const;
75 const std::vector<Loops>& get_loops()
const;
77 int get_num_states()
const;
78 int get_num_operators()
const;
79 int get_num_non_loops()
const;
80 int get_num_loops()
const;
82 void print_statistics(utils::LogProxy& log)
const;