12#ifndef MCRL2_DATA_DETAIL_PROVER_INDUCTION_H
13#define MCRL2_DATA_DETAIL_PROVER_INDUCTION_H
15#include "mcrl2/data/list.h"
16#include "mcrl2/data/replace.h"
17#include "mcrl2/data/representative_generator.h"
18#include "mcrl2/data/substitutions/mutable_map_substitution.h"
41 variable_vector result;
42 for(
const variable& v: find_free_variables(a_expression))
44 if(sort_list::is_list(v.sort()))
56 return atermpp::down_cast<container_sort>(a_list_variable.sort()).element_sort();
62 return variable(fresh_identifier_generator(
"dummy$"),a_sort);
69 const variable v_induction_variable = f_list_variables.front();
73 const variable v_dummy_variable
(fresh_name
, v_dummy_sort
);
75 mutable_map_substitution<> v_substitution1;
76 v_substitution1[v_induction_variable] = sort_list::empty(v_dummy_sort);
77 const data_expression v_base_case = replace_variables_capture_avoiding(f_formula, v_substitution1);
79 mutable_map_substitution<> v_substitution2;
80 v_substitution2[v_induction_variable] = sort_list::cons_(v_dummy_sort, v_dummy_variable, v_induction_variable);
81 const data_expression v_induction_step = sort_bool::implies(f_formula, replace_variables_capture_avoiding(f_formula, v_substitution2));
89 variable_list a_list_of_variables,
90 variable_list a_list_of_dummies)
const
92 if (a_list_of_variables.empty())
99 if (a_list_of_variables.size() > 1)
101 for (
const variable& v_variable: a_list_of_variables)
103 const variable v_dummy(a_list_of_dummies.front());
104 a_list_of_dummies.pop_front();
106 mutable_map_substitution<> v_substitution;
107 v_substitution[v_variable] = sort_list::cons_(v_dummy.sort(), v_dummy, v_variable);
108 v_clause = sort_bool::and_(v_clause, replace_variables_capture_avoiding(a_hypothesis, v_substitution));
119 const std::size_t a_variable_number,
120 const std::size_t a_number_of_variables,
121 const variable_list& a_list_of_variables,
122 const variable_list& a_list_of_dummies)
124 const variable v_variable = f_list_variables[a_variable_number];
125 variable_list v_list_of_variables = a_list_of_variables;
126 v_list_of_variables.push_front(v_variable);
129 variable_list v_list_of_dummies = a_list_of_dummies;
130 v_list_of_dummies.push_front(v_dummy);
132 mutable_map_substitution<> v_substitution1;
133 v_substitution1[v_variable] = sort_list::cons_(v_dummy_sort, v_dummy, v_variable);
134 const data_expression v_formula_1 = replace_variables_capture_avoiding(a_formula, v_substitution1);
136 mutable_map_substitution<> v_substitution2;
138 v_substitution2[v_variable] = sort_list::empty(v_dummy_sort);
139 const data_expression v_formula_2 = replace_variables_capture_avoiding(a_formula, v_substitution2);
140 const data_expression v_hypothesis = replace_variables_capture_avoiding(a_hypothesis, v_substitution2);
142 if (a_variable_number < a_number_of_variables - 1)
144 const data_expression_list v_list_1 = create_clauses(v_formula_1, a_hypothesis, a_variable_number + 1, a_number_of_variables, v_list_of_variables, v_list_of_dummies);
145 const data_expression_list v_list_2 = create_clauses(v_formula_2, v_hypothesis, a_variable_number + 1, a_number_of_variables, a_list_of_variables, a_list_of_dummies);
146 return v_list_1 + v_list_2;
150 data_expression v_hypotheses_1 = create_hypotheses(a_hypothesis, v_list_of_variables, v_list_of_dummies);
152 data_expression_list result;
153 result.push_front(sort_bool::implies(v_hypotheses_2, v_formula_2));
154 result.push_front(sort_bool::implies(v_hypotheses_1, v_formula_1));
163 f_list_variables = recurse_expression_for_lists(a_formula);
169 return f_list_variables.size() != f_count;
181 mCRL2log(log::log_level_t::verbose) <<
"Induction on one variable." << std::endl;
182 v_result = apply_induction_one(fresh_identifier_generator(
"dummy$"));
186 mCRL2log(log::log_level_t::verbose) <<
"Induction on " << f_count <<
" variables." << std::endl;
187 data_expression_list v_list_of_clauses = create_clauses(f_formula, f_formula, 0, f_count, variable_list(), variable_list());
188 v_result = v_list_of_clauses.front();
189 v_list_of_clauses.pop_front();
190 while (!v_list_of_clauses.empty())
192 data_expression v_clause(v_list_of_clauses.front());
193 v_list_of_clauses.pop_front();
194 v_result = sort_bool::and_(v_result, v_clause);
aterm()
Default constructor.
A unordered_map class in which aterms can be stored.
An abstraction expression.
const variable_list & variables() const
abstraction(const binder_type &binding_operator, const variable_list &variables, const data_expression &body)
Constructor.
const data_expression & body() const
const binder_type & binding_operator() const
Rewriter class for the mCRL2 Library. It only works for terms of type data_expression and data_expres...
const data::enumerator_identifier_generator & identifier_generator() const
Expose the identifier generator present in m_rewriter.
basic_rewriter(const data_specification &d, const used_data_equation_selector &equation_selector, const strategy s=rewrite_strategy::jitty)
Constructor.
basic_rewriter(const std::shared_ptr< detail::Rewriter > &r)
Constructor.
basic_rewriter(const basic_rewriter &other)=default
Copy Constructor.
basic_rewriter & operator=(const basic_rewriter &other)=default
Assignment operator.
std::shared_ptr< detail::Rewriter > m_rewriter
The wrapped Rewriter.
basic_rewriter(const data_specification &d, const strategy s=rewrite_strategy::jitty)
Constructor.
const data_expression & lhs() const
const variable_list & variables() const
data_expression & operator=(const data_expression &) noexcept=default
data_expression & operator=(data_expression &&) noexcept=default
sort_expression sort() const
Returns the sort of the data expression.
The class BDD_Info provides information about the structure of binary decision diagrams.
static const mcrl2::data::data_expression & get_true_branch(const mcrl2::data::data_expression &a_bdd)
Method that returns the true-branch of a BDD.
static bool is_if_then_else(const data_expression &a_bdd)
Method that indicates wether or not the root of a BDD is a guard node.
static bool is_false(const data_expression &a_bdd)
Method that indicates whether or not a BDD equals false.
static const mcrl2::data::data_expression & get_guard(const mcrl2::data::data_expression &a_bdd)
Method that returns the guard of a BDD.
static const mcrl2::data::data_expression & argument(const mcrl2::data::data_expression &x, std::size_t n)
static const mcrl2::data::data_expression & get_false_branch(const mcrl2::data::data_expression &a_bdd)
Method that returns the false-branch of a BDD.
static bool is_true(const data_expression &a_bdd)
Method that indicates whether or not a BDD equals true.
Base class for eliminating inconsistent paths from BDDs.
data_expression simplify(const data_expression &a_bdd) override
Returns a BDD without inconsistent paths, equivalent to a_bdd. precondition: The argument passed as p...
data_expression aux_simplify(const data_expression &a_bdd, const data_expression_list &a_path)
Simplifies the BDD a_bdd using path a_path. Paths whose guards in conjunction with the guards in.
BDD_Info f_bdd_info
Class that provides information about the structure of BDDs.
SMT_Solver * f_smt_solver
Pointer to an SMT solver used to determine whether or not a path is inconsistent.
bool variables_overlap(const data_expression &a_expression_1, const data_expression &a_expression_2)
Returns true if the expression a_expression_1 has variables in common with expression a_expression_2.
BDD_Path_Eliminator(smt_solver_type a_solver_type)
Constructor that initializes the field BDD_Path_Eliminator::f_smt_solver.
data_expression_list create_condition(data_expression_list a_path, const data_expression &a_guard, bool a_minimal)
Returns a list representing the conjunction of all guards in a_path and the guard a_guard.
bool get_branch(const data_expression &a_bdd, const bool a_polarity, data_expression &result)
Returns branch of the BDD a_bdd, depending on the polarity a_polarity.
Induction f_induction
Class that creates all statements needed to prove a given property using induction.
strategy rewriter_strategy() const
Returns the strategy of the rewriter used inside this proving rewriter.
std::vector< variable > f_variables
The variables in the expression in order.
std::shared_ptr< BDD_Simplifier > f_bdd_simplifier
Class that simplifies a BDD.
static constexpr bool f_reverse
Flag indicating whether or not the result of the comparison between the first two arguments.
void set_substitution(substitution_type &sigma)
Set the substitution to be used to construct the BDD.
void set_formula(const data_expression &formula)
Sets Prover::f_formula to formula. precondition: the argument passed as parameter formula is an expre...
std::string indent(size_t n)
bool smallest(const data_expression &formula, data_expression &result)
Returns the smallest guard in the formula formula.
data_expression f_bdd
A binary decision diagram in the internal representation of mCRL2.
const Info f_info
A class that provides information about expressions.
data_expression bdd_down(const data_expression &formula, const size_t a_indent=0)
Creates the EQ-BDD corresponding to the formula formula.
static constexpr bool f_full
Flag indicating whether or not the arguments of equality functions are taken into account.
void eliminate_paths()
Removes all inconsistent paths from the BDD BDD_Prover::f_bdd.
BDD_Prover(const rewriter &r, double time_limit=0, bool apply_induction=false)
data_expression get_counter_example()
Returns all the guards on a path in the BDD that leads to a leaf labelled "false",...
substitution_type bdd_sigma
A binary decision diagram in the internal representation of the rewriter.
Answer f_tautology
A flag that indicates whether or not the formala Prover::f_formula is a tautology.
Answer is_contradiction()
Indicates whether or not the formula Prover::f_formula is a contradiction.
data_expression f_formula
An expression of sort Bool.
std::chrono::milliseconds f_deadline
A timestamp representing the moment when the maximal amount of milliseconds has been spent on process...
bool f_processed
A flag that indicates whether or not the formala Prover::f_formula has been processed.
void update_answers()
Updates the values of Prover::f_tautology and Prover::f_contradiction.
std::shared_ptr< detail::Rewriter > get_rewriter()
Returns the rewriter used by this prover (i.e. it returns Prover::f_rewriter).
const double f_time_limit
An integer representing the maximal amount of seconds to be spent on processing a formula.
Manipulator f_manipulator
A class that can be used to manipulate expressions.
bool f_apply_induction
A flag indicating whether or not induction on lists is applied.
void build_bdd()
Constructs the EQ-BDD corresponding to the formula Prover::f_formula.
std::unordered_map< data_expression, data_expression > f_smallest
A hashtable that maps formulas to the smallest guard occuring in those formulas.
Answer f_contradiction
A flag that indicates whether or not the formala Prover::f_formula is a contradiction.
std::unordered_map< data_expression, data_expression > f_formula_to_bdd
A hashtable that maps formulas to BDDs.
data_expression get_bdd()
Returns the BDD BDD_Prover::f_bdd.
data_expression get_witness()
Returns all the guards on a path in the BDD that leads to a leaf labelled "true", if such a leaf exis...
void set_substitution_internal(substitution_type &sigma)
Set the substitution in internal format to be used to construct the BDD.
Answer is_tautology()
Indicates whether or not the formula Prover::f_formula is a tautology.
BDD_Prover(const data_specification &data_spec, const used_data_equation_selector &equations_selector, mcrl2::data::rewriter::strategy a_rewrite_strategy=mcrl2::data::rewrite_strategy::jitty, double a_time_limit=0, bool a_path_eliminator=false, smt_solver_type a_solver_type=smt_solver_type::solver_type_cvc, bool a_apply_induction=false)
A base class for simplifying binary decision diagrams.
void set_time_limit(time_t a_time_limit)
Sets the attribute BDD_Simplifier::f_deadline.
virtual data_expression simplify(const data_expression &a_bdd)
Returns a simplified BDD, equivalent to the bdd a_bdd. precondition: The argument passed as parameter...
virtual ~BDD_Simplifier()=default
Destructor without any additional functionality.
time_t f_deadline
An integer representing the moment in time when the maximal amount of seconds has been spent on simpl...
The class Induction generates statements corresponding to.
sort_expression get_sort_of_list_elements(const variable &a_list_variable) const
data_expression create_hypotheses(const data_expression &a_hypothesis, variable_list a_list_of_variables, variable_list a_list_of_dummies) const
bool can_apply_induction() const
std::size_t f_count
The number of variables used during the last application of induction.
variable_vector f_list_variables
data_expression f_formula
An expression of sort Bool in mCRL2 format.
set_identifier_generator fresh_identifier_generator
variable_vector recurse_expression_for_lists(const data_expression &a_expression) const
variable get_fresh_dummy(const sort_expression &a_sort)
data_expression_list create_clauses(const data_expression &a_formula, const data_expression &a_hypothesis, const std::size_t a_variable_number, const std::size_t a_number_of_variables, const variable_list &a_list_of_variables, const variable_list &a_list_of_dummies)
void initialize(const data_expression &a_formula)
data_expression apply_induction()
data_expression apply_induction_one(const core::identifier_string &fresh_name) const
Base class for classes that provide information about the structure of.
data_expression get_operator(const data_expression &term) const
Returns the main operator of the term term;.
constexpr Info(bool a_full, bool a_reverse)
Constructor that initializes the rewriter.
Compare_Result compare_term_free_variables(const data_expression &term1, const data_expression &term2) const
Compare_Result compare_guard_equality(const data_expression &guard1, const data_expression &guard2) const
Compares two guards by their arguments.
Compare_Result compare_address(const atermpp::aterm &term1, const atermpp::aterm &term2) const
static bool occurs(const data_expression &t1, const data_expression &t2)
Compare_Result lexico(const Compare_Result &a_result1, const Compare_Result &a_result2) const
Compare_Result compare_term_type(const data_expression &term1, const data_expression &term2) const
Compares terms by their type.
std::size_t get_number_of_arguments(const data_expression &a_term) const
Returns the number of arguments of the main operator of a term.
double get_guard_structure(const data_expression &guard, const std::vector< variable > &f_variables) const
Returns an integer corresponding to the structure of the guard passed as argument guard.
Compare_Result compare_term_occurs(const data_expression &term1, const data_expression &term2) const
Compares terms by checking whether one is a part of the other.
const bool f_full
Flag indicating whether or not the arguments of equality functions are taken into account.
Compare_Result compare_guard_structure(const data_expression &guard1, const data_expression &guard2, const std::vector< variable > &f_variables) const
Compares the structure of two guards.
Compare_Result compare_term(const data_expression &term1, const data_expression &term2) const
Compares two terms.
Compare_Result compare_guard(const data_expression &guard1, const data_expression &guard2, const std::vector< variable > &f_variables) const
Compares two guards.
const bool f_reverse
Flag indicating whether or not the result of the comparison between the first two arguments.
Base class for classes that provide functionality to modify or create terms.
data_expression orient(const data_expression &a_term)
Orients the term a_term such that all equations of the form t1 == t2 are.
Manipulator(const Info &a_info)
Constructor initializing the rewriter and the field f_info.
data_expression set_true(const data_expression &a_formula, const data_expression &a_guard) const
Initializes the table Manipulator::f_set_true and calls.
std::unordered_map< data_expression, data_expression > f_orient
A table used by the method Manipulator::orient. The method Manipulator::orient stores resulting terms...
data_expression set_false(const data_expression &a_formula, const data_expression &a_guard) const
Initializes the table Manipulator::f_set_false and calls the method.
const Info & f_info
A class that provides information on the structure of expressions in one of the.
static data_expression make_reduced_if_then_else(const data_expression &a_expr, const data_expression &a_high, const data_expression &a_low)
Returns an expression in the internal format of the rewriter with the jitty strategy.
data_expression set_false_auxiliary(const data_expression &a_formula, const data_expression &a_guard, std::unordered_map< data_expression, data_expression > &f_set_false) const
Replaces all occurences of a_guard in a_formula by false.
data_expression set_true_auxiliary(const data_expression &a_formula, const data_expression &a_guard, std::unordered_map< data_expression, data_expression > &f_set_true) const
Replaces all occurences of a_guard in a_formula by true. Additionally, if the variable.
RewriterProver(const data_specification &data_spec, mcrl2::data::rewriter::strategy strat, const used_data_equation_selector &equations_selector)
RewriterProver(const RewriterProver &other)=delete
data_expression rewrite(const data_expression &t, substitution_type &sigma) override
Rewrite an mCRL2 data term.
rewrite_strategy getStrategy() override
Get rewriter strategy that is used.
void rewrite(data_expression &result, const data_expression &t, substitution_type &sigma) override
Rewrite an mCRL2 data term.
~RewriterProver() override=default
RewriterProver(const RewriterProver &rewr, BDD_Prover prover_obj_)
void thread_initialise() override
std::shared_ptr< Rewriter > clone() override
Clone a rewriter.
Rewriter interface class.
void rewrite_where(data_expression &result, const where_clause &term, 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.
std::map< function_symbol, std::size_t > f_operators
~SMT_LIB_Solver() override=default
void translate_less_than(const data_expression &a_clause)
void produce_notes_for_operators()
void translate_less_than_or_equal(const data_expression &a_clause)
void translate_max(const data_expression &a_clause)
void translate_pred(const data_expression &a_clause)
std::set< variable > f_pos_variables
void translate_unary_minus(const data_expression &a_clause)
void translate_unknown_operator(const data_expression &a_clause)
void add_bool2pred_and_translate_clause(const data_expression &a_clause)
const data_expression & arg(const data_expression &x) const
void translate(data_expression_list a_formula)
void translate_nat_variable(const variable &a_clause)
void translate_add_c(const data_expression &a_clause)
void produce_notes_for_predicates()
void translate_c_nat(const data_expression &a_clause)
void translate_nat_constant(const data_expression &a_clause)
void translate_int_constant(const data_expression &a_clause)
void translate_binary_minus(const data_expression &a_clause)
void translate_greater_than(const data_expression &a_clause)
void translate_equality(const data_expression &a_clause)
std::string f_operators_extrafuns
std::set< variable > f_nat_variables
std::string f_variables_extrafuns
void translate_variable(const variable &a_clause)
std::string f_sorts_notes
void translate_c_int(const data_expression &a_clause)
void translate_inequality(const data_expression &a_clause)
std::map< sort_expression, std::size_t > f_sorts
void declare_predicates()
void translate_not(const data_expression &a_clause)
const data_expression & right(const data_expression &x) const
void translate_clause(const data_expression &a_clause, const bool a_expecting_predicate)
void translate_abs(const data_expression &a_clause)
std::string f_predicates_notes
void produce_notes_for_sorts()
void translate_pos_constant(const data_expression &a_clause)
void translate_pos_variable(const variable &a_clause)
void translate_greater_than_or_equal(const data_expression &a_clause)
void translate_min(const data_expression &a_clause)
std::string f_operators_notes
void translate_plus(const data_expression &a_clause)
void translate_function_symbol(const data_expression &a_clause)
void translate_succ(const data_expression &a_clause)
std::set< variable > f_variables
void translate_multiplication(const data_expression &a_clause)
const data_expression & left(const data_expression &x) const
virtual ~SMT_Solver()=default
virtual bool is_satisfiable(const data_expression_list &a_formula)=0
static bool execute(std::string const &benchmark)
A strategy is a list of rules and the number of variables that occur in it.
An enumerator algorithm that generates solutions of a condition.
The default element for the todo list of the enumerator.
Rewriter that operates on data expressions.
void operator()(data_expression &result, const data_expression &d) const
Rewrites a data expression.
rewriter(const std::shared_ptr< detail::Rewriter > &r)
Constructor for internal use.
static const data_specification & default_specification()
Default specification used if no specification is specified at construction.
void operator()(data_expression &result, const data_expression &d, substitution_type &sigma) const
Rewrites the data expression d, and on the fly applies a substitution function to data variables.
void thread_initialise()
Initialises this rewriter with thread dependent information.
data_expression operator()(const data_expression &d, substitution_type &sigma) const
Rewrites the data expression d, and on the fly applies a substitution function to data variables.
static substitution_type & empty_substitution()
rewriter clone()
Create a clone of the rewriter in which the underlying rewriter is copied, and not passed as a shared...
rewriter(const data_specification &d=rewriter::default_specification(), const strategy s=rewrite_strategy::jitty)
Constructor.
rewriter(const rewriter &r)=default
Constructor.
void operator()(data_expression &result, const data_expression &d, const SubstitutionFunction &sigma) const
Rewrites the data expression d, and on the fly applies a substitution function. to data variables.
data_expression operator()(const data_expression &d, const SubstitutionFunction &sigma) const
Rewrites the data expression d, and on the fly applies a substitution function. to data variables.
rewriter(const data_specification &d, const EquationSelector &selector, const strategy s=rewrite_strategy::jitty)
Constructor.
data_expression operator()(const data_expression &d) const
Rewrites a data expression.
Identifier generator that stores the identifiers of the context in a set. Using the operator()() and ...
Component for selecting a subset of equations that are actually used in an encompassing specification...
variable(const variable &) noexcept=default
Move semantics.
const sort_expression & sort() const
variable(const core::identifier_string &name, const sort_expression &sort)
Constructor.
\brief A where expression
const assignment_list & assignments() const
const data_expression & body() const
#define mCRL2log(LEVEL)
mCRL2log(LEVEL) provides the stream used to log.
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...
static void checkPattern(const data_expression &p)
static void check_vars(application::const_iterator begin, const application::const_iterator &end, const std::set< variable > &vars, std::set< variable > &used_vars)
void set_enumerator_iteration_limit(std::size_t size)
bool isValidRewriteRule(const data_equation &data_eqn)
Check whether or not an mCRL2 data equation is a valid rewrite rule.
static bool occur_check(const variable &v, const atermpp::aterm &e)
static void checkPattern(application::const_iterator begin, const application::const_iterator &end)
Answer
A prover that uses EQ-BDDs.
variable_list set_intersection(const variable_list &x, const std::set< variable > &y)
Returns the intersection of a list and a set of variables.
static void check_vars(const data_expression &expr, const std::set< variable > &vars, std::set< variable > &used_vars)
variable_list set_difference(const variable_list &x, const std::set< variable > &y)
Returns a list of variables equal to the first list, not containing the elements in the second.
A collection of utilities for lazy expression construction.
data_expression and_(data_expression const &p, data_expression const &q)
Returns an expression equivalent to p or q.
Namespace for system defined sort bool_.
void make_not(data_expression &result, const data_expression &arg0)
Make an application of function symbol !.
bool is_false_function_symbol(const atermpp::aterm &e)
Recogniser for function false.
void make_and(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol &&.
bool is_or_application(const atermpp::aterm &e)
Recogniser for application of ||.
const basic_sort & bool_()
Constructor for sort expression Bool.
bool is_implies_application(const atermpp::aterm &e)
Recogniser for application of =>.
application not_(const data_expression &arg0)
Application of function symbol !.
application and_(const data_expression &arg0, const data_expression &arg1)
Application of function symbol &&.
application implies(const data_expression &arg0, const data_expression &arg1)
Application of function symbol =>.
application or_(const data_expression &arg0, const data_expression &arg1)
Application of function symbol ||.
const function_symbol & false_()
Constructor for function symbol false.
bool is_and_application(const atermpp::aterm &e)
Recogniser for application of &&.
void make_or(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of 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 & true_()
Constructor for function symbol true.
void make_implies(data_expression &result, const data_expression &arg0, const data_expression &arg1)
Make an application of function symbol =>.
Namespace for system defined sort int_.
bool is_cint_application(const atermpp::aterm &e)
Recogniser for application of @cInt.
bool is_integer_constant(const data_expression &n)
Determines whether n is an integer constant.
Namespace for system defined sort list.
bool is_list(const sort_expression &e)
Recogniser for sort expression List(s)
Namespace for system defined sort nat.
bool is_cnat_application(const atermpp::aterm &e)
Recogniser for application of @cNat.
bool is_nat(const sort_expression &e)
Recogniser for sort expression Nat.
bool is_natural_constant(const data_expression &n)
Determines whether n is a natural constant.
Namespace for system defined sort pos.
bool is_positive_constant(const data_expression &n)
Determines whether n is a positive constant.
bool is_pos(const sort_expression &e)
Recogniser for sort expression Pos.
bool is_add_with_carry_application(const atermpp::aterm &e)
Recogniser for application of @addc.
Namespace for system defined sort real_.
bool is_abs_application(const atermpp::aterm &e)
Recogniser for application of abs.
bool is_plus_application(const atermpp::aterm &e)
Recogniser for application of +.
bool is_maximum_application(const atermpp::aterm &e)
Recogniser for application of max.
bool is_pred_application(const atermpp::aterm &e)
Recogniser for application of pred.
bool is_succ_application(const atermpp::aterm &e)
Recogniser for application of succ.
bool is_times_application(const atermpp::aterm &e)
Recogniser for application of *.
bool is_negate_application(const atermpp::aterm &e)
Recogniser for application of -.
bool is_minimum_application(const atermpp::aterm &e)
Recogniser for application of min.
bool is_minus_application(const atermpp::aterm &e)
Recogniser for application of -.
bool is_application(const data_expression &t)
Returns true if the term t is an application.
bool is_where_clause(const atermpp::aterm &x)
Returns true if the term t is a where clause.
bool is_abstraction(const atermpp::aterm &x)
Returns true if the term t is an abstraction.
application if_(const data_expression &arg0, const data_expression &arg1, const data_expression &arg2)
Application of function symbol if.
bool is_forall(const atermpp::aterm &x)
Returns true if the term t is a universal quantification.
bool is_function_symbol(const atermpp::aterm &x)
Returns true if the term t is a function symbol.
std::set< data::variable > find_free_variables(const data::data_expression &x)
bool is_exists(const atermpp::aterm &x)
Returns true if the term t is an existential quantification.
bool is_machine_number(const atermpp::aterm &x)
Returns true if the term t is a machine_number.
bool is_lambda(const atermpp::aterm &x)
Returns true if the term t is a lambda abstraction.
bool is_variable(const atermpp::aterm &x)
Returns true if the term t is a variable.
static std::size_t max_enumerator_iterations
bool operator()(const atermpp::aterm &t) const
rewriter_wrapper(Rewriter *r)