12#ifndef MCRL2_PBES_PBESINST_SYMBOLIC_H
13#define MCRL2_PBES_PBESINST_SYMBOLIC_H
15#include "mcrl2/pbes/algorithms.h"
17#include "mcrl2/pbes/pbesinst_algorithm.h"
64 std::size_t eqn_index = 0;
65 for (
const pbes_equation& eqn: p.equations())
67 m_equation_index[eqn.variable().name()] = eqn_index++;
74 init = atermpp::down_cast<propositional_variable_instantiation>(R(m_pbes.initial_state()));
76 mCRL2log(log::debug) <<
"discovered vertex " << init << std::endl;
80 state_type X = *todo.begin();
81 mCRL2log(log::debug) <<
"handling vertex " << X << std::endl;
82 todo.erase(todo.begin());
84 std::size_t index = m_equation_index[X.name()];
85 const pbes_equation& eqn = m_pbes.equations()[index];
86 const pbes_expression& phi = eqn.formula();
87 data::rewriter::substitution_type sigma;
88 make_pbesinst_substitution(eqn.variable().parameters(), X.parameters(), sigma);
89 pbes_expression psi = R(phi, sigma);
90 R.clear_identifier_generator();
91 for (
const propositional_variable_instantiation& v: find_propositional_variable_instantiations(psi))
93 if (done.find(v) == done.end())
96 mCRL2log(log::debug) <<
"discovered vertex " << v << std::endl;
Rewriter that operates on data expressions.
parameterized boolean equation system
Algorithm class for the symbolic_exploration instantiation algorithm.
pbes & m_pbes
The PBES that is being instantiated.
enumerate_quantifiers_rewriter R
The rewriter.
std::set< state_type > todo
Propositional variable instantiations that need to be handled.
state_type init
The initial value.
std::map< core::identifier_string, std::size_t > m_equation_index
A lookup map for PBES equations.
std::multimap< state_type, state_type > edges
Data structure for storing the result. E[i] corresponds to the equations generated from the i-th PBES...
std::set< state_type > done
Propositional variable instantiations that have been handled.
data::rewriter datar
Data rewriter.
pbesinst_symbolic_algorithm(pbes &p, data::rewriter::strategy rewrite_strategy=data::jitty)
void run()
Runs the algorithm. The result is obtained by calling the function get_result.
\brief A propositional variable instantiation
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
void instantiate_global_variables(pbes &p)
Attempts to eliminate the free variables of a PBES, by substituting a constant value for them....
The main namespace for the PBES library.
An attempt for improving the efficiency.