AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
transition_system.h
1#ifndef CEGAR_TRANSITION_SYSTEM_H
2#define CEGAR_TRANSITION_SYSTEM_H
3
4#include "downward/cartesian_abstractions/types.h"
5
6#include <vector>
7
8struct FactPair;
9class OperatorsProxy;
10
11namespace utils {
12class LogProxy;
13}
14
15namespace cartesian_abstractions {
16/*
17 Rewire transitions after each split.
18*/
19class TransitionSystem {
20 const std::vector<std::vector<FactPair>> preconditions_by_operator;
21 const std::vector<std::vector<FactPair>> postconditions_by_operator;
22
23 // Transitions from and to other abstract states.
24 std::vector<Transitions> incoming;
25 std::vector<Transitions> outgoing;
26
27 // Store self-loops (operator indices) separately to save space.
28 std::vector<Loops> loops;
29
30 int num_non_loops;
31 int num_loops;
32
33 void enlarge_vectors_by_one();
34
35 // Add self-loops to single abstract state in trivial abstraction.
36 void add_loops_in_trivial_abstraction();
37
38 int get_precondition_value(int op_id, int var) const;
39 int get_postcondition_value(int op_id, int var) const;
40
41 void add_transition(int src_id, int op_id, int target_id);
42 void add_loop(int state_id, int op_id);
43
44 void rewire_incoming_transitions(
45 const Transitions& old_incoming,
46 const AbstractStates& states,
47 const AbstractState& v1,
48 const AbstractState& v2,
49 int var);
50 void rewire_outgoing_transitions(
51 const Transitions& old_outgoing,
52 const AbstractStates& states,
53 const AbstractState& v1,
54 const AbstractState& v2,
55 int var);
56 void rewire_loops(
57 const Loops& old_loops,
58 const AbstractState& v1,
59 const AbstractState& v2,
60 int var);
61
62public:
63 explicit TransitionSystem(const OperatorsProxy& ops);
64
65 // Update transition system after v has been split for var into v1 and v2.
66 void rewire(
67 const AbstractStates& states,
68 int v_id,
69 const AbstractState& v1,
70 const AbstractState& v2,
71 int var);
72
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;
76
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;
81
82 void print_statistics(utils::LogProxy& log) const;
83};
84} // namespace cartesian_abstractions
85
86#endif