12#ifndef MCRL2_PBES_PBESSOLVE_ATTRACTORS_H
13#define MCRL2_PBES_PBESSOLVE_ATTRACTORS_H
15#include "mcrl2/pbes/pbessolve_vertex_set.h"
27template <
typename StructureGraph>
30 const StructureGraph&
G;
40 mCRL2log(log::debug) <<
"Error: undefined strategy for node " << u << std::endl;
42 mCRL2log(log::debug) <<
" set tau[" << u <<
"] = " << v << std::endl;
43 G.find_vertex(u).strategy = v;
61 mCRL2log(log::debug) <<
"Error: undefined strategy for node " << u << std::endl;
63 mCRL2log(log::debug) <<
" set tau" << alpha <<
"[" << u <<
"] = " << v << std::endl;
69template <
typename StructureGraph>
82 local.set_strategy(u, v);
87template <
typename StructureGraph,
typename VertexSet>
88bool includes_successors(
const StructureGraph& G,
typename StructureGraph::index_type u,
const VertexSet& A)
90 for (
auto v: G.successors(u))
101template <
typename StructureGraph>
106 for (
auto u: A.vertices())
108 for (
auto v: G.predecessors(u))
120template <
typename StructureGraph>
123 for (
auto v: G.predecessors(u))
137template <
typename StructureGraph,
typename Strategy>
147 if (G.decoration(u) == alpha || includes_successors(G, u, A))
149 tau.set_strategy(u, find_successor_in(G, u, A));
151 insert_predecessors(G, u, A, todo);
162template <
typename StructureGraph>
165 return attr_default_generic(G, A, alpha, global_strategy<StructureGraph>(G));
169template <
typename StructureGraph>
172 return attr_default_generic(G, A, alpha, no_strategy());
179template <
typename StructureGraph>
182 return attr_default_generic(G, A, alpha, global_local_strategy<StructureGraph>(G, tau, alpha));
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
constexpr unsigned int undefined_vertex()
deque_vertex_set exclusive_predecessors(const StructureGraph &G, const vertex_set &A)
bool includes_successors(const StructureGraph &G, typename StructureGraph::index_type u, const VertexSet &A)
vertex_set attr_default(const StructureGraph &G, vertex_set A, std::size_t alpha)
vertex_set attr_default_generic(const StructureGraph &G, vertex_set A, std::size_t alpha, Strategy tau)
vertex_set attr_default_no_strategy(const StructureGraph &G, vertex_set A, std::size_t alpha)
void insert_predecessors(const StructureGraph &G, structure_graph::index_type u, const vertex_set &A, deque_vertex_set &todo)
vertex_set attr_default_with_tau(const StructureGraph &G, vertex_set A, std::size_t alpha, std::array< strategy_vector, 2 > &tau)
void insert(structure_graph::index_type u)
structure_graph::index_type pop_front()
global_local_strategy(const StructureGraph &G, std::array< strategy_vector, 2 > &tau, std::size_t alpha)
void set_strategy(structure_graph::index_type u, structure_graph::index_type v)
global_strategy< StructureGraph > global
global_strategy(const StructureGraph &G_)
void set_strategy(structure_graph::index_type u, structure_graph::index_type v)
void set_strategy(structure_graph::index_type u, structure_graph::index_type v)
std::array< strategy_vector, 2 > & tau
local_strategy(std::array< strategy_vector, 2 > &tau_, std::size_t alpha_)
static void set_strategy(structure_graph::index_type, structure_graph::index_type)
void insert(structure_graph::index_type u)
bool contains(structure_graph::index_type u) const