12#ifndef MCRL2_DATA_REWRITERS_QUANTIFIERS_INSIDE_REWRITER_H
13#define MCRL2_DATA_REWRITERS_QUANTIFIERS_INSIDE_REWRITER_H
33 return std::set<variable>(x.
begin(), x.
end());
42template <
typename BinaryOperation>
43std::tuple<data_expression, data_expression>
compute_Phi_Psi(
const std::vector<data_expression>& X,
const std::set<variable>& V, BinaryOperation op,
data_expression empty_sequence_result)
48 std::vector<std::set<data::variable>> vars;
53 auto j = std::min_element(vars.begin(), vars.end(),
54 [&](
const std::set<data::variable>& x,
const std::set<data::variable>& y)
56 return x.size() < y.size();
59 const std::set<data::variable>& Z = *j;
61 std::vector<data_expression> phi;
62 std::vector<data_expression> psi;
63 for (std::size_t i = 0; i < X.size(); i++)
65 if (std::includes(Z.begin(), Z.end(), vars[i].begin(), vars[i].end()))
108 const std::set<variable>&
V;
128 template <
typename T>
158 std::vector<data_expression> X;
196 const std::set<variable>&
V;
216 template <
typename T>
245 std::vector<data_expression> X;
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.
bool empty() const
Returns true if the list's size is 0.
const variable_list & variables() const
const data_expression & body() const
existential quantification.
universal quantification.
add your file description here.
Join and split functions for data expressions.
data_expression quantifiers_inside_forall(const std::set< variable > &variables, const data_expression &x)
variable_list set_intersection(const variable_list &x, const variable_list &y)
Returns the intersection of two unordered sets, that are stored in ATerm lists.
data_expression quantifiers_inside_exists(const std::set< variable > &variables, const data_expression &x)
variable_list make_variable_list(const std::set< variable > &x)
std::set< variable > make_variable_set(const variable_list &x)
data_expression quantifiers_inside(const data_expression &x)
variable_list set_difference(const variable_list &x, const variable_list &y)
Returns the difference of two unordered sets, that are stored in aterm lists.
std::tuple< data_expression, data_expression > compute_Phi_Psi(const std::vector< data_expression > &X, const std::set< variable > &V, BinaryOperation op, data_expression empty_sequence_result)
data_expression and_(data_expression const &p, data_expression const &q)
Returns an expression equivalent to p or q.
data_expression or_(data_expression const &p, data_expression const &q)
Returns an expression equivalent to p and q.
bool is_false_function_symbol(const atermpp::aterm &e)
Recogniser for function false.
const data_expression & arg(const data_expression &e)
Function for projecting out argument. arg from an application.
bool is_or_application(const atermpp::aterm &e)
Recogniser for application of ||.
const data_expression & right(const data_expression &e)
Function for projecting out argument. right from an application.
bool is_implies_application(const atermpp::aterm &e)
Recogniser for application of =>.
const function_symbol & and_()
Constructor for function symbol &&.
bool is_and_application(const atermpp::aterm &e)
Recogniser for application of &&.
const function_symbol & or_()
Constructor for function symbol ||.
bool is_true_function_symbol(const atermpp::aterm &e)
Recogniser for function true.
bool is_not_application(const atermpp::aterm &e)
Recogniser for application of !.
const function_symbol & not_()
Constructor for function symbol !.
const data_expression & left(const data_expression &e)
Function for projecting out argument. left from an application.
std::set< data::variable > find_free_variables(const data::data_expression &x)
atermpp::term_list< variable > variable_list
\brief list of variables
void quantifiers_inside_rewrite(T &x, typename std::enable_if< !std::is_base_of< atermpp::aterm, T >::value >::type *=0)
T join(FwdIt first, FwdIt last, BinaryOperation op, T empty_sequence_result)
Given a sequence [t1, t2, ..., tn] of elements of type T, returns op(t1, op(t2, .....
std::set< T > set_union(const std::set< T > &x, const std::set< T > &y)
Returns the union of two sets.
void split(const T &t, OutputIterator i, MatchFunction match, AccessorFunction1 lhs, AccessorFunction2 rhs)
Splits a binary tree T into a sequence, and writes the result to the output range given by an output ...
std::set< T > set_intersection(const std::set< T > &x, const std::set< T > &y)
Returns the intersection of two sets.
std::set< T > set_difference(const std::set< T > &x, const std::set< T > &y)
Returns the difference of two sets.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
add your file description here.
Contains type information for terms.
void apply(T &result, const data::variable &x)
void apply(T &result, const forall &x)
void apply(T &result, const exists &x)
data_expression_builder< quantifiers_inside_builder > super
data_expression make_exists_(const variable_list &vars, const data_expression &body)
void apply(T &result, const data_expression &x)
data_expression apply_default(const T &x)
quantifiers_inside_exists_builder(const std::set< variable > &V_)
const std::set< variable > & V
void apply(T &result, const forall &x)
void apply(T &result, const exists &x)
data_expression_builder< quantifiers_inside_exists_builder > super
void apply(T &result, const forall &x)
quantifiers_inside_forall_builder(const std::set< variable > &V_)
static data_expression make_forall_(const variable_list &vars, const data_expression &body)
const std::set< variable > & V
data_expression_builder< quantifiers_inside_forall_builder > super
data_expression apply_default(const T &x)
void apply(T &result, const data_expression &x)
data_expression operator()(const data_expression &x) const