12#ifndef MCRL2_PBES_PBESINST_PARTIAL_SOLVE_H
13#define MCRL2_PBES_PBESINST_PARTIAL_SOLVE_H
15#include "mcrl2/pbes/pbesinst_lazy.h"
16#include "mcrl2/pbes/simple_structure_graph.h"
17#include "mcrl2/pbes/solve_structure_graph.h"
18#include "mcrl2/pbes/structure_graph_builder.h"
31 std::size_t equation_count,
35 mCRL2log(log::debug) <<
"\n === partial solve (equation " << equation_count <<
") ===\n" << G << std::endl;
36 mCRL2log(log::debug) <<
" S0 = " << S[0] << std::endl;
37 mCRL2log(log::debug) <<
" S1 = " << S[1] << std::endl;
39 std::size_t N = G.extent();
45 mCRL2log(log::debug) <<
" computing S0 = attr_default_with_tau(G, S0, 0, tau0)" << std::endl;
46 S[0] = attr_default_with_tau(G, S[0], 0, tau);
47 mCRL2log(log::debug) <<
" computing S1 = attr_default_with_tau(G, S1, 1, tau1)" << std::endl;
48 S[1] = attr_default_with_tau(G, S[1], 1, tau);
53 for (
const propositional_variable_instantiation& X: todo.elements())
55 structure_graph::index_type u = graph_builder.find_vertex(X);
60 bool check_strategy =
false;
61 bool use_toms_optimization =
false;
64 vertex_set W[2] = { vertex_set(N), vertex_set(N) };
65 std::tie(W[0], W[1]) = algorithm.solve_recursive(G, set_union(S[1], attr_default_no_strategy(G, S_todo[0], 0)));
66 for (structure_graph::index_type v: W[1].vertices())
72 if (G.decoration(v) == structure_graph::d_conjunction)
74 auto tau_v = G.decoration(v);
75 local_strategy(tau, 1).set_strategy(v, tau_v);
78 std::tie(W[0], W[1]) = algorithm.solve_recursive(G, set_union(S[0], attr_default_no_strategy(G, S_todo[1], 1)));
79 for (structure_graph::index_type v: W[0].vertices())
85 if (G.decoration(v) == structure_graph::d_disjunction)
87 auto tau_v = G.decoration(v);
88 local_strategy(tau, 0).set_strategy(v, tau_v);
92 mCRL2log(log::debug) <<
"\n === result of partial solve (iteration " << equation_count <<
") ===" << std::endl;
93 mCRL2log(log::debug) <<
" S0 = " << S[0] << std::endl;
94 mCRL2log(log::debug) <<
" S1 = " << S[1] << std::endl;
95 mCRL2log(log::debug) <<
" tau0 = " << print_strategy_vector(S[0], tau[0]) << std::endl;
96 mCRL2log(log::debug) <<
" tau1 = " << print_strategy_vector(S[1], tau[1]) << std::endl;
solve_structure_graph_algorithm(bool check_strategy_=false, bool use_toms_optimization_=false)
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
void partial_solve(structure_graph &G, const pbesinst_lazy_todo &todo, std::array< vertex_set, 2 > &S, std::array< strategy_vector, 2 > &tau, std::size_t equation_count, const detail::structure_graph_builder &graph_builder)