18#ifndef MCRL2_LPS_SUMELM_H
19#define MCRL2_LPS_SUMELM_H
31template <
typename Specification = specification>
83 template <
class Summand>
86 std::map<data::variable, std::set<data::data_expression> > equalities =
data::find_equalities(s.condition());
89 std::size_t original_num_vars = s.summation_variables().size();
90 if (remaining_variables.size() != original_num_vars)
96 s.summation_variables() =
data::variable_list(remaining_variables.begin(), remaining_variables.end());
100 m_removed += original_num_vars - s.summation_variables().size();
119 return algorithm.
removed() > 0;
131 return algorithm.
removed() > 0;
143 return algorithm.
removed() > 0;
LPS summand containing a multi-action.
LPS summand containing a deadlock.
Algorithm class for algorithms on linear process specifications. It can be instantiated with lps::spe...
void summand_remove_unused_summand_variables(SummandType &summand_)
lps_algorithm(Specification &spec)
Constructor.
Specification & m_spec
The specification that is processed by the algorithm.
Linear process specification.
LPS summand containing a multi-action.
Linear process specification.
Class implementing the sum elimination lemma.
std::size_t removed() const
Returns the amount of removed summation variables.
std::size_t m_removed
Stores the number of summation variables that has been removed.
sumelm_algorithm(Specification &spec, bool decluster=false)
Constructor.
void operator()(Summand &s)
Apply the sum elimination lemma to summand s.
detail::lps_algorithm< Specification > super
bool m_decluster
Whether to decluster disjunctive conditions first.
void run()
Apply the sum elimination lemma to all summands in the specification.
add your file description here.
Split summands with disjuncts as conditions.
static RewriterCompilingJitty::substitution_type & sigma(RewriterCompilingJitty *this_rewriter)
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
std::map< variable, std::set< data_expression > > find_equalities(const data_expression &x)
std::pair< data::mutable_map_substitution<>, std::vector< data::variable > > make_one_point_rule_substitution(const std::map< data::variable, std::set< data::data_expression > > &equalities, const data::variable_list &quantifier_variables, bool find_all_assignments=true)
creates a substitution from a set of (in-)equalities for a given list of quantifier variables
atermpp::term_list< variable > variable_list
\brief list of variables
void replace_variables_capture_avoiding(T &x, Substitution &sigma, data::set_identifier_generator &id_generator, typename std::enable_if<!std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
bool sumelm(action_summand &s)
Apply the sum elimination lemma to summand s.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...