11#ifndef MCRL2_PBES_REMOVE_PARAMETERS_H
12#define MCRL2_PBES_REMOVE_PARAMETERS_H
30template <
typename Term>
33 assert(std::is_sorted(to_be_removed.begin(), to_be_removed.end()));
34 std::size_t index = 0;
35 std::vector<Term> result;
36 auto j = to_be_removed.begin();
37 for (
auto i = l.
begin(); i != l.
end(); ++i, ++index)
39 if (j != to_be_removed.end() && index == *j)
51template <
typename Derived>
52struct remove_parameters_builder:
public pbes_system::pbes_expression_builder<Derived>
54 typedef pbes_system::pbes_expression_builder<Derived> super;
60 const std::vector<std::size_t>& to_be_removed;
62 remove_parameters_builder(
const std::vector<std::size_t>& to_be_removed_)
63 : to_be_removed(to_be_removed_)
67 void apply(T& result,
const propositional_variable& x)
73 void apply(T& result,
const propositional_variable_instantiation& x)
78 void update(pbes_equation& x)
81 static_cast<Derived&
>(*this).apply(variable, x.variable());
82 x.variable() = variable;
84 static_cast<Derived&
>(*this).apply(formula, x.formula());
90 static_cast<Derived&
>(*this).update(x.equations());
91 propositional_variable_instantiation initial_state;
92 static_cast<Derived&
>(*this).apply(initial_state, x.initial_state());
93 x.initial_state() = initial_state;
94 static_cast<Derived&
>(*this).update(x.global_variables());
108 const std::vector<std::size_t>& to_be_removed,
109 typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value>::type* =
nullptr
113 core::make_apply_builder_arg1<detail::remove_parameters_builder>(to_be_removed).apply(result, x);
123 const std::vector<std::size_t>& to_be_removed,
124 typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value>::type* = 0
127 core::make_apply_builder_arg1<detail::remove_parameters_builder>(to_be_removed).update(x);
134template <
typename Derived>
135struct map_based_remove_parameters_builder:
public pbes_expression_builder<Derived>
137 typedef pbes_expression_builder<Derived> super;
143 const std::map<core::identifier_string, std::vector<std::size_t> >& to_be_removed;
145 map_based_remove_parameters_builder(
const std::map<
core::identifier_string, std::vector<std::size_t> >& to_be_removed_)
146 : to_be_removed(to_be_removed_)
151 void apply(T& result,
const data::data_expression& x)
157 void apply(T& result,
const propositional_variable& x)
159 auto i = to_be_removed.find(x.name());
160 if (i == to_be_removed.end())
169 void apply(T& result,
const propositional_variable_instantiation& x)
171 auto i = to_be_removed.find(x.name());
172 if (i == to_be_removed.end())
182 void update(pbes_equation& x)
185 static_cast<Derived&
>(*this).apply(variable, x.variable());
186 x.variable() = variable;
188 static_cast<Derived&
>(*this).apply(formula, x.formula());
194 static_cast<Derived&
>(*this).update(x.equations());
195 propositional_variable_instantiation initial_state;
196 static_cast<Derived&
>(*this).apply(initial_state, x.initial_state());
197 x.initial_state() = initial_state;
210 typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value>::type* =
nullptr
214 core::make_apply_builder_arg1<detail::map_based_remove_parameters_builder>(to_be_removed).apply(result, x);
226 typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value>::type* =
nullptr
229 core::make_apply_builder_arg1<detail::map_based_remove_parameters_builder>(to_be_removed).update(x);
236template <
typename Derived>
237struct set_based_remove_parameters_builder:
public pbes_expression_builder<Derived>
239 typedef pbes_expression_builder<Derived> super;
245 const std::set<data::variable>& to_be_removed;
247 set_based_remove_parameters_builder(
const std::set<data::variable>& to_be_removed_)
248 : to_be_removed(to_be_removed_)
251 void remove_parameters(std::set<data::variable>& x)
const
253 for (
auto i = to_be_removed.begin(); i != to_be_removed.end(); ++i)
259 void apply_(data::variable_list& result,
const data::variable_list& l)
const
261 using utilities::detail::contains;
263 std::vector<data::variable> result_vec;
264 for (
const data::variable& v: l)
268 result_vec.push_back(v);
271 result = data::variable_list(result_vec.begin(), result_vec.end());
275 void apply(T& result,
const data::assignment_list& l)
const
277 using utilities::detail::contains;
278 std::vector<data::assignment> a(l.begin(), l.end());
279 a.erase(std::remove_if(a.begin(), a.end(), [&](
const data::assignment& y) { return contains(to_be_removed, y.lhs()); }), a.end());
280 result = data::assignment_list(a.begin(), a.end());
284 void apply(T& result,
const propositional_variable& x)
286 data::variable_list vars;
287 static_cast<Derived&
>(*this).apply_(vars, x.parameters());
291 void update(pbes_equation& x)
294 static_cast<Derived&
>(*this).apply(variable, x.variable());
295 x.variable() = variable;
297 static_cast<Derived&
>(*this).apply(formula, x.formula());
303 static_cast<Derived&
>(*this).update(x.equations());
304 propositional_variable_instantiation initial_state;
305 static_cast<Derived&
>(*this).apply(initial_state, x.initial_state());
306 x.initial_state() = initial_state;
319 const std::set<data::variable>& to_be_removed,
320 typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value>::type* = 0
324 core::make_apply_builder_arg1<detail::set_based_remove_parameters_builder>(to_be_removed).apply(result, x);
334 const std::set<data::variable>& to_be_removed,
335 typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value>::type* =
nullptr
338 core::make_apply_builder_arg1<detail::set_based_remove_parameters_builder>(to_be_removed).update(x);
345void remove_pbes_parameters(pbes& x,
346 const std::set<data::variable>& to_be_removed
Term containing a string.
const_iterator end() const
Returns a const_iterator pointing to the end of the term_list.
const_iterator begin() const
Returns a const_iterator pointing to the beginning of the term_list.
void remove_parameters(Object &x, const std::set< data::variable > &to_be_removed)
Rewrites an LPS data type.
T remove_parameters(const T &x, const std::vector< std::size_t > &to_be_removed, typename std::enable_if< std::is_base_of< atermpp::aterm, T >::value >::type *=nullptr)
Removes parameters from propositional variable instantiations in a pbes expression.
void make_propositional_variable(atermpp::aterm &t, const ARGUMENTS &... args)
void make_propositional_variable_instantiation(atermpp::aterm &t, const ARGUMENTS &... args)
pbes_expression formula(std::set< identifier_t > const &v, const owner_t owner, const std::string &prefix="X")
pbes_system::propositional_variable propositional_variable
The propositional variable is taken from a pbes_system.
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...
add your file description here.