11#ifndef MCRL2_DATA_DETAIL_REWRITE_H
12#define MCRL2_DATA_DETAIL_REWRITE_H
114 virtual std::shared_ptr<detail::Rewriter>
clone() = 0;
126 const bool t1_is_normal_form,
137 const bool t1_is_normal_form,
153 const bool t1_is_normal_form,
173 const bool t1_is_normal_form,
198 const bool body_in_normal_form,
204 const bool body_in_normal_form,
240 const bool t1_is_normal_form,
281 std::size_t arity = 0;
287 arity += sort_dom.
size();
299 return atermpp::down_cast<function_sort>(sort).domain().
size();
size_type size() const
Returns the number of arguments of this term.
size_type size() const
Returns the size of the term_list.
An abstraction expression.
An application of a data expression to a number of arguments.
Rewriter interface class.
used_data_equation_selector data_equation_selector
mcrl2::data::data_specification m_data_specification_for_enumeration
virtual std::shared_ptr< detail::Rewriter > clone()=0
Clone a rewriter.
data_expression universal_quantifier_enumeration(const abstraction &t, substitution_type &sigma)
void rewrite_lambda_application(data_expression &result, const data_expression &t, substitution_type &sigma)
Rewrite t, assuming that the headsymbol of t, which can be nested, is a lambda term.
void rewrite_where(data_expression &result, const where_clause &term, substitution_type &sigma)
void existential_quantifier_enumeration(data_expression &result, const abstraction &t, substitution_type &sigma)
virtual void rewrite(data_expression &result, const data_expression &term, substitution_type &sigma)=0
Rewrite an mCRL2 data term.
data_expression operator()(const data_expression &term, substitution_type &sigma)
Provide the rewriter with a () operator, such that it can also rewrite terms using this operator.
data_expression existential_quantifier_enumeration(const abstraction &t, substitution_type &sigma)
void universal_quantifier_enumeration(data_expression &result, const abstraction &t, substitution_type &sigma)
data_expression universal_quantifier_enumeration(const variable_list &vl, const data_expression &t1, const bool t1_is_normal_form, substitution_type &sigma)
Rewriter(const Rewriter &other)=default
The copy constructor operator is protected. Public copying is not allowed.
virtual rewrite_strategy getStrategy()=0
Get rewriter strategy that is used.
mutable_indexed_substitution substitution_type
virtual data_expression rewrite(const data_expression &term, substitution_type &sigma)=0
Rewrite an mCRL2 data term.
data_expression existential_quantifier_enumeration(const variable_list &vl, const data_expression &t1, const bool t1_is_normal_form, substitution_type &sigma)
data_expression rewrite_single_lambda(const variable_list &vl, const data_expression &body, const bool body_in_normal_form, substitution_type &sigma)
virtual ~Rewriter()
Destructor.
data::enumerator_identifier_generator & identifier_generator()
The fresh name generator of the rewriter.
void rewrite_single_lambda(data_expression &result, const variable_list &vl, const data_expression &body, const bool body_in_normal_form, substitution_type &sigma)
virtual void thread_initialise()
Rewriter(const data_specification &data_spec, const used_data_equation_selector &eq_selector)
Constructor. Do not use directly; use createRewriter() function instead.
Rewriter & operator=(const Rewriter &other)=default
The copy assignment operator is protected. Public copying is not allowed.
enumerator_identifier_generator m_generator
void quantifier_enumeration(data_expression &result, const variable_list &vl, const data_expression &t1, const bool t1_is_normal_form, substitution_type &sigma, const binder_type &binder, data_expression(*lazy_op)(const data_expression &, const data_expression &), const data_expression &identity_element, const data_expression &absorbing_element)
const sort_expression & codomain() const
const sort_expression_list & domain() const
const sort_expression & sort() const
Generic substitution function.
Component for selecting a subset of equations that are actually used in an encompassing specification...
\brief A where expression
static RewriterCompilingJitty::substitution_type & sigma(RewriterCompilingJitty *this_rewriter)
add your file description here.
void CheckRewriteRule(const data_equation &data_eqn)
Check that an mCRL2 data equation is a valid rewrite rule. If not, an runtime_error is thrown indicat...
bool isValidRewriteRule(const data_equation &data_eqn)
Check whether or not an mCRL2 data equation is a valid rewrite rule.
std::shared_ptr< detail::Rewriter > createRewriter(const data_specification &DataSpec, const used_data_equation_selector &equations_selector, const rewrite_strategy Strategy=jitty)
Create a rewriter.
std::size_t getArity(const data::function_symbol &op)
std::size_t get_direct_arity(const data::function_symbol &op)
rewrite_strategy
The strategy of the rewriter.
bool is_function_sort(const atermpp::aterm &x)
Returns true if the term t is a function sort.
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
Provides selection utility functionality.