12#ifndef MCRL2_PBES_STRUCTURE_GRAPH_BUILDER_H
13#define MCRL2_PBES_STRUCTURE_GRAPH_BUILDER_H
20namespace pbes_system {
31 std::hash<atermpp::detail::reference_aterm<pbes_expression> >,
32 std::equal_to<atermpp::detail::reference_aterm<pbes_expression> >,
88 throw std::runtime_error(
"structure_graph_builder: encountered unsupported pbes_expression " +
pp(x));
144 if (!contains(u.successors, vi))
146 u.successors.push_back(vi);
147 v.predecessors.push_back(ui);
188 std::vector<index_type> index;
196 auto update = [&](
const std::vector<index_type>& V) {
197 std::vector<index_type> result;
202 result.push_back(index[v]);
Base class that should not be used.
A unordered_map class in which aterms can be stored.
iterator erase(const_iterator pos)
reference emplace_back(Args &&... args)
\brief A propositional variable instantiation
boost::dynamic_bitset m_exclude
std::size_t extent() const
index_type m_initial_vertex
bool is_conjunctive(const pbes_expression &phi)
constexpr unsigned int undefined_vertex()
bool is_or(const atermpp::aterm &x)
bool is_false(const pbes_expression &t)
Test for the value false.
bool is_propositional_variable_instantiation(const atermpp::aterm &x)
std::string pp(const fixpoint_symbol &x)
bool is_and(const atermpp::aterm &x)
bool is_true(const pbes_expression &t)
Test for the value true.
bool contains(const atermpp::indexed_set< Key, ThreadSafe, Hash, Equals, Allocator, KeyTable > &c, const typename atermpp::indexed_set< Key, ThreadSafe, Hash, Equals, Allocator, KeyTable >::key_type &v, const std::size_t thread_index=0)
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
void swap(atermpp::unprotected_aterm_core &t1, atermpp::unprotected_aterm_core &t2) noexcept
Swaps two aterms.
add your file description here.
void finalize()
call at the end, to put the results into m_graph
index_type m_initial_state
void insert_edge(index_type ui, index_type vi)
structure_graph::vertex_vector m_vertices
structure_graph::index_type index_type
void set_initial_state(const index_type i)
index_type insert_vertex(bool is_conjunctive, std::size_t rank)
Create a vertex, returns the index of the new vertex.
manual_structure_graph_builder(structure_graph &G)
void remove_edge(index_type ui, index_type vi)
structure_graph & m_graph
void erase_vertices(const vertex_set &U)
structure_graph::index_type index_type
index_type insert_variable(const pbes_expression &x, const pbes_expression &psi, std::size_t k)
void insert_edge(index_type ui, index_type vi)
structure_graph::index_type initial_vertex() const
void set_initial_state(const propositional_variable_instantiation &x)
pbes_expression m_initial_state
index_type create_vertex(const pbes_expression &x)
atermpp::utilities::unordered_map< pbes_expression, index_type, std::hash< atermpp::detail::reference_aterm< pbes_expression > >, std::equal_to< atermpp::detail::reference_aterm< pbes_expression > >, std::allocator< std::pair< const atermpp::detail::reference_aterm< pbes_expression >, atermpp::detail::reference_aterm< index_type > > >, true > m_vertex_map
structure_graph::vertex & vertex(index_type u)
const structure_graph::vertex & vertex(index_type u) const
structure_graph::decoration_type decoration(const pbes_expression &x) const
structure_graph & m_graph
structure_graph_builder(structure_graph &G)
const structure_graph::vertex_vector & vertices() const
index_type insert_vertex(const pbes_expression &x)
index_type find_vertex(const pbes_expression &x) const
std::size_t extent() const
structure_graph::vertex_vector & vertices()
index_type insert_variable(const pbes_expression &x)
void remove_predecessor(index_type u)
std::vector< index_type > successors
const pbes_expression & formula() const
std::vector< index_type > predecessors
void remove_successor(index_type u)
bool contains(structure_graph::index_type u) const